Не удается проверить Shopify Webhook

#php #api #heroku #shopify #webhooks

#php #API #heroku #Shopify #webhooks

Вопрос:

Я настроил webhook в Shopify через настройки> уведомления> webhooks и ввел URL-адрес приложения heroku. Мое приложение heroku на php, и я запускаю функцию проверки, найденную здесь:https://shopify.dev/tutorials/manage-webhooks и когда я открываю свое приложение, я получаю пустой ответ. Я не уверен, что это то, что я делаю неправильно в своем приложении heroku, или я чего-то не хватает. Цель здесь состоит в том, чтобы получить данные json после запуска выбранного мной события, а затем отправить эти данные через сторонний api. Но для начала я просто хочу иметь возможность убедиться, что мое приложение heroku получает полезную нагрузку. Что еще мне нужно добавить в мой php-файл для проверки? (здесь новичок в php). Ниже приведен код, который я запускаю в своем 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

?>
  

введите описание изображения здесь

Комментарии:

1. Здесь следует использовать секрет webhook. Не общий секрет.

2. правильно, это то, что я использовал.

Ответ №1:

Если я не ошибаюсь, вы не можете тестировать webhooks таким образом, поскольку администратор не использует ваш ключ API, поскольку он понятия не имеет, кто вы, когда находитесь в качестве администратора. Итак, если у вас есть приложение heroku и у него есть ключ API, используйте этот ключ API, чтобы сначала установить webhook, убедиться, что вы создали его с помощью API, а затем посидеть и протестировать свою фактическую конечную точку с помощью Shopify Admin. Вот как это работает AFAIK.

Другая проверка в admin — это mickey mouse, предназначенная для того, чтобы просто передавать данные в любую старую конечную точку без проверки.

Комментарии:

1. Именно здесь Shopify не хочет признавать свою ошибку в документах. Созданные вручную веб-ходы подписываются секретом webhook вместо общего секрета.

2. Я не настолько разбираюсь в подтверждении, поскольку писать о платформе, состоящей из миллиона движущихся частей, явно непростая задача. Я действительно думал, что проблема тестирования webhooks с помощью кнопок администратора была четко объяснена много лет назад… поэтому странно, что люди все еще сталкиваются с этой проблемой.

3. @DavidLazar Я согласен, именно поэтому мне показалось странным, что он не проверялся, но я смог запустить его