【问题标题】:Use Shopify API with Google Sheet FetchUrl App将 Shopify API 与 Google Sheet FetchUrl 应用程序一起使用
【发布时间】:2020-04-24 06:22:05
【问题描述】:

抱歉,我有点天真 - 边走边学。 我正在尝试使用他们的 API 将数据发布到我的 shopify 商店。 https://shopify.dev/docs/admin-api/rest/reference/inventory/inventorylevel 语法(根据 Shopify 网站)是: 发布 /admin/api/2020-04/inventory_levels/set.json { "location_id": xxxxxxx, "inventory_item_id": xxxxxxx, “可用”:xx }

我已成功使用 GET 和 API 来获取信息。 Buty 到目前为止,我一直在使用没有有效负载数据的 URLS。 我现在正在尝试将该有效负载添加到我的脚本中 - 见下文,但它不起作用:

这是脚本:

function myfunction() {  
var url = "https://<myshopname>.myshopify.com/admin/api/2020-04/inventory_levels/set.json";
var payloaddata = {
  "location_id": <mylocationid>,
  "inventory_item_id": <inventoryitemid>,
  "available": <quantity to update>
  };
var payload = JSON.stringify(payloaddata);
var username = "<key>";
var password = "<password>";

  var response = UrlFetchApp.fetch(url, {"method":"PUT","headers": {"Authorization": "Basic " + Utilities.base64Encode(username + ":" + password)},payload:payload});

Logger.log(response.getContentText());
var json = response.getContentText();
var data = JSON.parse(json);
Logger.log(data);
}

响应代码为 406 ,即(根据 Shopify)表示:

请求的资源只能生成根据请求中发送的 Accept headers 不可接受的内容。"

抱歉 - 这可能是一些非常简单的语法错误 - 但我只是在学习。

【问题讨论】:

  • 在您的问题和您问题中的文档中,似乎使用了POST 方法。但是在您的脚本中,使用了PUT 方法。不幸的是,我无法理解这种情况。那么能否提供官方文档你要使用的API的方法呢?

标签: json api shopify google-sheets-api


【解决方案1】:

您的代码有 2 个小问题。

  • HTTP 方法
  • 内容类型

根据Shopify Documentation for Inventory API,设置库存级别是一个 POST 请求。

除了 Shopify 期望 ContentTypeapplication/json 而跳过它时,在您的情况下使用默认值 application/x-www-form-urlencoded 根据Google Apps Script Docs。改变这个,你的代码看起来像

function myfunction() {
    var url = "https://<myshopname>.myshopify.com/admin/api/2020-04/inventory_levels/set.json";
    var payloaddata = {
        "location_id": <mylocationid>,
        "inventory_item_id": <inventoryitemid>,
        "available": <quantity to update>
      };

    var payload = JSON.stringify(payloaddata);
    var username = "<key>";
    var password = "<password>";

    var response = UrlFetchApp.fetch(url, {
        method: "POST",
        payload: payload,
        contentType: "application/json",
        headers: { "Authorization": "Basic " + Utilities.base64Encode(username + ":" + password) }
    });

    Logger.log(response.getContentText());
    var json = response.getContentText();
    var data = JSON.parse(json);
    Logger.log(data);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2019-09-30
    • 2022-01-24
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多