球星卡微信小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.6 KiB

  1. import Vue from 'vue';
  2. var that = new Vue();
  3. let sha1 = require("./sha1.min.js");
  4. let SparkMD5 = require("./SparkMD5.js"); // 签名加密js文件
  5. function getsign(params) {
  6. let s_data = "";
  7. let keys = [];
  8. for (const key in params) {
  9. if (params.hasOwnProperty(key)) {
  10. const value = params[key];
  11. keys.push(key);
  12. }
  13. }
  14. let arr = [];
  15. keys.sort();
  16. for (let i = 0; i < keys.length; i++) {
  17. let k = keys[i];
  18. let v = params[k];
  19. arr.push(k + '=' + v);
  20. }
  21. s_data = arr.join('&');
  22. let sign = sha1(SparkMD5.hash(s_data) + 'Leadfyy@123');
  23. params.sign = sign;
  24. return params;
  25. }
  26. export default function request(options){
  27. let { url, data, method, showLoading } = options;
  28. if(typeof data === 'undefined'){
  29. data = {};
  30. }
  31. return new Promise((resolve, reject) => {
  32. // 绑定this
  33. // 获取当前请求来自哪个页面
  34. let pages = getCurrentPages();
  35. data.create_page = pages[pages.length - 1].route;
  36. // 当前请求时间戳
  37. if (!data.timestamp) {
  38. data.timestamp = Math.round(new Date().getTime() / 1000);
  39. }
  40. // 当前请求随机数
  41. if(!data.rand){
  42. data.rand = Math.round(Math.random() * 1000000);
  43. }
  44. // 当前请求来自的平台
  45. data.platform = 'wxmini';
  46. // #ifdef APP-PLUS
  47. data.platform = 'app'; // 来自app平台,其他平台写法类似
  48. // #endif
  49. // 当前小程序版本号
  50. // data.version = that.API.VERSION;
  51. // 获取设备唯一deviceId,如果没有,自动生成一个
  52. let sysInfo = uni.getSystemInfoSync();
  53. if(typeof sysInfo.deviceId == 'undefined'){
  54. let deviceId = uni.getStorageSync('deviceId');
  55. if(deviceId){
  56. sysInfo.deviceId = deviceId;
  57. }else{
  58. let date_time = String(new Date().getTime());
  59. let md5_deviceId = SparkMD5.hash(date_time);
  60. uni.setStorageSync('deviceId', md5_deviceId);
  61. sysInfo.deviceId = md5_deviceId;
  62. }
  63. }
  64. if (sysInfo) {
  65. data.device_info = JSON.stringify(sysInfo);
  66. }
  67. // 判断传入用户token和id
  68. let userinfo = uni.getStorageSync('userinfo') || {};
  69. if(userinfo && userinfo.token && !data.token){
  70. data.token = userinfo.token;
  71. }
  72. if(userinfo && userinfo.id && !data.user_id){
  73. data.user_id = userinfo.id;
  74. }
  75. // 获取页面options参数
  76. let _mergeParam = that._mergeParam;
  77. for (let _keyVar in _mergeParam) {
  78. let _k = _keyVar
  79. if (data[_k]) {
  80. _k = '_' + _k;
  81. }
  82. data[_k] = _mergeParam[_keyVar];
  83. }
  84. // 生成sign
  85. getsign(data);
  86. console.log(url, data);
  87. let httpData = method == 'get' ? {params: data} : data;
  88. // 发起请求
  89. uni.$u.http[method](url, httpData).then(res => {
  90. resolve(res);
  91. }).catch(err => {
  92. reject(err);
  93. })
  94. });
  95. }