首页 > 解决方案 > Shopify Webhooks 在测试中有效,但在实践中无效

问题描述

我通过 Shopify SDK(使用 PHP 包装器:https ://github.com/phpclassic/php-shopify )安装到用户商店的 Shopify 'orders/paid' webhook 存在一些问题。无论如何,我像这样创建 webhook:

$shop = $this->request->getVar('shop');  // Get Shopify store URL

// Get access token for store
$config = array('ShopUrl' => $shop, 'ApiKey' => 'xxx', 'SharedSecret' => 'xxx');
\PHPShopify\ShopifySDK::config($config);
$accessToken = \PHPShopify\AuthHelper::getAccessToken();

// Keep track of access_token for SDK calls and authenticate to store for webhook creation
$addToken = $this->Stores->addAccessToken($shop, $accessToken);
$config = array('AccessToken' => $accessToken, 'ShopUrl' => $shop);
$shopify = new \PHPShopify\ShopifySDK($config);

// Create orders/paid webhook
$orderPaidHook = array('topic' => 'orders/paid', 'address' => 'https://api.autoloapp.com/webhook/create', 'format' => 'json');

try {
    $webhooks = $shopify->Webhook->post($orderPaidHook);
 }

据我所知,这段代码有效,使用print_r($webhooks)给了我一个有效的 Webhook,它(理论上)已经安装到商店中。但是,当在商店实际支付订单时,我没有收到消息。

使用 Shopify 管理员中“通知”下的“测试 Webhook ”设置,我的 Webhook 可以完美运行。使用 PostMan 模拟 webhook 调用效果很好。

处理 webhook 的代码如下所示:

$headers = getallheaders();
$topic = $headers['X-Shopify-Topic'];
$storeName = $headers['X-Shopify-Shop-Domain'];

if ($topic == 'orders/paid') {
     // Do some stuff, insert row into database
}

同样,当我使用 PostMan 或 Shopify 的内置“测试 Webhook”设置时,我的数据库中的行创建得很好。当我使用真正的 webhook 时,什么也没有发生。我不确定为什么会发生这种情况,据我所知,所有标题都应该相同。我是否需要以某种方式验证 webhook?

作为参考,我正在使用 CodeIgniter 4.0、PHP 7.0 和最新版本的 Shopify SDK。

我在 Shopify 的文档中找到了这条注释:“请注意,如果您使用的是基于 Rack 的框架,例如 Ruby on Rails 或 Sinatra,那么您要查找的标头是 HTTP_X_SHOPIFY_HMAC_SHA256”。使用我当前的设置,我应该仍然使用 X-Shopify-Shop-Domain 而不是 HTTP_X_Shopify_Shop_Domain 对吗?非常感谢任何帮助!

标签: phphttp-headersshopifywebhooksshopify-app

解决方案


所以我终于发现,由于某种原因,“订单/付费”网络钩子在“生产环境”中对我不起作用,尽管在我的测试环境中工作正常。只需将主题更改为“订单/创建”即可解决我的问题。


推荐阅读