正确地向Webhook发送了200个带有空白的响应.提供的最小示例



按照在线一些示例之后,我要返回200个响应以进行正确签名的有效载荷,以及错误签名或畸形有效载荷的401响应。

已经测试了以下最小示例。

签名正在正确生成,checkHash()功能可以识别正确签名/形成的有效负载。

我从端点获得的反馈是响应包含一个正体。这里给出的建议是从响应的正文中剥离所有内容 - 但据我所知,我所回来的一切都是字面响应,即回声,即 200 401

$key = 'abcSomeKey';    
$rawPayload = file_get_contents("php://input");
checkHash();
function getSignature() {
    return base64_encode(hash_hmac('sha256', $rawPayload, $key, true));
}
function checkHash() {
    $signature = getSignature();
    if($signature === $_SERVER['HTTP_X_XERO_SIGNATURE']) {
        echo 200;
    }
    else {
        echo 401;
    }
}

我不太了解PHP,但是有两个错误。签名验证在功能块内的意图不正常。$rawPayloadgetSignature()函数内部的一个空字符串。

此外,我天真地返回了以下正确格式的响应代码。

$key = "someKey";
$rawPayload = file_get_contents("php://input");
$signature = base64_encode(hash_hmac('sha256', $rawPayload, $key, true));
$authKey = $_SERVER['HTTP_X_XERO_SIGNATURE'];
if($signature === $authKey)
{
    http_response_code(200);
}   
else
{
    http_response_code(401);
}

我也有一个问题。

这是我发现的真实的:

$key = "someKey";
$rawPayload = file_get_contents("php://input");
$signature = base64_encode(hash_hmac('sha256', $rawPayload, $key, true));
$authKey = $_SERVER['HTTP_X_XERO_SIGNATURE'];
if($signature === $authKey)
{
    http_response_code(200);
}   
else
{
    http_response_code(401);
}

这样做:base64_encode(hash_hmac('sha256', $rawPayload, $key, true));由于hash_hmac的末端具有true,因此产生了二进制代码。base64也更改了hash_hmac,所以我必须使用我的:

$signature = hash_hmac('sha256', $rawPayload, $key);

对我有用。

最新更新