我需要设置一个 PHP 页面来接收 Webhook - 我过去已经做过很多这样的事情,所以这不是问题,但是我正在为这个项目使用的 API 要求我的 webhook 验证标头中提供的签名。
作为验证请求的一部分,它将发送以下内容:
HEADER:
"x-xero-signature" : HASH_VALUE
PAYLOAD:
{
"events": [],
"lastEventSequence": 0,
"firstEventSequence": 0,
"entropy": "S0m3r4N0m3t3xt"
}
我创建了一个 Webhook 密钥(例如“ABC123”),作为此 Webhook 验证请求的一部分,我必须确保使用 HMACSHA256 以及您的 Webhook 密钥和 base64 编码进行哈希处理的有效负载应与标头中的签名匹配。这是一个正确签名的有效负载。如果签名与散列的有效负载不匹配,则它是错误签名的有效负载。
要获得接收意图验证,接收 URL 必须对所有正确签名的有效负载响应状态:200 Ok,对所有错误签名的有效负载响应状态:401 Unauthorized。
我现在有点不知道如何进行此操作 - 此设置的详细信息可以在这里找到:
https://developer.xero.com/documentation/getting-started/webhooks https://developer.xero.com/documentation/getting-started/webhooks
要将发送的数据与标头中的验证哈希进行匹配,您需要执行以下操作:
- 获取有效负载:
$payload = file_get_contents("php://input");
- 使用有效负载和您的 Webhook 密钥生成哈希:
$yourHash = base64_encode(hash_hmac('sha256', $payload, $yourWebhookKey));
- 根据标头中提供的哈希值检查您的哈希值:
if ($yourHash === $_SERVER['x-xero-signature']) {}
您必须检查$_SERVER
如果这不能直接工作,则获取正确密钥的数组;一开始可能都是大写的。
Edit:正如OP所指出的,正确的变量是$_SERVER['HTTP_X_XERO_SIGNATURE']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)