客户需求小程序端用js生成签名,我们按照要求一步一步解决,并且将请求方法封装到一个utils.js里:

第一步:对关联数组按照键名做正序排序。

第二步:拼接字符串

第三步:将拼接的字符串加上私钥

第四步:将以上字符串MD5加密

  1. const md5 = require('md5.js');
  2. var appsecret ="appsecret ";
  3. var App_Key ="App_Key ";
  4.  
  5. //字母排序:不区分大小写
  6. function sortCharter(a, b) {
  7. if (a.toString().toUpperCase() > b.toString().toUpperCase()) {
  8. return 1;
  9. }
  10. else if (a.toString().toUpperCase() == b.toString().toUpperCase()) {
  11. return 0;
  12. }
  13. else {
  14. return -1;
  15. }
  16. }
  17.  
  18. function objKeySort(obj) {//排序的函数
  19. var newkey = Object.keys(obj).sort(sortCharter);
  20. //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
  21. var newObj = {};//创建一个新的对象,用于存放排好序的键值对
  22. for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
  23. newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
  24. }
  25. return newObj;//返回排好序的新对象
  26. }
  27. String.prototype.PadLeft = function (len, charStr) {
  28. var s = this + '';
  29. return new Array(len - s.length + 1).join(charStr, '') + s;
  30. }
  31.  
  32. //创建sign
  33. function create_sign(data) {
  34.  
  35. console.log("1、排序前create_sign0");
  36. console.log(data);
  37. //1、排序
  38. data = objKeySort(data);
  39. console.log("1、排序后create_sign111");
  40. console.log(data);
  41. //2.拼接
  42. var txt="";
  43. var newkey = Object.keys(data);
  44. for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
  45. txt = txt + newkey[i].length.toString().PadLeft(2, '0');
  46. txt=txt+"-";
  47. txt = txt + newkey[i];
  48. txt = txt + ":";
  49. // console.log("for内部===k-v");
  50. console.log(newkey[i]);
  51. console.log(data[newkey[i]]);
  52. txt = txt + data[newkey[i]].toString().length.toString().PadLeft(4,'0');
  53. txt = txt + "-";
  54. txt = txt + data[newkey[i]];
  55. if (i < (newkey.length-1))
  56. {
  57. txt = txt + ";";
  58. }
  59. }
  60. //console.log("for内部===3.追加私钥appsecret");
  61. //3.追加私钥appsecret
  62. // console.log(txt);
  63. // console.log("appsecret=" + appsecret);
  64. txt = txt + appsecret;
  65. //4.md5加密
  66. txt = md5.hex_md5(txt);
  67. return txt;
  68. }

【转】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. webpack插件配置(二)- HtmlWebpackPlugin

    作用 简化Html文件的创建,以便为你的webpack bundle包提供服务.这对于在文件名中包含每次会随着编译而发生变化的hash的webpack bundle尤其有用.插件可以生成一个HTML文 ...

  2. _instance_reset

    制作多功能Item.creature及gameobject 中第19个功能 重置副本,关联到该表. 当该表中配置,且玩家有这个副本这个难度的进度时,功能宝石中会出现该副本的名字,点击可以重置副本 ma ...

  3. 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 ...

  4. 1.1.1 vue-cli脚手架工具

    参考文档: windows下npm安装vue(以下教程大部分都是参考这篇博客的,按照着这篇博客自己实现了一遍) npm安装vue-cli脚手架 一.前言 npm:nodejs下的包管理器,安装好nod ...

  5. 基于iOS用CoreImage实现人脸识别

    2018-09-04更新: 很久没有更新文章了,工作之余花时间看了之前写的这篇文章并运行了之前写的配套Demo,通过打印人脸特征CIFaceFeature的属性,发现识别的效果并不是很好,具体说明见文 ...

  6. x1c 2018 体验

    总结一下: 2018对比2017优点: 1屏幕完爆:HDR WHD镜面屏完爆 FHD 雾面屏(污+雾,所谓的油腻感),还有色彩!正红色第一次觉得这么好看.别人看得出来看不出来我不知道,至少我能看出来非 ...

  7. Qt5模型/视图结构-视图(View)

    实现自定义的View,可继承自QAbstractItemView类,对所需的纯虚函数进行重定义与实现,对于QAbstractItemView类中的纯虚函数,在子类中必须进行重定义,但不一定要实现,可根 ...

  8. 第 8 章 容器网络 - 051 - 在 overlay 中运行容器

    在 overlay 中运行容器 运行一个 busybox 容器并连接到 ov_net1: docker run -itd --name bbox1 --network ov_net1 busybox ...

  9. js时间戳如何转时间

    js时间戳如何转时间 一.总结 一句话总结:Date对象分别获取年now.getFullYear()月now.getMonth()+1日now.getDate()即可 Date对象分别获取年now.g ...

  10. JavaScript 第七章总结

    前言 主要介绍了关于 JavaScript 中有关 type 的问题.讲了很多关于各种 type 的 idiosyncrasies. 谈谈JavaScript types 在 JavaScript 中 ...