php - 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 对吗?非常感谢任何帮助!
解决方案
所以我终于发现,由于某种原因,“订单/付费”网络钩子在“生产环境”中对我不起作用,尽管在我的测试环境中工作正常。只需将主题更改为“订单/创建”即可解决我的问题。
推荐阅读
- python - 对 OSMnx 的大 graph_from_place() 请求导致超时错误
- javascript - 为什么传播属性不适用于 React useState 钩子
- excel - 在 Python Pandas 中从 Excel 导入并将元数据标题重新排列为列数据
- django - Django 详细视图查询 - 按外键对象 textchoices 字段过滤
- python - 通过 Pandas 将 CSV 插入 SQLITE:如何避免内存错误?
- excel - 过滤、打印为 PDF 并保存
- reactjs - 根组件中的道具为空
- python - ValueError:检查目标时出错:预期 up_sampling2d_2 有 4 个维度,但得到了形状为 (128, 1) 的数组
- c - C 保存游戏状态,减少传递的变量
- java - Spark 和 Cassandra:要求失败:在类 com.datastax.spark.connector.japi.CassandraRow 中找不到列:[mycolumn...]