signUtil.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import md5 from 'js-md5';
  2. function jsonString (obj) {
  3. if (isObject(obj)) {
  4. return sortObjByKey(obj);
  5. } else if (isArray(obj)) {
  6. var sortArray = [];
  7. for (var i = 0; i < obj.length; i++) {
  8. if (isObject(obj[i])) {
  9. sortArray.push(sortObjByKey(obj[i]));
  10. } else {
  11. return obj;
  12. }
  13. }
  14. return sortArray;
  15. } else {
  16. return obj;
  17. }
  18. }
  19. // 将通讯录按照 ABCD字母的顺序排序
  20. function sortObjByKey (obj) {
  21. var keys = Object.keys(obj).sort();
  22. var newObj = {}
  23. for (var i = 0; i < keys.length; i++) {
  24. var index = keys[i];
  25. newObj[index] = jsonString(obj[index]);
  26. }
  27. return newObj;
  28. }
  29. //判断是否是数组
  30. function isArray (obj) {
  31. return Object.prototype.toString.call(obj) === '[object Array]';
  32. }
  33. //判断是否是对象
  34. function isObject (obj) {
  35. return Object.prototype.toString.call(obj) === '[object Object]';
  36. }
  37. export default {
  38. /**
  39. * 第一步,将data中参数,按key升序,排除null值,用&拼接,得tempSignStr
  40. * 第二步,"time=%s&" + tempSignStr + "&token=%s"
  41. * 第三步,md5(第二步结果)
  42. */
  43. sign: function (token, data) {
  44. if (typeof (data) == "undefined" || data == null) {
  45. data = {};
  46. }
  47. var gatewayRequest = {};//currentPage pageSize orderBy data time token sign isFrom
  48. var time = new Date().getTime();
  49. //找出data中值非null的key,同时排除分页参数
  50. //ignoreKeyList data中哪些key不参与签名
  51. var dataKeyArray = [];
  52. var excludeKeyArray = ['currentPage', 'pageSize', 'orderBy', 'ignoreKeyList'];
  53. for (var key in data) {
  54. if (data[key] == null) {
  55. continue;
  56. }
  57. if (excludeKeyArray.indexOf(key) >= 0) {
  58. gatewayRequest[key] = data[key];
  59. delete data[key];
  60. if (key === 'ignoreKeyList') {
  61. //遍历ignoreKeyList,不参与签名校验
  62. for (var i = 0; i < data[key].length; i++) {
  63. delete data[data[key][i]];
  64. }
  65. }
  66. continue;
  67. }
  68. dataKeyArray.push(key);
  69. }
  70. //将key按升序排列
  71. dataKeyArray.sort();
  72. //生成签名串"time=%s&" + tempSignStr + "&token=%s"
  73. var tempSignStr = "time=" + time;
  74. for (var i = 0; i < dataKeyArray.length; i++) {
  75. var key = dataKeyArray[i];
  76. var value = data[key];
  77. tempSignStr += "&";
  78. tempSignStr += key;
  79. tempSignStr += "=";
  80. tempSignStr += JSON.stringify(jsonString(value));
  81. }
  82. tempSignStr += "&token=";
  83. tempSignStr += token;
  84. var signStr = md5(tempSignStr);
  85. gatewayRequest['data'] = data;
  86. gatewayRequest['time'] = time;
  87. gatewayRequest['token'] = token;
  88. gatewayRequest['sign'] = signStr;
  89. gatewayRequest['isFrom'] = "PC";
  90. return gatewayRequest;
  91. }
  92. }
  93. /**
  94. * 密码加盐后MD5
  95. * @param {HTMLElement} elm
  96. *
  97. */
  98. export function transPsw (val) {
  99. return md5(val + 'gaea')
  100. }