在Node.JS上匹配WooCommerce WebHook签名的问题
我试图validation从我的Node.js网站WooCommerce的webhook交易。 但是我不能得到2个string匹配。
我可以看到,使用下面的代码生成的PHP签名,源可以在这里查看WooCommerce源 。
base64_encode( hash_hmac( $hash_algo, $payload, $this->get_secret(), true ) ));
我已经注意到,如果我closureshash_hmac
上的hash_hmac
,那么我可以得到2个系统来创build一个匹配,但我宁愿不编辑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哈希的方式的一个问题。 我真的不能解决这个问题。
任何帮助将是伟大的,
谢谢
我遇到了类似的问题,使用这里build议的代码: WooCommerce的SHA256 webhook签名从不validation
var processWebHookSignature = function (secret, body, signature) { signatureComputed = crypto.createHmac('SHA256', secret) .update(new Buffer(JSON.stringify(body), 'utf8')) .digest('base64'); return ( signatureComputed === signature ) ? true : false; }
(身体来自req.body)
当我改变我获得原始身体的方式时,这才开始为我工作。 我使用bodyParser中间件:
app.use(bodyParser.json({verify:function(req,res,buf){req.rawBody=buf}}))
(如在https://github.com/expressjs/body-parser/issues/83#issuecomment-80784100中解释的)
所以现在,而不是使用new Buffer(JSON.stringify(body), 'utf8')
我只是使用req.rawBody
我希望这也能解决你的问题。