Http.js 3.6 KB

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