如何在PHP Laravel中使用HMACSHA256调用Xero webhook payload

mmvthczy  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(137)

在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。了解更多

8fsztsew

8fsztsew1#

为了接收,将发送一个签名正确和不正确的包,以测试您处理两者的方式。
签名错误的软件包通常与正确的签名仅相差1个数字,例如/
Xero希望您的服务器在签名不匹配时发送401代码。上面的PHP代码只有if条件返回代码200,没有else条件返回代码401。

相关问题