【发布时间】:2016-12-20 09:13:52
【问题描述】:
我正在尝试在我的 Node.js 网站上验证来自 WooCommerce 的 webhook 交易。但是我无法让 2 个字符串匹配。
可以看到php签名是用下面的代码生成的,源码可以看这里WooCommerce Source。
base64_encode( hash_hmac( $hash_algo, $payload, $this->get_secret(), true ) ));
我注意到,如果我在 hash_hmac 上关闭 true,然后我可以让 2 个系统创建匹配项,但是我宁愿不编辑 WooCommerce 的核心,所以我想知道是否有什么我在这里失踪了?
对于我的示例,我确实编辑了核心并强制有效负载如下,这样我就可以轻松地尝试匹配 2 个系统
payload = '{"id":1,"etc":2,"host":"http:/\/localhost\/view-order\/8"}'
secret = 'welcome'
我在 Node.Js 中的代码如下。
var crypto = require('crypto');
hmac = crypto.createHmac('sha256', secret);
hmac.setEncoding('binary');
hmac.write(payload);
hmac.end();
hash = hmac.read();
result = base64.encode(hash);
console.log(result);
如果我从“主机”JSON 中删除 url,那么它确实可以工作,这与它被转义的方式有关吗? 我认为这可能是 PHP 和节点进行 SHA256 散列的方式的问题。我真的无法确切地锻炼如何解决这个问题。
任何帮助都会很棒,
谢谢
【问题讨论】:
-
你最终弄清楚了吗?我仍在努力让订单更新 webhook 正常触发,之后我怀疑我会遇到这个问题。
-
我从来没有正确解决丢失匹配加密,我最终修改了 woo commerce 在其核心中创建哈希的方式,这不是最好的解决方案,因为我需要在每次 woo 更新时更新它......如果你已经设法让 2 本地同步,我很想看看代码!
-
@fortuneRice 你运气好吗?
-
我不得不暂停那个项目,所以我还没到那个阶段。
标签: php node.js wordpress woocommerce