![](/img/trans.png)
[英]How to make a Drive API batch request with UrlFetchApp in Google Apps Script
[英]Shopify API, 406 response for PUT request from Google Apps Script UrlFetchApp
我正在构建一个连接到 Shopify API 的 Google Apps 脚本脚本,以从电子表格创建新产品和/或更新现有产品。 我已成功连接到 API 以获取 GET 请求(列出所有产品)和 POST 请求(创建新产品、更新库存水平),但是在尝试执行 PUT 请求以更新变体价格时,我收到了 406 响应代码.
文档: https : //help.shopify.com/en/api/reference/products/product-variant#update-2019-07
我最初是使用更新产品进行测试,但遇到了同样的问题。 我切换到变体端点,因为我发现它比更新产品更直接。
我尝试将以下代码添加到标题中以帮助响应,但没有任何区别
'Content-Type': "application/json",
'Accept': "application/json"
我尝试使用 Postman 复制 PUT 请求并成功完成(增加了我的困惑)。 同样,我所有的 GET 和 POST 请求都顺利通过,所以我的 API 凭据不是问题。 我已经检查了端点,一切看起来都是正确的。
这是我一直在测试的代码(甚至硬编码变体 ID 和价格以确保变量没有问题)
function testUpdate(){
var url = "https://cablemax.myshopify.com/admin/api/2019-07/variants/20731961475134.json"
var headers = {
"method": "put",
"muteHttpExceptions": true,
"Authorization": "Basic " + Utilities.base64Encode(API_KEY+":"+API_PASSWORD),
'Content-Type': "application/json",
'Accept': "application/json"
}
var payload = {
"variant": {
"id": 20731961475134,
"price": "12.44"
}
}
var params = {
'headers': headers,
'contentType': "application/json",
'payload': JSON.stringify(payload),
}
try {
var response = UrlFetchApp.fetch(url, params);
var responseCode = response.getResponseCode();
if (responseCode == 200) {
console.log("Price for: "+ variant_id + " updated successfully");
} else {
console.log("Price for: "+ variant_id + " failed to update");
}
} catch(e) {
console.log("Price update for: " + variant_id + " has failed. Error: " + e);
}
}
我不明白这里出了什么问题,因为我所有的其他请求都成功了,并且这个请求(有效负载数据完全相同)在 Postman 中成功了。 捕获响应仅返回
Request failed for https://cablemax.myshopify.com returned code 406
鉴于该请求返回 406,我假设请求的格式而不是有效载荷数据存在错误,但我不知道问题是什么。
您似乎错误地格式化了 params 对象。 请尝试以下操作:
var url = "https://cablemax.myshopify.com/admin/api/2019-07/variants/20731961475134.json";
var params = {
"method":"put",
"contentType":"application/json",
"headers": {
"Authorization": "Basic " + Utilities.base64Encode(API_KEY+":"+API_PASSWORD)
},
"payload": JSON.stringify({
"variant": {
"id":20731961475134,
"price":"12.44"
}
})
};
var response = UrlFetchApp.fetch(url, params);
在 Apps Script 中,您不指定Content-Type
作为标题; 它被定义为 params 对象上的参数contentType
。 此外,根据 API 的期望,您可能需要将Utilities.base64Encode()
替换为Utilities.base64EncodeWebSafe()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.