2015-09-04 6 views
0

Я создаю уведомление webhook с:NoMethodError - неопределенный метод разбиваться на # <Hash: ...:

signature, payload = Braintree::WebhookTesting.sample_notification(
    Braintree::WebhookNotification::Kind::SubMerchantAccountApproved, 
    rand(10000) 
) 

А затем разбор с:

@message = Braintree::WebhookNotification.parse(signature, payload) 

Подпись и Payload ответы:

{:bt_signature=&gt;&quot;gcsg95j47yvzpgrr|61350cd9c99cbac6a7905479a5fa061976114e51&quot;, :bt_payload=&gt;&quot;ICAgICAgICA8bm90aWZpY2F0aW9uPgogICAgICAgICAgPHRpbWVzdGFtcCB0 
eXBlPSJkYXRldGltZSI+MjAxNS0wOS0wNFQwMjo1Nzo0NFo8L3RpbWVzdGFt 
cD4KICAgICAgICAgIDxraW5kPnN1Yl9tZXJjaGFudF9hY2NvdW50X2FwcHJv 
dmVkPC9raW5kPgogICAgICAgICAgPHN1YmplY3Q+CiAgICAgICAgICAgICAg 
ICAgICAgPG1lcmNoYW50X2FjY291bnQ+CiAgICAgICAgICA8aWQ+MzEzNDwv 
aWQ+CiAgICAgICAgICA8bWFzdGVyX21lcmNoYW50X2FjY291bnQ+CiAgICAg 
ICAgICAgIDxpZD5tYXN0ZXJfbWFfZm9yXzMxMzQ8L2lkPgogICAgICAgICAg 
ICA8c3RhdHVzPmFjdGl2ZTwvc3RhdHVzPgogICAgICAgICAgPC9tYXN0ZXJf 
bWVyY2hhbnRfYWNjb3VudD4KICAgICAgICAgIDxzdGF0dXM+YWN0aXZlPC9z 
dGF0dXM+CiAgICAgICAgPC9tZXJjaGFudF9hY2NvdW50PgoKICAgICAgICAg 
IDwvc3ViamVjdD4KICAgICAgICA8L25vdGlmaWNhdGlvbj4K 
&quot;} 

я получаю ошибку:

NoMethodError - undefined method `split' for #<Hash:0x007fdb043e7b50>: 

App backtrace 
------------- 

- () Users/johnmolina/Documents/Rails/Nyvur/app/controllers/webhooks_controller.rb:30:in `handle' 
- () Users/johnmolina/Documents/Rails/Nyvur/bin/rails:8:in `<top (required)>' 
- () Users/johnmolina/Documents/Rails/Nyvur/bin/spring:16:in `<top (required)>' 

Я не мог найти много в исходном коде, и мне было интересно, если кто-то еще столкнулся с этой проблемой?

Вот Webhooks Controller.

+0

Убедитесь, что вы получите правильные данные в '' signature' и payload', прежде чем отправить их в 'parse' методу. Просто напечатайте их, как: 'puts signature.inspect' и посмотрите, правильно ли они получают правильные данные в правильном формате. –

+0

Я добавлю, что ответ дал мне. – whatAboutJohn

+0

Я вижу, что возвращаемый объект является хешем. В какой-то момент он пытается вызвать метод «split» на хэш-объекте и получает указанную вами ошибку. Метод 'split' работает со строковыми объектами. –

ответ

3

Метод Braintree::WebhookTesting.sample_notification возвращает хэш, а синтаксис signature, payload = ожидает массив.

Вы должны извлечь подпись и полезную нагрузку от хэша, используя свои ключи:

sample_notification = Braintree::WebhookTesting.sample_notification(
    Braintree::WebhookNotification::Kind::SubMerchantAccountApproved, 
    rand(10000) 
) 

signature = sample_notification[:bt_signature] 
payload = sample_notification[:bt_payload] 
+0

Это сработало, спасибо за помощь. – whatAboutJohn

Смежные вопросы