Http.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. class HTTP {
  2. constructor() {
  3. this.ENV = wx.getAccountInfoSync().miniProgram.envVersion;
  4. this.urls = [{
  5. name: "美大正式",
  6. url: "https://crm.meida.com:16691"
  7. }, {
  8. name: "楚楚",
  9. url: "https://cucu.cnyunl.com:8079"
  10. }, {
  11. name: "开发环境",
  12. url: "http://61.164.207.46:8300"
  13. }]
  14. if (this.ENV === 'release') { // 正式版
  15. this.baseUrl = "https://crm.meida.com:16691";
  16. } else {
  17. // this.baseUrl = "http://61.164.207.46:8300";
  18. this.baseUrl = "https://crm.meida.com:16691";
  19. }
  20. //得到缩略图或者压缩图 getType默认得到缩略图传true得到压缩图
  21. this.getSpecifiedImage = (obj, getType = false) => {
  22. obj.url = this.getImageUrl(obj.url)
  23. try {
  24. let type = getType ? 'compressed' : 'thumbnail';
  25. let imgObj = obj.subfiles.find(v => v.type == type);
  26. return this.getImageUrl(imgObj.url || obj.url);
  27. } catch (error) {
  28. return this.getImageUrl(obj.url);
  29. }
  30. }
  31. // 判断图片是本地还是云存储
  32. this.getImageUrl = (url) => {
  33. if (!url) return '';
  34. //判断url中是否存在http,没有的话要拼接 this.baseUrl
  35. if (!/^https?:\/\//.test(url)) {
  36. url = this.baseUrl + url;
  37. }
  38. return url;
  39. }
  40. // 从本地存储加载JSESSIONID
  41. this.jsessionid = wx.getStorageSync('JSESSIONID') || '';
  42. console.log("接口地址", this.baseUrl);
  43. }
  44. request({
  45. url = '',
  46. data = {},
  47. method = "POST",
  48. header = {
  49. 'content-type': 'application/json',
  50. "accesstoken": data.accesstoken || wx.getStorageSync('userMsg').token || '',
  51. "Cookie": `JSESSIONID=${this.jsessionid}`
  52. },
  53. suffix = '/yos/rest/index'
  54. }) {
  55. return new Promise((resolve, reject) => {
  56. this._request((suffix == '/yos/rest/index' ? this.baseUrl : "") + suffix + url, resolve, reject, data, method, header);
  57. })
  58. }
  59. getRequest({
  60. url,
  61. method = "GET",
  62. header = {
  63. "Cookie": `JSESSIONID=${this.jsessionid}`
  64. }
  65. }) {
  66. return new Promise((resolve, reject) => {
  67. this._request(url, resolve, reject, {}, method, header);
  68. })
  69. }
  70. _request(url, resolve, reject, data, method, header) {
  71. wx.request({
  72. url: url,
  73. data,
  74. method,
  75. header,
  76. timeout: 60000,
  77. success: (res) => {
  78. resolve(res.data);
  79. },
  80. fial: (err) => {
  81. reject(err);
  82. },
  83. complete: (res) => {
  84. this._handleSessionCookies(res);
  85. if (res.errMsg != 'request:ok') {
  86. wx.showToast({
  87. title: '网络异常,请重新进入',
  88. icon: "none"
  89. })
  90. } else if (res.data.msg == '登陆状态已过期,请重新登陆!') {
  91. this.jsessionid = '';
  92. wx.removeStorageSync('JSESSIONID');
  93. wx.redirectTo({
  94. url: '/pages/login/phone',
  95. });
  96. wx.showToast({
  97. title: res.msg,
  98. icon: "none"
  99. })
  100. }
  101. }
  102. })
  103. }
  104. // 处理会话Cookie
  105. _handleSessionCookies(res) {
  106. return new Promise((resolve) => {
  107. try {
  108. const cookies = res.cookies || [];
  109. const headers = res.header || {};
  110. // 检查响应头中的Set-Cookie
  111. const setCookie = headers['Set-Cookie'] || headers['set-cookie'];
  112. if (setCookie) {
  113. // 将字符串转换为数组
  114. const cookieArray = Array.isArray(setCookie) ?
  115. setCookie : [setCookie];
  116. cookies.push(...cookieArray);
  117. }
  118. // 查找JSESSIONID
  119. for (const cookie of cookies) {
  120. const match = cookie.match(/JSESSIONID=([^;]+)/i);
  121. if (match && match[1]) {
  122. const newSessionId = match[1];
  123. // 更新JSESSIONID
  124. if (newSessionId !== this.jsessionid) {
  125. this.jsessionid = newSessionId;
  126. wx.removeStorageSync('JSESSIONID');
  127. wx.setStorageSync('JSESSIONID', newSessionId);
  128. }
  129. break;
  130. }
  131. }
  132. resolve(this.jsessionid)
  133. } catch (error) {
  134. resolve(this.jsessionid)
  135. console.error('处理会话Cookie时出错:', error);
  136. }
  137. })
  138. }
  139. }
  140. export {
  141. HTTP
  142. }