PHP-设置带有签名验证的Webhook接收器



我需要设置一个用于接收webhook的PHP页面-我过去做过很多这样的事情,所以这不是问题,但我为这个项目使用的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

要将发送的数据与标头中的验证哈希进行匹配,需要执行以下操作:

  1. 获取有效载荷:
    $payload = file_get_contents("php://input");
  2. 使用负载和webhook密钥生成哈希:
    $yourHash = base64_encode(hash_hmac('sha256', $payload, $yourWebhookKey));
  3. 根据标头中提供的哈希值检查您的哈希值:
    if ($yourHash === $_SERVER['x-xero-signature']) {}

如果无法直接执行此操作,则必须检查$_SERVER数组中的密钥是否正确;一开始可能都是大写。

编辑:正如OP所指出的,正确的变量是$_SERVER['HTTP_X_XERO_SIGNATURE']

最新更新