我需要设置一个用于接收Webhooks的PHP页面 - 我以前做过很多这样的事情,这不是问题,但是我为这个项目工作的API需要我的webhook验证标题中提供的签名。
作为验证请求的一部分,它将发送以下内容:
HEADER:
"x-xero-signature" : HASH_VALUE
PAYLOAD:
{
"events": [],
"lastEventSequence": 0,
"firstEventSequence": 0,
"entropy": "S0m3r4N0m3t3xt"
}
我已经创建了一个Webhook密钥(例如' ABC123'),并且作为此Webhook的验证请求的一部分,我必须确保使用HMACSHA256和您的webhook密钥进行哈希处理的有效负载base64编码应与标头中的签名匹配。这是一个正确签名的有效负载。如果签名与散列有效负载不匹配,则签名有效负载不正确。
要获得Intent接收验证,接收URL必须以状态响应:200 Ok所有正确签名的有效负载并以状态响应:401未授权所有错误签名的有效负载。
关于如何解决这个问题,我现在有点迷失了 - 有关此设置的详细信息,请点击此处:
https://developer.xero.com/documentation/getting-started/webhooks
答案 0 :(得分:6)
要将已发送的数据与标头中的验证哈希相匹配,您需要执行以下操作:
$payload = file_get_contents("php://input");
$yourHash = base64_encode(hash_hmac('sha256', $payload, $yourWebhookKey));
if ($yourHash === $_SERVER['x-xero-signature']) {}
如果不能直接使用,您必须检查$_SERVER
数组中是否有正确的密钥;它可能都是大写的。
修改:如OP所述,正确的变量为$_SERVER['HTTP_X_XERO_SIGNATURE']