釘釘小程序踩坑記錄-dd.httpRequest 含url參數的請求Url地址問題.md


釘釘小程序踩坑記錄-dd.httpRequest 含url參數的請求Url地址問題

釘釘Http請求在有url參數的情況下,會在url參數結尾添加一個&。由於我請求的服務需要對請求簽名,導致服務端在驗證簽名時,獲取到的請求請求參數字符串后也多了個&,導致驗證簽名失敗。

釘釘請求代碼:

    var headers = {
        "Content-Type": "application/json",
        "Accept-Language":["zh","zh-CN; q=0.9","en; q=0.8"],
        "app_key":self.appKey,
        "api_version": self.apiVersion,
        "Cookie":getApp().UserCookie
      };

    console.log("請求頭",headers)

    headers.timestamp=new Date().format("yyyy-MM-ddTHH:mm:sszzz");
    var url = BuildUriPath('http://'+self.serverHost+api,queryString);
    console.log(requestMethod,url);

    requestMethod = requestMethod.toUpperCase();
    var strBodyData="";
    switch(requestMethod){
      case "GET":
        strBodyData="";
        break;
      case "POST":
      case "DELETE":
      case "UPDATE":
        strBodyData=JSON.stringify(bodyData);
        strBodyData = self.encryptor(strBodyData);
        break;
      default:
        throw "未知的請求方法:"+requestMethod;
    }

    /** 對請求簽名 **/
    // 取消此處注釋,解決釘釘在http請求時在url參數后添加&符號,導致服務端驗證簽名失敗問題
    // if(queryString)
    // headers.sign = self.signRequest(url+'&',strBodyData,headers.timestamp,"POST");
    // else
    headers.sign = self.signRequest(url,strBodyData,headers.timestamp,"POST");

    dd.showLoading({
      content: '加載中...',
    });

    dd.httpRequest({
      headers: headers,
      url: url,
      method: requestMethod,
      // 需要手動調用JSON.stringify將數據進行序列化
      data: strBodyData,
      dataType: 'json',
      success: function(res) {
      }
    });

請求拼接的url:

拼接的請求url
拼接的請求url

釘釘實際請求Url:

釘釘實際請求Url
釘釘實際請求Url

服務端接受到的請求地址:

釘釘待參數請求服務端獲取到的請求url
釘釘待參數請求服務端獲取到的請求url


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM