时空网前端
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.

106 lines
2.7 KiB

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