【问题标题】:Recurly - Token invalid or expired - how to find more info on error messageRecurly - 令牌无效或过期 - 如何查找有关错误消息的更多信息
【发布时间】:2014-07-11 08:48:42
【问题描述】:

我正在将我的 Rails 4 应用程序与 Recurly 集成。我使用 Recurly.js v3 来获取计费令牌,然后通过 Ruby Gem 获取 API 的 v2。

在我将 .env 文件中的 API 凭据(RECURLY_SUBDOMAINRECURLY_JS_PRIVATE_KEYRECURLY_API_KEY)更改为另一个用于生产的循环帐户之前,一切都在本地和 heroku 上运行。现在我收到了 Recurly 的错误响应:

>>ERROR -- Recurly: <=== 404 Not Found (948.3ms)
>><error>
>>  <symbol>token_invalid</symbol>
>>  <description>Token is either invalid or expired</description>
>></error>

令牌不会过期,因为令牌信息的请求直接在 API 订阅请求之前进行。而且我找不到有关令牌为何无效的信息。它已经通过了卡上的 Recurly.js 验证,因为它首先返回了令牌,所以我认为这不是卡的问题。

这是我对 recurly.js 的令牌调用 - 这是在提交 views\devise\registrations\new.html.erb 表单时执行的:

$(document).on("page:change", function(){
  if($('.registrations.new, .registrations.edit').length){
    if(!recurly.configured)
      recurly.configure('<%=Recurly.js.private_key%>') ;

    var form = $('#card-form');
    var subscription = {
      setupForm: function() {
        return form.submit(function() {
          event.preventDefault();
          if ($('#card_number').length) {
            recurly.token(form, subscription.tokenHandler);
            return false;
          } else {
           return true;
          }
        });
      },
      tokenHandler: function(err, token) {
       //console.log(token); at this point returns a different token each time
       if(err){
         //error message rendered
       } else {
         //card token applied to field in devise registrations form and form submitted
         $('#user_card_token').val(token.id)
         $('#card-form')[0].submit()
       }
     }   
   };
   subscription.setupForm();
  }
});

我在我的设计用户上创建了一个调用 Recurly API 的 before_create 钩子:

In models/user.rb

before_create :create_subscription

def create_subscription
  #logger.info card_token at this point returns the token received in the js above
  subscription = Recurly::Subscription.create!(
    plan_code: plan,
    account:  {
      account_code: recurly_account_code,
      email:        email,
      first_name:   first_name,
      last_name:    last_name,
      billing_info: {token_id: card_token}
    }
  )
rescue 
  errors.add :base, "Card Error"
  false
end

这就是错误发生的地方。有没有办法找到有关令牌有效性的更多信息?或任何其他故障排除建议?

感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 recurly


    【解决方案1】:

    您似乎使用了错误的密钥来配置 Recurly.js。

    recurly.configure('<%=Recurly.js.private_key%>') ;
    

    应该是

    recurly.configure('PUBLIC_KEY');
    

    其中 PUBLIC_KEY 是您的 API 访问页面上的公钥:https://app.recurly.com/go/developer/api_access

    参考:https://docs.recurly.com/js/#getting-started

    【讨论】:

    • 谢谢 - 所以似乎 ruby​​ Gem github README 引用了来自 api v2 的 JS 私钥,这使事情变得混乱。我看到你已经更新了!
    • 太棒了!是的,我们很乐意为大家解开那一点困惑。感谢您的反馈。
    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多