客户需求小程序端用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;
}

【转】js 对象按照键值(不分区大小写)排序,生成签名方法的更多相关文章

  1. js对象替换键值名称

    js对象替换键值名称 将obj中的id和name字段替换分别替换成为“@id”,“@name” 代码如下: let obj = [{id:,name:,name:"李四"}].ma ...

  2. js变量作为数组对象的键值方法

    js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...

  3. 仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大

    仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大 1.介绍 先看图 ​ 今天在项目中遇到了一个问题,例如我现在需要传一些数据到后端,数组例如是 let arr = [ {" ...

  4. js中以键值对的形式当枚举

    js中以键值对的形式当枚举var Penum= { B: "姓名", C: "所属居委", D: "证件号", E: "性别&qu ...

  5. Javascript对象数据类型(键值对)的创建和使用方法

    对象数据类型(键值对) 1.创建键值对 var arry={name:"小明",age:20,isgey:falet} // var 键值对名 = {键:值,键:值} 2.增加键值 ...

  6. 对象属性键值[key]属性问题

    1,obj[key]此时key代表是循环中的一个变量. var obj = {key:3,key1:1,key2:2,key3:3,toSting:4}; for (key in obj) { con ...

  7. js对象转换为json格式时,js对象属性中有值为null和undefined注意事项

    当属性值为null时: 当属性值为undefined时: 只有当属性值为未定义时, js对象转换成json格式时会忽略该属性.

  8. js实现的对象数组根据对象的键值进行排序代码

    有时候会遇到做展示数组的排序,由大到小和由小到大的切换: var arr=[{id:1,webName:"蚂蚁部落"},{id:2,webName:"网易"}] ...

  9. C#基础 Dictionary存储自定义对象作为键值

    程序每次向容器Dictionary中插入数据时,都会判断Key值是否已经存在,如果不存在,则插入.否则抛出异常.那么Dictionary又是如何判断Key值是否存在的呢? 请看下面的代码:   cla ...

随机推荐

  1. 【Django】【二】模板

    1. Django-bootstrap3 guest>python -m pip install django-bootstrap3 [代码] settings.py ""& ...

  2. 总结react native 事件机制

    React 事件机制 一个组件的所有事件会使用统一的事件监听器,绑定到组件的最外层,那么如何使用? bind方法,绑定并且可以传递参数 <TouchableOpacity onPress={th ...

  3. 配置多个版本的jdk

    引言: 由于公司有多个项目都需要我开发,而各个项目所依赖的jdk版本又不同,因此需要配置多个jdk; 配置方法: 什么也不说了,直接上图: 然后在其他需要制定Tomcat的地方直接引用JAVA_HOM ...

  4. 写给前端的Python依赖管理指北

    概述 在Python的项目中,我们可以通过pip来安装依赖包,但是不像npm install,pip默认安装的依赖包会挂在全局上,不利于项目工程协作. 这时候需要一款类似npm的工具记录我们的项目依赖 ...

  5. 从flask视角理解angular(二)Blueprint VS Component

    Component类似flask app下面的每个blueprint. import 'rxjs/add/operator/switchMap'; import { Component, OnInit ...

  6. 简单实现Java的RMI——远程方法调用

    一.RMI简介: 说到RMI就不得不说RPC了. RPC:(Remote Procedure Call),远程过程调用. RMI(Remote Method Invocation),远程方法调用. R ...

  7. Error updating database:线程异常

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: See http://www.slf4 ...

  8. Asp.net core 学习笔记 ( Configuration 配置 )

    参考 : https://cnblogs.com/nianming/p/7083964.html 配置写在 appsettings.json 里头 比如 { "object": { ...

  9. Python全栈开发-Day2-Python基础2

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  10. appium --log-timestamp > appium.log

     appium --log-timestamp > appium.log