无法验证Shopify Webhook

时间:2020-08-21 08:55:59

标签: php api heroku shopify webhooks

我已经通过设置>通知> webhooks在shopify中设置了一个webhook,并输入了一个heroku应用URL。我的heroku应用程序位于php中,我运行在此处找到的验证功能:https://shopify.dev/tutorials/manage-webhooks,当我打开应用程序时,我得到一个空白响应。我不确定这是我在heroku应用程序上做错了还是我错过了什么。我的目标是在运行我选择的事件后获取json数据,然后通过第三方api发送该数据。但是首先,我只想能够验证我的heroku应用正在接收有效负载。还有更多我需要添加到我的php文件以进行验证吗? (这里的php noob)。下面是我在php文件中运行的代码,是的,我正在使用在webhooks部分中找到的共享机密。

<?php

define('SHOPIFY_APP_SECRET', 'my_shared_secret');

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);
}

$hmac_header = $_SERVER['HTTP_X_SHOPIFY_HMAC_SHA256'];
$data = file_get_contents('php://input');
$verified = verify_webhook($data, $hmac_header);
error_log('Webhook verified: '.var_export($verified, true)); //check error.log to see the result

?>

enter image description here

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,因为管理员不使用您的API密钥,因为它不知道您在谁的身份,所以您不能以这种方式测试webhooks。因此,如果您有一个heroku应用程序且它具有一个API密钥,请使用该API密钥首先建立Webhook,验证您是否使用API​​创建了该Webhook,然后使用Shopify Admin本身来测试您的实际端点。这就是AFAIK的工作方式。

管理员中的另一项验证是米奇鼠标,它意味着无需验证就可以将数据扔到任何旧的端点。