按照在线一些示例之后,我要返回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,但是有两个错误。签名验证在功能块内的意图不正常。$rawPayload
是getSignature()
函数内部的一个空字符串。
此外,我天真地返回了以下正确格式的响应代码。
$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);
对我有用。