util.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. const formatTime = date => {
  2. const year = date.getFullYear()
  3. const month = date.getMonth() + 1
  4. const day = date.getDate()
  5. const hour = date.getHours()
  6. const minute = date.getMinutes()
  7. const second = date.getSeconds()
  8. return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
  9. }
  10. const formatNumber = n => {
  11. n = n.toString()
  12. return n[1] ? n : '0' + n
  13. }
  14. const getTypeSn = url => {
  15. let type_sn = ''
  16. if (url.indexOf('type_sn') != -1 && url.indexOf('bonusex') != -1) {
  17. let arr = url.split('&')
  18. arr.some(item => {
  19. if (item.indexOf('type_sn') != -1) {
  20. type_sn = item.split('=')[1]
  21. return true
  22. }
  23. })
  24. }
  25. return type_sn
  26. }
  27. function getUrlPrefixAndParams(url) {
  28. // 用JS拿到URL,如果函数接收了URL,那就用函数的参数。如果没传参,就使用当前页面的URL
  29. let params = url.split('?');
  30. let prefix = params[0];
  31. if(params.length < 2) {
  32. return [prefix, {}];
  33. }
  34. var queryString = params[1];
  35. // 用来存储我们所有的参数
  36. var obj = {};
  37. // 如果没有传参,返回一个空对象
  38. if (!queryString) {
  39. return obj;
  40. }
  41. // stuff after # is not part of query string, so get rid of it
  42. queryString = queryString.split('#')[0];
  43. // 将参数分成数组
  44. var arr = queryString.split('&');
  45. for (var i = 0; i < arr.length; i++) {
  46. // 分离成key:value的形式
  47. var a = arr[i].split('=');
  48. // 将undefined标记为true
  49. var paramName = a[0];
  50. var paramValue = typeof (a[1]) === 'undefined' ? true : a[1];
  51. // 如果调用对象时要求大小写区分,可删除这两行代码
  52. paramName = paramName.toLowerCase();
  53. if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase();
  54. // 如果paramName以方括号结束, e.g. colors[] or colors[2]
  55. if (paramName.match(/\[(\d+)?\]$/)) {
  56. // 如果paramName不存在,则创建key
  57. var key = paramName.replace(/\[(\d+)?\]/, '');
  58. if (!obj[key]) obj[key] = [];
  59. // 如果是索引数组 e.g. colors[2]
  60. if (paramName.match(/\[\d+\]$/)) {
  61. // 获取索引值并在对应的位置添加值
  62. var index = /\[(\d+)\]/.exec(paramName)[1];
  63. obj[key][index] = paramValue;
  64. } else {
  65. // 如果是其它的类型,也放到数组中
  66. obj[key].push(paramValue);
  67. }
  68. } else {
  69. // 处理字符串类型
  70. if (!obj[paramName]) {
  71. // 如果如果paramName不存在,则创建对象的属性
  72. obj[paramName] = paramValue;
  73. } else if (obj[paramName] && typeof obj[paramName] === 'string') {
  74. // 如果属性存在,并且是个字符串,那么就转换为数组
  75. obj[paramName] = [obj[paramName]];
  76. obj[paramName].push(paramValue);
  77. } else {
  78. // 如果是其它的类型,还是往数组里丢
  79. obj[paramName].push(paramValue);
  80. }
  81. }
  82. }
  83. return [prefix,obj];
  84. }
  85. var RSA = require('./wx_rsa.js')
  86. function strsign(str) {
  87. var privateKey = `-----BEGIN RSA PRIVATE KEY-----
  88. MIICXAIBAAKBgQC/iOf91VYX6XN05rFI7sHPJq2cnGr47hODFfWfhFw7z8ueTwGI
  89. w7ynzLUTArCWIDuEdH8sm9Tob4Jcl1CixWo8ToVJv+CtoZyNRP/vMz22NAlOTrK+
  90. AvbMVh7WOuroE8fjuFt3uAsWE3x5/guhLomCdg1iYoPjm6YXfAjxWBcy8QIDAQAB
  91. AoGAPqIPcxMrVyBxL/4sZTQmTo5QYZFI7eQ0nz40FxjabHi0Fi2xy75uV9T6NaBA
  92. jKc3r0XFPJos0mF8mLimlsPFzCe/wgugPH0gXZVHixH034rLqxJ83lLGpdiv5/lg
  93. ABY/k1J3J6mLRKggk/vXOI1ZH4pOxTcY23IqPadu0Cg82MECQQDpVrOfd5Jwcrkh
  94. TlZyIqYYSpWcvujFMarsYT/tzZV1Wkwhx2wZfMbd3y6i5q1z1B7wLd/cCfHwLyw7
  95. jVEID9oJAkEA0iLe22YtoZs6n1yva6lcideqNB8KmvGej2IaHUkrH+tYd/sMXRKQ
  96. xcSFfSZz1gT4QsXF/ndVXXci2WnF2yrrqQJAacBXrCA/CCOWb9fXKec2K7Ax2lZT
  97. nHuEIZl5pccUw5jnBDAjd/GrF4c81auCVQp/8w53dHw1YEug2mSTovm8MQJACYNo
  98. oXgrwrA7ZDGXA4HEXb00yG1LVp5vtkATvJWubSCDfdMQyTno8fsmq/bMsbjB4IwB
  99. nbabV8LoAf3G5lg4GQJBAIkaDL+qe1ijVN+JGaqb1zCITeoVIoarlRWQye8Iga9b
  100. Qi8P5Ft7oXIglYjOvBYC0rbnn037LIK/fqB1cP6OBow=
  101. -----END RSA PRIVATE KEY-----`
  102. var sign_rsa = RSA.KEYUTIL.getKey(privateKey);
  103. console.log(sign_rsa)
  104. var hashAlg = 'sha1';
  105. let sig = sign_rsa.signString(str, hashAlg);
  106. sig = RSA.hex2b64(sig); // hex 转 b64
  107. return sig;
  108. }
  109. function isEmpty(val) {
  110. if(val == '') {
  111. return true;
  112. }
  113. if(val == null) {
  114. return true;
  115. }
  116. if(val == undefined) {
  117. return true;
  118. }
  119. return false;
  120. }
  121. function arrsign(map) {
  122. let keys = new Array()
  123. for (let key of Object.keys(map)) {
  124. keys.push(key)
  125. }
  126. keys.sort();
  127. let content = ''
  128. let i = 0;
  129. keys.forEach(key => {
  130. let val = map[key];
  131. val = '' + val
  132. if (false === isEmpty(val) && "@" != val.substr(0, 1)) {
  133. if (i == 0) {
  134. content += '' + key + "=" + encodeURI(val);
  135. } else {
  136. content += "&" + key + "=" + encodeURI(val);
  137. }
  138. i++;
  139. }
  140. });
  141. console.log('content:', content);
  142. return strsign(content);
  143. }
  144. module.exports = {
  145. getTypeSn: getTypeSn,
  146. formatTime: formatTime,
  147. parseAppjump: getUrlPrefixAndParams,
  148. strsign: strsign,
  149. arrsign: arrsign
  150. }