我正在尝试在Xero中建立一个Webhook。我创建了一个Xero命中并发送一些标头和有效负载的终结点。我从标题中提取散列,并与有效负载的散列匹配,但我从未得到相同的散列。我正在使用下面的代码来做到这一点。
router.post('/weebhook', function(req, res, next) {
console.log(req.headers)
console.dir(req.body);
try {
var xero_signature = req.headers['x-xero-signature']
var encoded_data = encodePayload(req.body)
console.log(xero_signature)
console.log(encoded_data)
if (encoded_data == xero_signature) {
res.status(200).json();
} else {
res.status(401).json();
}
}catch(eror) {
console.log(eror)
}
});
function encodePayload(payload) {
console.log(JSON.stringify(payload))
const secret = 'TbJjeMSPAvJiMiD2WdHbjP20iodKCA3bL5is8vo47/pCcuGCsjtUDb7cBnWo20e0TBwZsQ/lPM41QgypzZE6lQ==';
const hash = crypto.createHmac('sha256',secret,true)
.update(JSON.stringify(payload))
.digest().toString('base64');
return hash
}
请让我知道是什么问题?
[Xero提供了一个打字稿示例应用程序,用于实现webhooks签名验证。
这里的代码对您有帮助吗? https://github.com/XeroAPI/XeroWebhooksReceiver-Node/blob/master/src/server/server.ts#L58L59
[另外,请您删除并重新创建您的Webhook,因为您刚刚向所有人提供了秘密的Webhooks密钥。
将.update(JSON.stringify(payload))
更改为.update(payload.toString())