api.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. const sm4 = require('../js/SM4');
  2. const SM4Exten = require('../js/SM4Exten');
  3. const miniprogramsm4 = require("../miniprogram_npm/miniprogram-sm-crypto/index").sm4;
  4. const secretId = "D2BCF8DE-AA24-4BF6-9C34-C8DD325E412B";//小程序应用ID
  5. const Secret = "6C680A47B87740138DFB299FC69A64E1";//小程序应用密钥
  6. const api_root = 'http://192.168.5.5:5006/'
  7. const CurrentBuId = '12345678-9abc-def0-1234-56789abcdef0';
  8. function request(path, method = 'GET', data = null) {
  9. var WachatID = wx.getStorageSync('WachatID')
  10. return new Promise((resolve, reject) => {
  11. var sign_method = "HMAC_SM4";
  12. var url = api_root + path;
  13. var nonce = generateRandomString();
  14. const timestamp = Date.now();
  15. console.log('data :' + data);
  16. let jsonString = (data != null && method != 'GET') ? JSON.stringify(data) : '';
  17. console.log('request :' + jsonString);
  18.  var stringToSign = "sign_method=" +sign_method + 
  19.                        "&secret_id=" +secretId+
  20.                        "&nonce=" +  nonce +
  21.                        "&timestamp=" + timestamp;
  22.     if(jsonString != '')
  23.     {
  24.       stringToSign +=  "&"+jsonString
  25.     }
  26. console.log('加密串 :' + stringToSign);
  27. let key = stringToHex(Secret);//key转16进制
  28. key = getFirst32Chars(key);//截取前16位
  29. let signature = miniprogramsm4.encrypt(stringToSign, key)//sm4加密
  30. //signature = signature.toUpperCase();
  31. signature = stringToBase64(signature);//加密字符串转base64
  32. console.log('signature :' + signature);
  33. wx.request({
  34. header: {
  35. "sign_method": sign_method,
  36. "secret_id": secretId,
  37. "nonce": nonce,
  38. "timestamp": timestamp,
  39. "signature": signature,
  40. "CurrentBuId" : CurrentBuId,
  41. "WachatID":WachatID
  42. },
  43. url: url,
  44. method: method,
  45. data: data,
  46. success: res => {
  47. console.log("success");
  48. resolve(res);
  49. },
  50. fail: res => {
  51. console.log("request fail");
  52. resolve(res);
  53. },
  54. })
  55. });
  56. }
  57. //字符串转base64
  58. function stringToBase64(str) {
  59. // 定义Base64字符集
  60. const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  61. // 将字符串转换为UTF-8字节数组
  62. let utf8Bytes = [];
  63. for (let i = 0; i < str.length; i++) {
  64. let charCode = str.charCodeAt(i);
  65. if (charCode < 128) { // 1字节字符
  66. utf8Bytes.push(charCode);
  67. } else if (charCode < 2048) { // 2字节字符
  68. utf8Bytes.push((charCode >> 6) | 192);
  69. utf8Bytes.push((charCode & 63) | 128);
  70. } else if (charCode < 65536) { // 3字节字符
  71. utf8Bytes.push((charCode >> 12) | 224);
  72. utf8Bytes.push(((charCode >> 6) & 63) | 128);
  73. utf8Bytes.push((charCode & 63) | 128);
  74. } else { // 4字节字符
  75. utf8Bytes.push((charCode >> 18) | 240);
  76. utf8Bytes.push(((charCode >> 12) & 63) | 128);
  77. utf8Bytes.push(((charCode >> 6) & 63) | 128);
  78. utf8Bytes.push((charCode & 63) | 128);
  79. }
  80. }
  81. let base64Str = '';
  82. let paddingCount = 0;
  83. // 处理每3个字节(24位),转换为4个Base64字符
  84. for (let i = 0; i < utf8Bytes.length; i += 3) {
  85. let byte1 = utf8Bytes[i];
  86. let byte2 = i + 1 < utf8Bytes.length ? utf8Bytes[i + 1] : 0;
  87. let byte3 = i + 2 < utf8Bytes.length ? utf8Bytes[i + 2] : 0;
  88. let chunk = (byte1 << 16) | (byte2 << 8) | byte3;
  89. let char1 = base64Chars[(chunk >> 18) & 63];
  90. let char2 = base64Chars[(chunk >> 12) & 63];
  91. let char3 = i + 1 < utf8Bytes.length ? base64Chars[(chunk >> 6) & 63] : '=';
  92. let char4 = i + 2 < utf8Bytes.length ? base64Chars[chunk & 63] : '=';
  93. base64Str += char1 + char2 + char3 + char4;
  94. // 计算需要填充的'='号数量
  95. if (i + 2 >= utf8Bytes.length) {
  96. paddingCount = (utf8Bytes.length - i) % 3;
  97. }
  98. }
  99. return base64Str;
  100. }
  101. //截取字符串
  102. function getFirst32Chars(str) {
  103. if (typeof str !== 'string') {
  104. throw new Error('Input must be a string');
  105. }
  106. // 如果字符串长度小于等于32,则返回整个字符串;否则返回前32个字符
  107. return str.length <= 32 ? str : str.slice(0, 32);
  108. }
  109. //字符串转16进制
  110. function stringToHex(str) {
  111. let hex = '';
  112. for (let i = 0; i < str.length; i++) {
  113. // 获取字符的字符编码
  114. const charCode = str.charCodeAt(i);
  115. // 将字符编码转换为16进制,并确保始终为两位数(不足两位前面补0)
  116. const hexValue = charCode.toString(16).padStart(2, '0');
  117. hex += hexValue;
  118. }
  119. return hex;
  120. }
  121. function generateRandomString(minLength = 6, maxLength = 10) {
  122. // 定义字符集
  123. const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  124. // 生成随机长度
  125. const length = Math.floor(Math.random() * (maxLength - minLength + 1)) + minLength;
  126. let result = '';
  127. for (let i = 0; i < length; i++) {
  128. // 随机选择一个字符
  129. const randomIndex = Math.floor(Math.random() * charset.length);
  130. result += charset[randomIndex];
  131. }
  132. return result;
  133. }
  134. // //获取站点信息
  135. // function request_getSite(data) {
  136. // return request('api/Nozzle/GetNozzleInfo?Nozzleid='+ data, "GET",data);
  137. // }
  138. //支付
  139. function request_wechatPay(data) {
  140. return request('api/Transactions/UnifiedOrder?trxid='+ data, "GET",data);
  141. }
  142. //获取站点信息与用户信息
  143. function request_GetSiteInfo() {
  144. return request('api/Site/GetSiteInfo', "GET");
  145. }
  146. //小程序用户查询未支付订单
  147. function request_GetMiniProgramTransactionsUnpaidQuery(data) {
  148. return request('api/Transactions/GetMiniProgramTransactionsUnpaidQuery', "GET",data);
  149. }
  150. //小程序用户根据抢号查询未支付订单
  151. function request_GetMiniProgramTransactionsUnpaidNozzle(data) {
  152. return request('api/Transactions/GetMiniProgramTransactionsUnpaidNozzle?NozzleId='+data, "GET",data);
  153. }
  154. //小程序登录
  155. function request_Wechatlogin(data) {
  156. return request('api/Auth/Wechatlogin?code='+ data, "GET",data);
  157. }
  158. //添加用户信息
  159. function request_AddMiniprogramUser(data) {
  160. return request('api/Site/AddMiniprogramUser', "POST",data);
  161. }
  162. //向fcc发起油枪授权
  163. function request_NozzleAuthorization(data) {
  164. return request('api/Nozzle/NozzleAuthorization?trxid=' +data, "GET",data);
  165. }
  166. //向fcc发起取消油枪授权
  167. function request_CancelNozzleAuthorization(data) {
  168. return request('api/Nozzle/CancelNozzleAuthorization?trxid=' +data, "GET",data);
  169. }
  170. export default {
  171. request_GetSiteInfo,
  172. request_wechatPay,
  173. request_Wechatlogin,
  174. request_AddMiniprogramUser,
  175. request_NozzleAuthorization,
  176. request_CancelNozzleAuthorization,
  177. request_GetMiniProgramTransactionsUnpaidQuery,
  178. request_GetMiniProgramTransactionsUnpaidNozzle,
  179. request_AddMiniprogramUser
  180. }