【问题标题】:NoMethodError - undefined method `split' for #<Hash:...:NoMethodError - #<Hash:...的未定义方法`split':
【发布时间】:2015-09-04 19:38:30
【问题描述】:

我正在创建一个 webhook 通知:

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

然后解析:

 @message = Braintree::WebhookNotification.parse(signature, 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

【问题讨论】:

  • 确保您在signaturepayload 中收到正确的数据,然后再将它们发送到parse 方法。只需像这样打印它们:puts signature.inspect 并查看它是否以正确的格式获取正确的数据。
  • 我会添加回复给我的内容。
  • 我看到返回的对象是一个哈希。在某些时候,它会尝试在哈希对象上调用 split 方法并获取您提到的错误。 split 方法适用于字符串对象。
  • 您可以发布您的webhooks_controller.rb 文件吗?并标记第 30 行?
  • 我会放一个指向 pastebin 的链接。

标签: ruby-on-rails ruby braintree braintree-rails


【解决方案1】:

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]

【讨论】:

    猜你喜欢
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多