【转】js 对象按照键值(不分区大小写)排序,生成签名方法
客户需求小程序端用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 对象按照键值(不分区大小写)排序,生成签名方法的更多相关文章
- js对象替换键值名称
js对象替换键值名称 将obj中的id和name字段替换分别替换成为“@id”,“@name” 代码如下: let obj = [{id:,name:,name:"李四"}].ma ...
- js变量作为数组对象的键值方法
js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...
- 仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大
仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大 1.介绍 先看图 今天在项目中遇到了一个问题,例如我现在需要传一些数据到后端,数组例如是 let arr = [ {" ...
- js中以键值对的形式当枚举
js中以键值对的形式当枚举var Penum= { B: "姓名", C: "所属居委", D: "证件号", E: "性别&qu ...
- Javascript对象数据类型(键值对)的创建和使用方法
对象数据类型(键值对) 1.创建键值对 var arry={name:"小明",age:20,isgey:falet} // var 键值对名 = {键:值,键:值} 2.增加键值 ...
- 对象属性键值[key]属性问题
1,obj[key]此时key代表是循环中的一个变量. var obj = {key:3,key1:1,key2:2,key3:3,toSting:4}; for (key in obj) { con ...
- js对象转换为json格式时,js对象属性中有值为null和undefined注意事项
当属性值为null时: 当属性值为undefined时: 只有当属性值为未定义时, js对象转换成json格式时会忽略该属性.
- js实现的对象数组根据对象的键值进行排序代码
有时候会遇到做展示数组的排序,由大到小和由小到大的切换: var arr=[{id:1,webName:"蚂蚁部落"},{id:2,webName:"网易"}] ...
- C#基础 Dictionary存储自定义对象作为键值
程序每次向容器Dictionary中插入数据时,都会判断Key值是否已经存在,如果不存在,则插入.否则抛出异常.那么Dictionary又是如何判断Key值是否存在的呢? 请看下面的代码: cla ...
随机推荐
- webpack插件配置(二)- HtmlWebpackPlugin
作用 简化Html文件的创建,以便为你的webpack bundle包提供服务.这对于在文件名中包含每次会随着编译而发生变化的hash的webpack bundle尤其有用.插件可以生成一个HTML文 ...
- _instance_reset
制作多功能Item.creature及gameobject 中第19个功能 重置副本,关联到该表. 当该表中配置,且玩家有这个副本这个难度的进度时,功能宝石中会出现该副本的名字,点击可以重置副本 ma ...
- Educational Codeforces Round 23 C. Really Big Numbers 暴力
C. Really Big Numbers time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 1.1.1 vue-cli脚手架工具
参考文档: windows下npm安装vue(以下教程大部分都是参考这篇博客的,按照着这篇博客自己实现了一遍) npm安装vue-cli脚手架 一.前言 npm:nodejs下的包管理器,安装好nod ...
- 基于iOS用CoreImage实现人脸识别
2018-09-04更新: 很久没有更新文章了,工作之余花时间看了之前写的这篇文章并运行了之前写的配套Demo,通过打印人脸特征CIFaceFeature的属性,发现识别的效果并不是很好,具体说明见文 ...
- x1c 2018 体验
总结一下: 2018对比2017优点: 1屏幕完爆:HDR WHD镜面屏完爆 FHD 雾面屏(污+雾,所谓的油腻感),还有色彩!正红色第一次觉得这么好看.别人看得出来看不出来我不知道,至少我能看出来非 ...
- Qt5模型/视图结构-视图(View)
实现自定义的View,可继承自QAbstractItemView类,对所需的纯虚函数进行重定义与实现,对于QAbstractItemView类中的纯虚函数,在子类中必须进行重定义,但不一定要实现,可根 ...
- 第 8 章 容器网络 - 051 - 在 overlay 中运行容器
在 overlay 中运行容器 运行一个 busybox 容器并连接到 ov_net1: docker run -itd --name bbox1 --network ov_net1 busybox ...
- js时间戳如何转时间
js时间戳如何转时间 一.总结 一句话总结:Date对象分别获取年now.getFullYear()月now.getMonth()+1日now.getDate()即可 Date对象分别获取年now.g ...
- JavaScript 第七章总结
前言 主要介绍了关于 JavaScript 中有关 type 的问题.讲了很多关于各种 type 的 idiosyncrasies. 谈谈JavaScript types 在 JavaScript 中 ...