解决了!!抱歉浪费您的时间。
问题: 第二个函数“ verify_webhook_2”始终返回false。 if语句中的代码运行,测试是否返回true。
我复制并粘贴了第一个函数,然后进行了(我认为是适当的)更改,以便可以验证来自两个不同Shopify商店的webhooks。我敢肯定,这只是我遗忘的简单事物,因为我对所有这些还相当陌生。如果我将$verify
的密码更改为$verify2
的机密,那么从该商店收到的Webhook将被验证为真。
我无法终生理解为什么即使两个要求都测试为false时,if语句中的代码也会运行。当从商店收到与$verify2
机密有关的Webhook时,我无法想到这两种方法都可以证明是正确的。可能是菜鸟的错误?
$verify = "xxxxsecretxxxx";
$verify2 = "xxxxsecretxxxx";
define('SHOPIFY_APP_SECRET', $verify);
define('SHOPIFY_APP_SECRET_2', $verify2);
function verify_webhook($data, $hmac_header)
{
$calculated_hmac = base64_encode(hash_hmac('sha256', $data, SHOPIFY_APP_SECRET, true));
return hash_equals($hmac_header, $calculated_hmac);
}
function verify_webhook_2($data, $hmac_header)
{
$calculated_hmac_2 = base64_encode(hash_hmac('sha256', $data, SHOPIFY_APP_SECRET_2, true));
return hash_equals($hmac_header, $calculated_hmac_2);
}
$hmac_header = $_SERVER['HTTP_X_SHOPIFY_HMAC_SHA256'];
$data = file_get_contents('php://input');
$verified = verify_webhook($data, $hmac_header);
$verified_2 = verify_webhook_2($data, $hmac_header);
error_log('Webhook verified: '.var_export($verified, true)); //check error.log to see the result
if ($verified == true || $verified_2 == true){
header("HTTP/1.1 200 OK"); //respond with success
http_response_code(201); //respond with success
file_put_contents('/var/www/html/temp/webhook.json', $data);
$POST = json_decode(file_get_contents('/var/www/html/temp/webhook.json'), true);
//$POST = $POST['id'];
$report = "id: " . $POST['id'] . " - email: " . $POST['email'] . " - name: " . $POST['customer']['first_name'] . " " . $POST['customer']['last_name'] ;
}else{
}
答案 0 :(得分:0)
当然,发布问题后,我立即意识到自己的失败。我只写了错误日志以进行第一个功能的比较,因此当我在错误日志中不断看到“ webhook verify:false”时,我认为这与我发送数据的工厂无关。
我添加了:
error_log('Webhook verified_2: '.var_export($verified_2, true)); //check error.log to see the result
就在第一个error_log调用的正下方,然后在if语句的else部分中添加了另一个错误日志,并且一切正常,并且响应正确。 正是由于缺乏理解,我才认为它无法正常工作,而实际上一切正常,但我缺少信息。