这是来自Xero的params
{"events"=>nil,
"firstEventSequence"=>0,
"lastEventSequence"=>0,
"entropy"=>"KFDXIMNLPDAMRBOEVAVF",
"controller"=>"admin/billing/webhooks",
"action"=>"handle_hook",
"webhook"=>
{"events"=>nil,
"firstEventSequence"=>0,
"lastEventSequence"=>0,
"entropy"=>"KFDXIMNLPDAMRBOEVAVF"}}
我想验证接收意图
https://developer.xero.com/documentation/webhooks/configuring-your-server#intent
data = {"events"=>nil, "firstEventSequence"=>0, "lastEventSequence"=>0, "entropy"=>"KFDXIMNLPDAMRBOEVAVF"}
Key = HRj6QPub9BNE4MWewrcLrkKFjpiikV1KrlMZCvDawyDR95MGkkuE2y1DXFP1tifsEWaJygLx6zG0r9rXVTflcg==
已在下面尝试
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), key, data)).strip()
*** TypeError Exception: no implicit conversion of ActionController::Parameters into String
或
hash = OpenSSL::HMAC.digest('sha256', key, data)
*** TypeError Exception: no implicit conversion of ActionController::Parameters into String
如何在这里实现这一点?
为确保您收到的请求来自Xero,您需要验证x-xero签名标头中提供的签名。创建或重新启用网络钩子订阅(或更新订阅url)时,将提示用户启动“接收意图”验证。此验证过程将是对订阅中提供的url的一系列HTTPS POST请求。
EDIT Rails正在将空白数组转换为nil,所以根据文档,我自己制作了负载,使其看起来完全相同
data = params[:webhook]
payload = {
"events": [],
"lastEventSequence": data[:lastEventSequence],
"firstEventSequence": data[:firstEventSequence],
"entropy": data[:entropy]
}
数据应为字符串。
digest = OpenSSL::Digest::Digest.new('sha256')
hmac_digest = OpenSSL::HMAC.digest(digest, key, data['firstEventSequence'].to_s)
Base64.encode64(hmac_digest).strip() => "JvORQ/sWHvAXO/3nm9vG7+VgAqA93bTSMMIbVHIRgnM="
在研究和调试代码后,终于找到了一种方法
def handle_hook
key = ENV['XERO_WEBHOOK_KEY']
payload = request.body.read
calculated_hmac = Base64.encode64(OpenSSL::HMAC.digest('sha256', key, payload))
if calculated_hmac.strip() == request.headers['x-xero-signature']
head :ok
else
head :unauthorized
end
end
在这里使用地带()很神奇
我必须使用Java通过热敏打印机打印收据。我已经完成了所有工作。我的程序从数据库中获取数据,并使用特殊字符、制表符和\n转换为一个字符串。然后将字符串传递给另一个将其转换为图形的方法。 问题是当我点击打印按钮时,白纸就出来了。我注意到我的字符串的前4-5个字符被打印在纸币最末端右上角的最后一行。我的打印机是爱普生TM-T81。 打印账单的方法是: 问题是什么?我该如何解决?我认为我没有在drawS
在Windows7上从MF H264流中获取SPS和PPS值的简单方法是什么?
问题内容: 对于我来说,目前尚不清楚,在这种情况下,我想使用值接收器而不是始终使用指针接收器。 回顾一下文档: 该 文档 还说:“对于基本类型,切片和小型结构之类的类型,值接收器非常便宜,因此,除非该方法的语义要求使用指针,否则值接收器是高效且清晰的。” 首先, 它说“非常便宜”,但问题是它比指针接收器便宜。因此,我做了一个小的基准测试(基于要点的代码),向我展示了,即使对于只有一个字符串字段的结
我有一个项目与多模块在karaf(版本3.0.3),我需要添加一个依赖Xero API(发票网关)-https://github.com/XeroAPI/Xero-Java 我通过felix apache使用OSGI实现。在模块中,我向Xero添加了所有依赖项,这些依赖项位于pom波纹管中。 啪.xml 所有实现都已部署和编译,但在运行karaf时我遇到了下一个错误。 对数卡拉夫 2019-07-
我知道我可以设置click_action,但这只是为了定制哪些活动将在通知点击时启动,我需要一些将在通知收到时自动启动的东西。 我尝试了quick start messaging firebase示例,其中有一个onMessageReceived()方法,但它仅在应用程序处于前台时才起作用。是否有一些东西将执行同时应用程序在后台?GCM可以通过直接从接收到通知时调用的广播接收器启动活动意图来完成我
问题内容: 进行请求时是否可以接收由远程服务器设置的cookie ? 我需要php来执行http请求,存储cookie,然后使用存储的cookie进行第二个http请求。 问题答案: 您应该为此目的使用实现名为cookie jar的功能,该功能允许将cookie保存在文件中,并将其重新用于后续请求。 这里有一个简短的代码片段,介绍了如何实现: 注意 :必须注意,您应该已安装pecl扩展名(或用PH