У меня возникли некоторые проблемы с моим веб-крюком Shopify ‘orders / paid’, который я установил в магазине пользователей через Shopify SDK (используя оболочку PHP: https://github.com/phpclassic/php-shopify). В любом случае, я создаю 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, который (теоретически) был установлен в магазине. Однако, когда заказ фактически оплачен в магазине, я НЕ получаю сообщение.
С использованием «Тест Webhook«Настройки под« Уведомление »в Shopify Admin мой 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 или встроенный параметр «Test Webhook» для Shopify, строка в моей базе данных создается просто отлично. Когда я делаю это с настоящим веб-крючком, ничего не происходит. Я не уверен, почему это происходит, насколько я знаю, все заголовки должны быть одинаковыми. Нужно ли каким-либо образом проверять 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 правильно? Любая помощь с благодарностью!
Поэтому я наконец понял, что по какой-то причине веб-крючок «заказы / оплачено» не будет работать для меня в «производственных средах», несмотря на то, что он отлично работает в моих тестовых средах. Простое изменение темы на «заказы / создание» решило мою проблему.
Других решений пока нет …