標籤:fun function 簽名 creat type padleft 關聯 要求方法 ret
客戶需求小程式端用js產生簽名,我們按照要求一步一步解決,並且將要求方法封裝到一個utils.js裡:
第一步:對關聯陣列按照鍵名做正序排序。
第二步:拼接字串
第三步:將拼接的字串加上私密金鑰
第四步:將以上字串MD5加密
const md5 = require(‘md5.js‘);var appsecret ="appsecret ";var App_Key ="App_Key ";//字母排序:不區分大小寫function sortCharter(a, b) {if (a.toString().toUpperCase() > b.toString().toUpperCase()) {return 1;}else if (a.toString().toUpperCase() == b.toString().toUpperCase()) {return 0;}else {return -1;}} function objKeySort(obj) {//排序的函數var newkey = Object.keys(obj).sort(sortCharter);//先用Object內建類的keys方法擷取要排序對象的屬性名稱,再利用Array原型上的sort方法對擷取的屬性名稱進行排序,newkey是一個數組var newObj = {};//建立一個新的對象,用於存放排好序的索引值對for (var i = 0; i < newkey.length; i++) {//遍曆newkey數組newObj[newkey[i]] = obj[newkey[i]];//向新建立的對象中按照排好的順序依次增加索引值對}return newObj;//返回排好序的新對象}String.prototype.PadLeft = function (len, charStr) {var s = this + ‘‘;return new Array(len - s.length + 1).join(charStr, ‘‘) + s;} //建立signfunction create_sign(data) { console.log("1、排序前create_sign0");console.log(data);//1、排序data = objKeySort(data);console.log("1、排序後create_sign111");console.log(data);//2.拼接var txt="";var newkey = Object.keys(data);for (var i = 0; i < newkey.length; i++) {//遍曆newkey數組txt = txt + newkey[i].length.toString().PadLeft(2, ‘0‘);txt=txt+"-";txt = txt + newkey[i];txt = txt + ":";// console.log("for內部===k-v");console.log(newkey[i]);console.log(data[newkey[i]]);txt = txt + data[newkey[i]].toString().length.toString().PadLeft(4,‘0‘);txt = txt + "-";txt = txt + data[newkey[i]];if (i < (newkey.length-1)){txt = txt + ";";}}//console.log("for內部===3.追加私密金鑰appsecret");//3.追加私密金鑰appsecret// console.log(txt);// console.log("appsecret=" + appsecret);txt = txt + appsecret;//4.md5加密txt = md5.hex_md5(txt);return txt;}
【轉】js 對象按照索引值(不分區大小寫)排序,產生簽名方法