Recurly - токен недействителен или просрочен - как найти дополнительную информацию в сообщении об ошибке

Я интегрирую свое приложение Rails 4 с Recurly. Я использую Recurly.js v3 для получения биллингового токена, а затем v2 API через Ruby Gem.

Все работало как локально, так и на героку, пока я не сменил учетные данные API (RECURLY_SUBDOMAIN, RECURLY_JS_PRIVATE_KEY, RECURLY_API_KEY) в моем файле.env на другую учетную запись для производства. Теперь я получаю сообщение об ошибке от 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();
  }
});

Я создал хук before_create для моего пользователя devise, который вызывает Recurly API:

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

Вот где происходит ошибка. Есть ли способ найти дополнительную информацию о действительности токена? Или какие-либо другие предложения по устранению неполадок?

Спасибо за любую помощь

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/

Другие вопросы по тегам