为什么第二个函数总是返回false?此外,为什么我的if语句中的代码无论如何都会运行?

时间:2018-08-23 18:17:46

标签: php function if-statement shopify webhooks

解决了!!抱歉浪费您的时间。

问题:   第二个函数“ 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{

}

1 个答案:

答案 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部分中添加了另一个错误日志,并且一切正常,并且响应正确。 正是由于缺乏理解,我才认为它无法正常工作,而实际上一切正常,但我缺少信息。