api.js 7.7 KB

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