request.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /** 封装网络请求 */
  2. /** app的globalData中配置请求的基本设置
  3. * api_mode:API的调用环境,prod-生产模式,dev-开发模式
  4. * base_url:API域名配置
  5. */
  6. import md5 from 'js-md5'
  7. import { randomString } from 'util'
  8. import * as qs from '../lib/index.js'
  9. const app=getApp();
  10. import { checkToken } from 'checkToken.js'
  11. function server(options){
  12. let config={
  13. baseUrl:app.globalData.api_domain.api_seller,
  14. method:'POST',
  15. headers: {'content-type': 'application/x-www-form-urlencoded'},
  16. needToken:false,
  17. loading:false,
  18. ...options
  19. }
  20. return new Promise((resolve,reject)=>{
  21. /** 配置加载样式 */
  22. if(config.loading!==false){
  23. wx.showLoading({
  24. title: '加载中...',
  25. mask:true
  26. })
  27. }
  28. /**  设置header传递 uuid */
  29. let uuid=app.globalData.uuid
  30. config.headers['uuid']=uuid
  31. /** 是否需要传递授权参数 */
  32. let authinfo = app.globalData.authorInfo
  33. if(authinfo&&authinfo.access_token&&config.needToken){
  34. if (app.globalData.api_mode==='prod'){
  35. const uid = authinfo.uid
  36. const nonce = randomString(6);
  37. const timestamp = parseInt(new Date().getTime() / 1000);
  38. const sign = md5(uid + nonce + timestamp + authinfo.access_token);
  39. const _params = { uid, nonce, timestamp, sign };
  40. let params = config.params || {};
  41. params = { ...params, ..._params };
  42. config.params = params
  43. }
  44. else{
  45. config.headers['Authorization']=authinfo.access_token;
  46. }
  47. }
  48. if ((config.method === 'put' || config.method === 'post') && config.headers['Content-Type'] !== 'application/json'){
  49. config.data = qs.stringify(config.data, { arrayFormat: 'repeat' })
  50. }
  51. let query=''
  52. if(config.params){
  53. query='?'+qs.stringify(config.params)
  54. }
  55. wx.request({
  56. url: `${config.baseUrl}${config.url}${query}`,
  57. method:config.method,
  58. header:config.headers,
  59. data:config.data,
  60. success: function (res) {
  61. if(res.statusCode===403){
  62. console.log('statusCode',res.statusCode)
  63. //退出登陆,跳转到授权页面
  64. // reject({ error: '授权已过期', code: 403})
  65. wx.removeStorageSync('authorInfo')
  66. wx.removeStorageSync('sellerShop')
  67. wx.removeStorageSync('login_result')
  68. app.globalData.authorInfo={}
  69. wx.redirectTo({
  70. url: '/pages/login/login',
  71. })
  72. return
  73. } else if (res.statusCode ===500){
  74. reject(res.data)
  75. return
  76. }else if (res.statusCode !== 200) {
  77. reject(res.data);
  78. return
  79. }
  80. resolve(res.data);
  81. },
  82. fail:function(res){
  83. reject({ error: '网络错误', code: 0 });
  84. },
  85. complete: function (res) {
  86. if(config.loading!==false){
  87. wx.hideLoading()
  88. }
  89. // complete
  90. }
  91. })
  92. })
  93. }
  94. export default function request(options){
  95. console.log(options.url)
  96. if (/passport\/mini-program\/smscode-login|passport\/mini-program\/smslogin\/*|passport\/mini-program\/auto-login|passport\/mini-program\/seller-login|passport\/mini-program\/token|passport\/mini-program\/bind-user|passport\/mini-program\/register-bind|passport\/mini-program\/formid|passport\/mini-program\/decryptUserinfo/.test(options.url)){
  97. console.log('urltest')
  98. return server(options)
  99. }
  100. return new Promise((resolve, reject) => {
  101. checkToken().then(() => {
  102. server(options).then(resolve).catch(reject)
  103. }).catch(err=>{
  104. wx.redirectTo({
  105. url: '/pages/login/login',
  106. })
  107. reject(err)
  108. })
  109. })
  110. }