如何在 webhook 回调脚本中发出 shopify API 请求

How to make a shopify API request inside webhook callback script

我正在编写我的第一个 Shopify 应用程序,一旦产品库存水平低于阈值,它就会取消发布产品。

为此,我注册了一个带有回调 URL http://example.com/script.php 的 webhook,一旦发生产品更新事件,Shopify 就会调用该回调。

script.php 中,我如何获得 Shopify API 令牌以向 products/update 发出 PUT 请求以取消发布它?

这是我目前的 script.php(我知道我缺少 hmac 验证,但这不是重点):

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
  session_start();
  require 'shopify.php';
  $api_key = 'api_key';
  $secret = 'secret';
  $sc = new ShopifyClient($_SERVER['HTTP_X_SHOPIFY_SHOP_DOMAIN'], $_SERVER['HTTP_X_SHOPIFY_HMAC_SHA256'], $api_key, $secret);
  $inventory = $_POST['inventory_quantity'];
  $old_inventory = $_POST['old_inventory_quantity'];
  if($inventory <= 0){
    $args = array("product" => array("id" => $_SERVER['HTTP_X_SHOPIFY_PRODUCT_ID'], "published" => false));
    $sc->call("PUT","/admin/products/".$_SERVER['HTTP_X_SHOPIFY_PRODUCT_ID'].".json",$args);
  }
}

我正在尝试使用 $_SERVER['HTTP_X_SHOPIFY_HMAC_SHA256'] 但显然这是错误的。

Shopify 在每个 Webhook 的 header 中向您发送商店名称。因此,您的 webhook 现在可以对来电进行身份验证,并且使用商店名称,您只需在持久层中查询匹配的商店凭据即可。如果找到商店,您可以很容易地开一家 API session,因为您有两个需要的东西:

  1. 商店的shopify域名
  2. shopify 访问令牌

请注意,隐藏产品的更好方法是考虑监听提供订单和产品的订单 webhook,然后查询所售产品的库存水平。与订单相比,使用 product/update webhooks 可能会非常令人讨厌,因为您可能必须处理的呼叫数量。