javascript - 应用脚本 Shopify GraphQL 请求 - 400 响应
问题描述
我正在尝试通过 Google App Script 调用 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 令牌交换过程中提供了无效的代码参数,也会返回此状态。
来源:https ://shopify.dev/api/usage/response-codes
如何解决此问题并成功调用 Shopify 的 GraphQL API?
解决方案
我在另一家 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})
});
推荐阅读
- python - 到 csv 的字典列表。一行中的每个列表
- python - 在odoo的controller文件中,type为json时如何改变json响应格式?
- c - C中的位移无符号长整数
- .net - 如何在基于 linux 的 ec2 实例中安装 .net core 3.1
- java - Spring Cloud Dataflow Local Using dockerized Task
- sql - Access 365 - 没有基于伪造密钥的重复项
- jenkins - 你如何在 CI 中安装 chrome for cypress
- linux - 在启动时运行 Google Assistant SDK (Raspbian)
- python - 如何从两个给定点创建一条无限线以与 Shapely 中的其他几何对象相交?
- javascript - 第一次打开子菜单第二次点击转到页面