我通过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,它(理论上)已经安装到了商店上。但是,当订单在商店上实际支付时,我没有收到消息。
使用“购物管理”中“通知”下的"Test 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的内置"Test Webhook“设置时,我的数据库中的行会被创建得很好。当我使用真正的webhook时,什么都不会发生。我不确定为什么会发生这种情况,据我所知,所有的头都应该是相同的。我需要以某种方式验证webhook吗?
作为参考,我使用了CodeIgniter 4.0、PHP7.0和最新版本的Shopify SDK。
我在Shopify的文档中发现了这样的注释:“请注意,如果您使用的是基于Rack的框架,如Ruby on Rails或Sinatra,那么您要查找的头文件是HTTP_X_SHOPIFY_HMAC_SHA256”。在我目前的设置下,我应该仍然使用X-Shopify-Shop-Domain而不是HTTP_X_Shopify_Shop_Domain,对吗?非常感谢您的帮助!
发布于 2018-06-17 16:19:51
因此,我最终发现,由于某些原因,“订单/付费”的webhook在“生产环境”中不适用于我,尽管它在我的测试环境中运行良好。只需将主题更改为“orders/create”就解决了我的问题。
https://stackoverflow.com/questions/50893057
复制相似问题