net.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. const {
  2. DEBUG,
  3. CODE_NOT_LOGIN
  4. } = require('./c.js');
  5. const { api } = require(`./config.js`);
  6. const md5 = require('./md5.js');
  7. const util = require('./util.js');
  8. const commonParams = () => {
  9. let deviceId = 'weapp';
  10. let systemVersion = 'weapp';
  11. let systemInfo = util.getStorageSync('systemInfo');
  12. if (!systemInfo) {
  13. systemInfo = wx.getSystemInfoSync();
  14. if (systemInfo) {
  15. wx.setStorageSync('systemInfo', systemInfo);
  16. }
  17. }
  18. if (systemInfo) {
  19. let {
  20. brand,
  21. model,
  22. system
  23. } = systemInfo;
  24. if (brand || model) {
  25. deviceId = brand + model;
  26. }
  27. if (system && 'string' === typeof (system)) {
  28. systemVersion = system;
  29. }
  30. }
  31. let params = {
  32. language: 'cn', //语言参数
  33. deviceType: 'weapp', //接口调用来源参数
  34. deviceId: deviceId, //设备唯一标识码
  35. apiVersion: '1.0.3', //api版本号
  36. systemVersion: systemVersion, //操作系统及版本号
  37. version: "2.0.0", // 线上版本号
  38. };
  39. let loginUserInfo = util.getStorageSync('userInfo');
  40. if (loginUserInfo) {
  41. let token = loginUserInfo.token;
  42. if (token) {
  43. params.token = token; //用户登录凭证token
  44. }
  45. }
  46. return params;
  47. }
  48. /*参数签名*/
  49. const paramsSign = (params, url) => {
  50. let key = 'a2e947b603f8a95ce24db5a3c86';
  51. if ((url && url.indexOf(`${api}/common`) === 0) || url.indexOf('/common/upload/files') !== -1) {
  52. key = 'b15681f74461af9642ab5356fba7962b';
  53. }
  54. if (url == `${api}/java/order/source-list`) {
  55. key = '93f725a07423fe1c889f448b33d21f46'
  56. }
  57. let allKeys = [],
  58. paramsLower = {},
  59. sArr = [],
  60. res = '';
  61. for (let k in params) {
  62. let kLower = k;
  63. allKeys.push(kLower);
  64. paramsLower[kLower] = "";
  65. if ((params[k] && params[k] !== "undefined") || params[k] === 0) {
  66. paramsLower[kLower] = params[k];
  67. }
  68. }
  69. allKeys.sort();
  70. allKeys.forEach((v, i, a) => {
  71. sArr.push(`${v}=${paramsLower[v]}`);
  72. });
  73. sArr.push(`key=${key}`);
  74. res = sArr.join('&');
  75. res = md5(res);
  76. return res.toLowerCase();
  77. }
  78. /**
  79. * 网络请求对象
  80. */
  81. const net = {
  82. //isDealFail是否手动处理异常,true or false
  83. req: function (params, isDealFail) { //get或post请求
  84. if (!params) {
  85. wx.showToast({
  86. title: '请设置请求参数',
  87. icon: 'none',
  88. duration: 2000
  89. });
  90. return new Promise((resolve, reject) => {
  91. reject();
  92. });
  93. }
  94. if (!params.url) {
  95. wx.showToast({
  96. title: '请设置请求url',
  97. icon: 'none',
  98. duration: 2000
  99. });
  100. return new Promise((resolve, reject) => {
  101. reject();
  102. });
  103. }
  104. let promise = new Promise((resolve, reject) => {
  105. params.data = Object.assign({}, commonParams(), params.data);
  106. params.data.signToken = paramsSign(params.data, params.url);
  107. wx.request({
  108. url: params.url,
  109. data: params.data || null,
  110. header: {
  111. 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
  112. },
  113. method: params.method || 'POST',
  114. dataType: params.dataType || 'json',
  115. success: function (res) {
  116. res = res.data;
  117. let {
  118. code,
  119. msg
  120. } = res;
  121. if (0 === code) { //ok
  122. resolve(res);
  123. } else if (CODE_NOT_LOGIN === code) { //未登录
  124. DEBUG && console.log(`Request for ${params.url} exception.--->${JSON.stringify(msg)}`);
  125. wx.clearStorage();
  126. wx.showToast({
  127. title: '您的用户信息已失效,请重新登录操作',
  128. icon: 'none',
  129. duration: 2000,
  130. success: () => {
  131. wx.reLaunch({
  132. url: '/pages/loginways/loginways'
  133. });
  134. },
  135. });
  136. } else {
  137. DEBUG && console.log(`Request for ${params.url} exception.--->${JSON.stringify(msg)}`);
  138. if (isDealFail) {
  139. reject(res);
  140. } else {
  141. wx.showToast({
  142. title: msg || 'error',
  143. icon: 'none',
  144. duration: 2000
  145. });
  146. }
  147. }
  148. },
  149. fail: function (e) {
  150. DEBUG && console.log(`Request for ${params.url} fail.--->${JSON.stringify(e)}`);
  151. if (isDealFail) {
  152. reject(e);
  153. } else {
  154. wx.showToast({
  155. title: (e && e.errMsg) || '',
  156. icon: 'none',
  157. duration: 2000
  158. });
  159. }
  160. },
  161. complete: function (res) {
  162. DEBUG && console.log(`Request for ${params.url} complete.--->${JSON.stringify(res)}`);
  163. }
  164. });
  165. });
  166. return promise;
  167. },
  168. uploadFile: function (params, isDealFail) { //get或post请求
  169. if (!params) {
  170. wx.showToast({
  171. title: '请设置请求参数',
  172. icon: 'none',
  173. duration: 2000
  174. });
  175. return new Promise((resolve, reject) => {
  176. reject();
  177. });
  178. }
  179. if (!params.url) {
  180. wx.showToast({
  181. title: '请设置请求url',
  182. icon: 'none',
  183. duration: 2000
  184. });
  185. return new Promise((resolve, reject) => {
  186. reject();
  187. });
  188. }
  189. if (!params.filePath || !params.filePath.length) {
  190. wx.showToast({
  191. title: '请设置文件资源的路径',
  192. icon: 'none',
  193. duration: 2000
  194. });
  195. return new Promise((resolve, reject) => {
  196. reject();
  197. });
  198. }
  199. let promise = new Promise((resolve, reject) => {
  200. params.data = Object.assign({}, commonParams(), params.data);
  201. params.data.signToken = paramsSign(params.data, params.url);
  202. wx.uploadFile({
  203. url: params.url,
  204. filePath: params.filePath,
  205. name: 'files[]',
  206. formData: params.data,
  207. header: {
  208. 'content-type': 'multipart/form-data'
  209. },
  210. method: 'POST',
  211. success: function (res) {
  212. let data = res.data;
  213. if (typeof data == 'string' && data.constructor == String) {
  214. data = JSON.parse(data);
  215. }
  216. let {
  217. code,
  218. msg
  219. } = data;
  220. if (0 === parseInt(code)) { //ok
  221. resolve(data);
  222. } else if (CODE_NOT_LOGIN === code) { //未登录
  223. DEBUG && console.log(`Request for ${params.url} exception.--->${JSON.stringify(msg)}`);
  224. wx.clearStorage();
  225. wx.showToast({
  226. title: '您的用户信息已失效,请重新登录操作',
  227. icon: 'none',
  228. duration: 2000,
  229. success: () => {
  230. wx.reLaunch({
  231. url: '/pages/loginways/loginways'
  232. });
  233. },
  234. });
  235. } else {
  236. DEBUG && console.log(`Request for ${params.url} exception.--->${JSON.stringify(msg)}`);
  237. if (isDealFail) {
  238. reject(data);
  239. } else {
  240. wx.showToast({
  241. title: msg || 'error',
  242. icon: 'none',
  243. duration: 2000
  244. });
  245. }
  246. }
  247. },
  248. fail: function (e) {
  249. DEBUG && console.log(`Request for ${params.url} fail.--->${JSON.stringify(e)}`);
  250. if (isDealFail) {
  251. reject(e);
  252. } else {
  253. wx.showToast({
  254. title: (e && e.errMsg) || '',
  255. icon: 'none',
  256. duration: 2000
  257. });
  258. }
  259. },
  260. complete: function (res) {
  261. DEBUG && console.log(`Request for ${params.url} complete.--->${JSON.stringify(res)}`);
  262. }
  263. });
  264. });
  265. return promise;
  266. },
  267. }
  268. module.exports = {
  269. commonParams,
  270. paramsSign,
  271. net
  272. };