2014-07-11 3 views
1

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

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

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 

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

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

ответ

2

Похоже, вы используете неправильный ключ для настройки Recurly.js.

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

должен быть

recurly.configure('PUBLIC_KEY'); 

Где PUBLIC_KEY является Public Key найден на странице Access API здесь: https://app.recurly.com/go/developer/api_access

реф: https://docs.recurly.com/js/#getting-started

+0

Благодарности - так, кажется, рубиновый Gem github README ссылается на закрытый JS-ключ от api v2, который путает вещи. Я вижу, вы уже обновили это! – cash22

+0

Удивительный! Да, мы хотели бы прояснить эту путаницу для всех. Спасибо за отличную обратную связь. – chrissrogers