如何在webhook回调脚本中制作shopify API请求

时间:2017-03-29 15:21:24

标签: shopify

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

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

script.php中如何获取Shopify API令牌以PUT请求products/update取消发布?

到目前为止,这是我的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'],但显然这是错误的。

1 个答案:

答案 0 :(得分:2)

Shopify会在每个webhook的标题中向您发送商店名称。因此,您的webhook现在可以验证来电,并使用商店名称,您只需查询您的持久层以获取匹配的商店凭据。如果您找到商店,您可以非常轻松地打开API会话,因为您有两件事需要:

  1. 购买商店的域名
  2. shopify访问令牌
  3. 请注意,隐藏产品的更好方法是考虑收听订单和产品的订单webhooks,然后查询所售产品的库存水平。对于与订单相比可能需要处理的呼叫数量而言,处理产品/更新webhook可能会非常令人讨厌。