[英]UrlFetch put method using Google Apps Script
嘗試使用Google Apps腳本UrlFetchApp.fetch()put方法更新ECWID中的產品的許多選項,但未成功。 以下是我編寫代碼和測試的不同方法,但是卻遇到了不同類型的錯誤。
我想,是缺少了一些小東西,無法解決。 請幫助我解決此問題。
API:ECWID產品API( http://kb.ecwid.com/w/page/25285101/Product%20API#RESTAPIMethodupdateaproduct )方法:PUT(用於更新產品詳細信息)
示例代碼1:-
function updateProducts(){
var products_authkey = "xxxxxxxx";
try{
var url ="https://app.ecwid.com/api/v1/xxxxx/product?id=xxxxxxxx&secure_auth_key="+products_authkey;
var payload = {price:62755};
var options ={method:"put",ContentType:"application/json",payload:payload};
var result = UrlFetchApp.fetch(url, options);
var response = result.getContentText();
}catch(e){
Browser.msgBox(e);
}
}
錯誤:-“ {”錯誤“:” OTHER“,” errorMessage“:”解析JSON時出錯:JSONObject文本必須以'{'字符0開始”“}”
版本2:-嘗試將對象轉換為json字符串化,但存在相同的錯誤。
function updateProducts_version2(){
try{
var url ="https://app.ecwid.com/api/v1/xxxx/product?id=xxxxx&secure_auth_key="+products_authkey;
var payload = {price:62755};
var payload_json = Utilities.jsonStringify(payload);
var options ={method:"put",ContentType:"application/json",payload:payload_json,muteHttpExceptions:true};
var result = UrlFetchApp.fetch(url, options);
var response = result.getContentText();
var res_code = result.getResponseCode();
var x = 1;
}catch(e){
Browser.msgBox(e);
}
}
錯誤:-“ {”錯誤“:” OTHER“,” errorMessage“:”解析JSON時出錯:JSONObject文本必須以'{'字符0開始”“}”
版本3 :-(嘗試使用標頭中的授權傳遞secure_auth_key)
function updateProducts_version3(){
try{
var url ="https://app.ecwid.com/api/v1/xxxxx/product?id=xxxxx";
var payload = {price:62755};
var headers = {Authorization: 'xxxxxxx'};
var options = {headers:headers,method:"put",ContentType:"application/json",payload:payload};
var options ={method:"put",ContentType:"application/json",payload:payload,muteHttpExceptions:true};
var result = UrlFetchApp.fetch(url, options);
var response = result.getContentText();
var res_code = result.getResponseCode();
var x = 1;
}catch(e){
Browser.msgBox(e);
}
}
錯誤:-{“錯誤”:“ OTHER”,“ errorMessage”:“在請求參數中找不到API密鑰”}
另外要注意的是,我嘗試使用DevHttpClient chrome插件,它正在正確更新。 這意味着我們使用UrlFetch的方式存在一些問題。 請幫助我解決此問題...
提前致謝...
需要憑據來進行測試,所以這取決於您。 您可能需要同時對有效載荷進行字符串化和編碼。 您對contentType
大小寫也有錯誤,可以使用UrlFetchApp.getRequest()
檢查。
function updateProducts_version2a(){
try{
var url ="https://app.ecwid.com/api/v1/xxxx/product?id=xxxxx&secure_auth_key="+products_authkey;
var payload = {price:62755};
var payload_json = encodeURIComponent(JSON.stringify(payload));
var options ={method:"put",contentType:"application/json",payload:payload_json,muteHttpExceptions:true};
var result = UrlFetchApp.fetch(url, options);
var response = result.getContentText();
var res_code = result.getResponseCode();
var x = 1;
}catch(e){
Browser.msgBox(e);
}
}
根據您引用的文檔,下一個版本似乎有效-通過抑制價格變化並使用商店的ID,它模仿了產品“獲取”。 這次,錯誤消息可能表明已達到一定程度的成功:“此Ecwid帳戶無權訪問Ecwid API。請考慮對其進行升級。”
您會注意到URL已被分離出來,產品ID和auth密鑰的基本標頭信息在一起。
function updateProducts_version4(){
try{
var url ="https://app.ecwid.com/api/v1/xxxx/product";
var payload = encodeURIComponent(JSON.stringify({
price:62755
}));
var headers = {id:'xxxx',
secure_auth_key: 'xxxxxxx'
};
var options = {
headers:headers,
method:"put",
contentType:"application/json",
muteHttpExceptions:true,
payload:payload
};
var request = UrlFetchApp.getRequest(url, options); // Debug: check what would be fetched
var result = UrlFetchApp.fetch(url, options);
var response = result.getContentText();
var res_code = result.getResponseCode();
var respHeaders = result.getHeaders(); ///
debugger;
}catch(e){
Logger.log(e);
//Browser.msgBox(e);
}
}
沒有您的信任,這就是我所能接受的...告訴我們如何為您工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.