我需要设置一个用于接收Webhooks的PHP页面 - 我以前做过很多这样的事情,这不是问题,但我正在为这个项目工作的API要求我的webhook验证标题中提供的签名.
作为验证请求的一部分,它将发送以下内容:
HEADER:
"x-xero-signature" : HASH_VALUE
PAYLOAD:
{
"events": [],
"lastEventSequence": 0,
"firstEventSequence": 0,
"entropy": "S0m3r4N0m3t3xt"
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个Webhook密钥(例如'ABC123'),并且作为此Webhook的验证请求的一部分,我必须确保使用带有webhook密钥和base64编码的HMACSHA256散列的有效负载应该与标头中的签名匹配.这是一个正确签名的有效负载.如果签名与散列有效负载不匹配,则它是错误签名的有效负载.
要获得Intent接收验证,接收URL必须响应状态:200 Ok所有正确签名的有效负载并以状态响应:401未授权所有错误签名的有效负载.
关于如何解决这个问题,我现在有点迷失了 - 这个设置的细节可以在这里找到:
https://developer.xero.com/documentation/getting-started/webhooks
要将已发送的数据与标头中的验证哈希相匹配,您需要执行以下操作:
$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']