无法在xero中设置webhook?

时间:2019-12-09 06:05:46

标签: node.js hash webhooks xero-api

我正在尝试在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哈希-NzQOq6yw6W6TKs1sQ1AJtMWX24uzzkyvh92fMxukreE =
  • 我的哈希-L74zFdcuRsK3zHmzu9K37Y1mAVIAIsDgneAPHaJ + vI4 =

请让我知道是什么问题?

2 个答案:

答案 0 :(得分:1)

Xero提供了一个打字稿示例应用程序,用于实现webhooks签名验证。

这里的代码对您有帮助吗? https://github.com/XeroAPI/XeroWebhooksReceiver-Node/blob/master/src/server/server.ts#L58L59

此外,由于您刚刚向所有人提供了秘密的Webhooks密钥,因此请删除并重新创建Webhook。

答案 1 :(得分:0)

.update(JSON.stringify(payload))更改为.update(payload.toString())