应用脚本 Shopify GraphQL 请求 - 400 响应

Posted

技术标签:

【中文标题】应用脚本 Shopify GraphQL 请求 - 400 响应【英文标题】:App Script Shopify GraphQL Request - 400 response 【发布时间】:2021-10-22 12:07:22 【问题描述】:

我正在尝试通过 Google 应用脚本调用 Shopify 的 GraphQL API。

我已使用相同的正文和身份验证值通过 Postman 成功拨打电话,并且工作正常。

但是,当通过 App Script 调用 API 时,我不断收到 400 响应代码,并带有以下错误消息 "errors":"query":"Required parameter missing or invalid"

这是我正在使用的代码:

function shopifySync() 
    var url = "https://store-name.myshopify.com/admin/api/2021-07/graphql.json";
    var payloaddata = `query orders(first: 20)  edges  node  id    `;

    var payload = JSON.stringify(payloaddata);
    var password = "api_password"; //Private Shopify App


    var response = UrlFetchApp.fetch(url, 
        'method': "POST",
        'muteHttpExceptions': true,
        'headers':  "X-Shopify-Access-Token": password , "Content-Type": "application/json",
        'payload': payload
    ,
    );

    Logger.log(response.getContentText());
    Logger.log(response.getResponseCode());

在 Shopify 的文档中,400 HTTP 响应被归类为“错误请求”,解释是:

服务器无法理解请求,通常是由于语法错误或 Content-Type 标头未正确设置为 application/json。 如果请求在 OAuth 令牌交换过程中提供了无效的 code 参数,也会返回此状态。

来源:https://shopify.dev/api/usage/response-codes

如何解决此问题并成功调用 Shopify 的 GraphQL API?

【问题讨论】:

【参考方案1】:

我在另一家 Saas 公司的 GraphQL 文档中找到了解决方案。

问题在于有效载荷的格式

我是如何尝试的:

'payload': payload

应该如何:

'payload': JSON.stringify('query': payloaddata)

适用于 Shopify 的 2021-07 GraphQL API 的最终代码:

    var url = "https://store-name.myshopify.com/admin/api/2021-07/graphql.json";
    var payloaddata = 'query orders(first: 20)  edges  node  id    ';

    var password = "api_password";

    var response = UrlFetchApp.fetch(url, 
        'method': "POST",
        'muteHttpExceptions': true,
        'headers':  "X-Shopify-Access-Token": password , "Content-Type": "application/json",
        'payload': JSON.stringify('query': payloaddata)
    );

【讨论】:

以上是关于应用脚本 Shopify GraphQL 请求 - 400 响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 与 Shopify 实现 GraphQL

Shopify GraphQL Checkout 创建突变

使用 Python 请求发布 GraphQL 突变

Shopify StoreFront API GraphQL 查询不返回任何内容

javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API

javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API