釘釘小程序踩坑記錄-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