http.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. // import common = require("./common");
  2. // const appid = 'wxefa2810018787a41'
  3. const appid = '487987498'
  4. const language = 'zh'
  5. var common = require('./common.js');
  6. var storage = require('./storage.js');
  7. var config = require('./config.js'); // 检查token是否失效 如失效 清除缓存 提示重新登录
  8. // 402: 解析token出错 403: token格式错误 404: 公共声明中缺少必要字段 405: token验证失败
  9. import crypto from '@/node_modules/crypto-js';
  10. function _checkTokenValid(res) {
  11. if (
  12. res.data.code === 402 ||
  13. res.data.code === 403 ||
  14. res.data.code === 404 ||
  15. res.data.code === 405 ||
  16. res.data.code === 300 ||
  17. res.data.code === 302 ||
  18. res.data.code === 303 ||
  19. res.data.code === 304 ||
  20. res.data.code === 305 ||
  21. res.data.code === 306
  22. ) {
  23. //wx.clearStorageSync();
  24. //TODO
  25. // var shareCode = storage.getShareCode();
  26. // storage.clearStorage();
  27. // storage.setShareCode(shareCode);
  28. storage.removeUserToken()
  29. uni.removeStorageSync('car_info')
  30. uni.removeStorageSync('USER_INFO_DATA')
  31. uni.reLaunch({
  32. url: '/pages/loginRegister/login'
  33. });
  34. return false;
  35. }
  36. return true;
  37. }
  38. function getRequest(url, data, successCallBack, failCallBack) {
  39. // function getRequest(url1, data, successCallBack, failCallBack) {
  40. if (!failCallBack) failCallBack = function() {};
  41. // var url=url1?url1:''
  42. if (url.indexOf('?') > 0) {
  43. url = url + '&' + common.obj2UrlQuery(data);
  44. } else {
  45. url = '?' + common.obj2UrlQuery(data);
  46. // return
  47. }
  48. uni.request({
  49. url: url,
  50. method: 'GET',
  51. success: function(res) {
  52. uni.hideLoading();
  53. if (_checkTokenValid(res)) {
  54. successCallBack(res);
  55. }
  56. },
  57. fail: function(res) {
  58. uni.hideLoading();
  59. if (!(res.errMsg.indexOf('interrupted') != -1)) {
  60. uni.showModal({
  61. title: '错误',
  62. content: '网络错误' + res.errMsg,
  63. showCancel: false
  64. });
  65. }
  66. if (failCallBack) failCallBack(res);
  67. }
  68. });
  69. }
  70. function postRequest(url, data, successCallBack, failCallBack) {
  71. const datetime = Math.floor(Date.now() / 1000)
  72. data.time = datetime.toString()
  73. let jsonStr = JSON.stringify(selfSort(data))
  74. var encrypted = crypto.SHA256(jsonStr)
  75. var sign = encrypted.toString()
  76. if (!failCallBack) failCallBack = function() {}
  77. var token = storage.getUserToken()
  78. // 申请拖车服务接口加密签名校验
  79. // if (url === config.API_DAYHIRE_DRAG_CAR_SERVICE) {
  80. data.sign = sign
  81. // }
  82. uni.request({
  83. url: url,
  84. data: data,
  85. header: {
  86. 'content-type': 'application/json',
  87. 'X-Token': token
  88. },
  89. method: 'POST',
  90. success: function(res) {
  91. //wx.hideLoading();
  92. if (res.data.code == 200) {
  93. res.succeed = true
  94. res.body = res.data
  95. } else {
  96. uni.showToast({ title: res.data.msg, icon: 'none' })
  97. }
  98. if (_checkTokenValid(res)) {
  99. successCallBack(res);
  100. }
  101. },
  102. fail: function(res) {
  103. uni.hideLoading();
  104. if (!(res.errMsg.indexOf('interrupted') != -1)) {
  105. uni.showModal({
  106. title: '错误',
  107. content: '网络错误' + res.errMsg,
  108. showCancel: false
  109. });
  110. }
  111. failCallBack(res);
  112. }
  113. });
  114. }
  115. function selfSort(data) {
  116. // console.log(data,"签名数据")
  117. let sortedKeys = Object.keys(data).sort((a, b) => {
  118. //对key 进行翻转
  119. let reversedA = a.split("").reverse().join("");
  120. let reversedB = b.split("").reverse().join("");
  121. let len = reversedA.length > reversedB.length ? reversedA.length : reversedB.length
  122. for (let i = 0; i < len; i++) {
  123. if (typeof(reversedA[i]) == 'undefined') {
  124. return 1;
  125. }
  126. if (typeof(reversedB[i]) == 'undefined') {
  127. return -1;
  128. }
  129. if (reversedA[i] > reversedB[i]) {
  130. return -1;
  131. } else if (reversedB[i] > reversedA[i]) {
  132. return 1;
  133. }
  134. }
  135. return 1
  136. }) // 对属性数组进行排序
  137. let sortedJson = {}; // 重构排序后的JSON对象
  138. sortedKeys.forEach(key => {
  139. sortedJson[key] = data[key];
  140. })
  141. return sortedJson
  142. }
  143. function getApi(url, data, successCallBack, failCallBack) {
  144. var token = storage.getUserToken(); //wx.getStorageSync(config.STORAGE_USER_TOKEN)
  145. data.token = token;
  146. data.v = config.APP_VERSION;
  147. data.appid = appid
  148. data.from = 'app'
  149. //#ifdef MP-ALIPAY
  150. data.from = 'ali'
  151. //#endif
  152. //#ifdef MP-WEIXIN
  153. data.from = 'wx'
  154. //#endif
  155. data.language = language
  156. getRequest(url, data, successCallBack, failCallBack);
  157. }
  158. function postApi(url, data, successCallBack, failCallBack) {
  159. var token = storage.getUserToken(); // wx.getStorageSync(config.STORAGE_USER_TOKEN)
  160. console.log(data,'token');
  161. data.token = token;
  162. data.v = config.APP_VERSION;
  163. data.appid = appid
  164. data.from = 'app'
  165. //#ifdef MP-ALIPAY
  166. data.from = 'ali'
  167. //#endif
  168. //#ifdef MP-WEIXIN
  169. data.from = 'wx'
  170. //#endif
  171. data.language = language
  172. postRequest(url, data, successCallBack, failCallBack);
  173. }
  174. /**
  175. * 上报formid
  176. */
  177. function reportFormId(formId) {
  178. const accountInfo = uni.getAccountInfoSync();
  179. var postData = {
  180. formId: formId,
  181. appid
  182. };
  183. postApi(config.API_FORMID_REPORT, postData, function() {});
  184. }
  185. function getAppConfig(successCallBack) {
  186. const pData = {
  187. appid,
  188. terminal: 'wx_app'
  189. };
  190. getApi(config.API_INDEX_APP_CONFIG, pData, function(resp) {
  191. if (resp.data.code === 200) {
  192. const appConfig = resp.data.data.appConfig;
  193. storage.setAppConfig(appConfig);
  194. successCallBack(appConfig)
  195. //#ifdef MP-ALIPAY
  196. uni.setNavigationBarTitle({
  197. title: ''
  198. });
  199. //#endif
  200. //#ifdef MP-WEIXIN
  201. wx.setNavigationBarTitle({
  202. title: appConfig.app_name
  203. });
  204. //#endif
  205. }else{
  206. }
  207. });
  208. }
  209. module.exports = {
  210. getRequest: getRequest,
  211. postRequest: postRequest,
  212. getApi: getApi,
  213. postApi: postApi,
  214. reportFormId: reportFormId,
  215. getAppConfig: getAppConfig
  216. };