http.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. import {
  2. baseUrl
  3. } from './base.js'
  4. import CryptoJS from "@/common/crypto-js.min.js"
  5. const aesEncrypt = (word, keyStr, iv) => {
  6. let key = CryptoJS.enc.Utf8.parse(keyStr)
  7. let ivs = CryptoJS.enc.Utf8.parse(iv)
  8. let srcs = CryptoJS.enc.Utf8.parse(word)
  9. let encrypted = CryptoJS.AES.encrypt(srcs, key, {
  10. mode: CryptoJS.mode.CBC,
  11. padding: CryptoJS.pad.ZeroPadding,
  12. iv: ivs
  13. });
  14. return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
  15. }
  16. // 小程序端使用
  17. const arrayBuffer2String = (arr) => {
  18. if (typeof arr === 'string') {
  19. return arr;
  20. }
  21. var tmparr = new Uint8Array(arr);
  22. var str = '';
  23. for (var i = 0; i < tmparr.length; i++) {
  24. var one = tmparr[i].toString(2);
  25. var v = one.match(/^1+?(?=0)/);
  26. if (v && one.length == 8) {
  27. var bytesLength = v[0].length;
  28. var store = tmparr[i].toString(2).slice(7 - bytesLength);
  29. for (var st = 1; st < bytesLength; st++) {
  30. store += tmparr[st + i].toString(2).slice(2);
  31. }
  32. str += String.fromCharCode(parseInt(store, 2));
  33. i += bytesLength - 1;
  34. } else {
  35. str += String.fromCharCode(tmparr[i]);
  36. }
  37. }
  38. return str;
  39. }
  40. // 小程序端使用
  41. const string2ArrayBuffer = (str) => {
  42. var bytes = new Array();
  43. var len, c;
  44. len = str.length;
  45. for (var i = 0; i < len; i++) {
  46. c = str.charCodeAt(i);
  47. if (c >= 0x010000 && c <= 0x10FFFF) {
  48. bytes.push(((c >> 18) & 0x07) | 0xF0);
  49. bytes.push(((c >> 12) & 0x3F) | 0x80);
  50. bytes.push(((c >> 6) & 0x3F) | 0x80);
  51. bytes.push((c & 0x3F) | 0x80);
  52. } else if (c >= 0x000800 && c <= 0x00FFFF) {
  53. bytes.push(((c >> 12) & 0x0F) | 0xE0);
  54. bytes.push(((c >> 6) & 0x3F) | 0x80);
  55. bytes.push((c & 0x3F) | 0x80);
  56. } else if (c >= 0x000080 && c <= 0x0007FF) {
  57. bytes.push(((c >> 6) & 0x1F) | 0xC0);
  58. bytes.push((c & 0x3F) | 0x80);
  59. } else {
  60. bytes.push(c & 0xFF);
  61. }
  62. }
  63. var array = new Int8Array(bytes);
  64. return array.buffer;
  65. }
  66. const getEncode64 = (str) => {
  67. // 对编码的字符串转化base64
  68. // 如果是小程序
  69. // #ifdef MP
  70. let arrayBuffer = string2ArrayBuffer(str)
  71. let base64 = wx.arrayBufferToBase64(arrayBuffer)
  72. return base64
  73. // #endif
  74. // 如果不是小程序 小程序下btoa会报错未定义
  75. // #ifndef MP
  76. let base64 = btoa(str);
  77. return base64
  78. // #endif
  79. }
  80. const request = (params, method) => {
  81. let key = 'r5r8bloufgv12548';
  82. let iv = '01goyvbnx845fiwm';
  83. let baseData = {
  84. loading: true,
  85. showText: '加载中...',
  86. url: '',
  87. loading: true,
  88. header: {
  89. // 'content-type': 'application/json',
  90. "content-type": "application/x-www-form-urlencoded",
  91. // "Authorization": 'Bearer' + uni.getStorageSync('token')
  92. "token": uni.getStorageSync('token') || '',
  93. }
  94. }
  95. params = {
  96. ...baseData,
  97. ...params
  98. }
  99. let {
  100. url,
  101. data,
  102. loading,
  103. header,
  104. showText
  105. } = params
  106. data = data ? data : {}
  107. let otherParams = {
  108. m: 'yzd_edu',
  109. i: 2,
  110. c: 'entry',
  111. a: 'wxapp',
  112. deviceType: 'wxapp',
  113. // deviceType: 'wxh5',
  114. }
  115. console.log(data,'dafdafafafgasfafafga')
  116. if (data.data) {
  117. data.data = getEncode64(aesEncrypt(getEncode64(JSON.stringify(data.data)), key, iv))
  118. }
  119. data = {
  120. ...otherParams,
  121. ...data
  122. }
  123. console.log(data,'lllllllllllllllllllllllllllllll')
  124. if (params.loading) {
  125. uni.showLoading({
  126. title: showText
  127. })
  128. }
  129. url = url.includes('http') ? url : baseUrl + url
  130. return new Promise((reslove, reject) => {
  131. uni.request({
  132. url,
  133. data,
  134. method,
  135. header,
  136. success: (res) => {
  137. uni.hideLoading()
  138. uni.stopPullDownRefresh()
  139. console.log('%c请求结果:', 'color:green;', res.data, url);
  140. if (res.statusCode == 200) {
  141. if (res.data.errno != 2004 && res.data.errno != 2003 && res.data.errno != 2001 && res.data.errno != 2002 && res.data.errno != 0) {
  142. uni.showToast({
  143. title: res.data.message,
  144. icon: 'none',
  145. mask: true
  146. })
  147. reject(res.data)
  148. } else {
  149. reslove(res.data)
  150. }
  151. } else {
  152. uni.showToast({
  153. title: res.data.message,
  154. icon: 'none',
  155. mask: true
  156. })
  157. reject(res.data)
  158. }
  159. },
  160. fail: (err) => {
  161. uni.hideLoading()
  162. uni.stopPullDownRefresh()
  163. console.log('%c请求失败:', 'color:red;', err, url);
  164. uni.showToast({
  165. title: err.errMsg,
  166. icon: 'none',
  167. mask: true
  168. })
  169. reject(err)
  170. }
  171. })
  172. })
  173. }
  174. const http = {
  175. // http对象中的方法
  176. get: async params => {
  177. return await request(params, 'GET')
  178. },
  179. post: async params => {
  180. return await request(params, 'POST')
  181. },
  182. put: async params => {
  183. return await request(params, 'PUT')
  184. },
  185. delete: async params => {
  186. return await request(params, 'DELETE')
  187. }
  188. }
  189. export default http;