客户需求小程序端用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; } //创建sign function 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; }