簡體   English   中英

使用Google Apps腳本的UrlFetch put方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM