工作中自我使用
在使用 Postman 進行接口測試過程中,部分接口的請求參數會進行 MD5 加密的簽名校驗。
簽名規則
請求參數按照 ASCII 碼從小到大排序,追加秘鑰,再進行 MD5 加密得到簽名值sign
。具體步驟如下:
首先,構造待簽名字符串。待簽名字符的生成規則如下:
- 請求參數都按照名稱 ASCII 碼,升序排列 (參數名稱不允許相同)
- 如果參數值帶有中文, 需要制定字符集編碼為 UTF-8
- 如果參數值為空,那么該參數不參與簽名
- 秘鑰作為最后一個參數, 參數名為:key 將請求參數按上述順序用
&
拼接。 然后,用 MD5 算法,對待簽名字符串進行加密, 生成的簽名數據(32 位小寫字符), 即是參數中sign
的值。
在 Postman 中 pre-request script 的具體實現
- 設置環境變量
key
和sign
key
值是秘鑰;sign
值隨意設置。 - 請求參數設置中,引用
sign
值
- Pre-request-Script 中寫 MD5 加密簽名規則的腳本
-
//獲取3個全部變量 appId = pm.environment.get("zx_appId"); file_sign1 = pm.environment.get("file_sign"); securityKey = pm.environment.get("zx_securityKey"); var params = request.data; //獲取接口入參 params["securityKey"] = securityKey; //添加參數 keys = Object.keys(params).sort() //請求參數名按照ASCII碼升序排序 //拼接待簽名字符串 var str = [] for (var p = 0; p < keys.length; p++) { if(keys[p] == "sign" || request.data[keys[p]] === ""){ // "==" ==寬松相等,隱性類型轉換,值相等,返回true; "===" 嚴格相等,值和類型都相等,返回true continue; } if(keys[p] == "appId"){ str.push(keys[p] + "=" + appId); } else if(keys[p] == "file"){ str.push(keys[p] + "=" + file_sign1); } else if(keys[p] == "securityKey"){ str.push(keys[p] + "=" + securityKey); } else { str.push(keys[p] + "=" + request.data[keys[p]]); } } var sign = str.join("&") //MD5加密簽名規格,並賦值給環境變量`sign` pm.environment.unset("sign"); pm.environment.set("sign", CryptoJS.MD5(sign).toString());
console.log(sign); // 看日志
注意
在單個請求的 Pre-request-Script 中添加腳本,腳本只對該請求參數生效。

如果,在一個 Collection 或 Folder 中的所有請求的參數的處理相同,可以在 Collection 或 Folder 的 Pre-request-Script 中添加腳本。

最后說:
我可以直接跑結果的,如果使用有錯誤,可以打日志:
console.log(sign);
日志框快捷鍵:ctrl+alt+c