在PHP中验证Xero webhook
。这是我的代码
$payload = file_get_contents("php://input");
$webhookKey = '-----Webhook Key-----';
$computedSignatureKey = base64_encode(hash_hmac('sha256', $payload, $webhookKey, true));
if ($computedSignatureKey === $_SERVER['HTTP_X_XERO_SIGNATURE']) {
return response(200);
}
return response(401);
假设xero签名是= aQGh6OxbmgB1NQnnKrQt0utlrqC4dbAJSC2/Aa2/IE4=
,上面的代码返回的散列值是= aQGh6OxbmgB1NQnnKrQt0utlrqC4dbAJSC2KAa2/IE4=
这两个值之间存在差异,差异是斜杠(/)
来自xero
的签名包括(/)
,但在散列后,它删除了(/)
并将其替换为字母表
所以我无法验证Intent to receive
Webhook
它总是返回此状态Intent to receive
required对签名错误的有效负载的响应不是401
。了解更多
1条答案
按热度按时间8fsztsew1#
为了接收,将发送一个签名正确和不正确的包,以测试您处理两者的方式。
签名错误的软件包通常与正确的签名仅相差1个数字,例如/
Xero希望您的服务器在签名不匹配时发送401代码。上面的PHP代码只有if条件返回代码200,没有else条件返回代码401。