request.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import apiConfig from "../config/api.js";
  2. import gameConfig from "../config/game.js";
  3. import sdkConfig from "../config/sdk.js";
  4. import { getSystem, getStorage } from "../utils/index.js";
  5. import { sortObj } from "./index.js";
  6. import SdkLoginReUserInfoModel from "../model/SdkLoginReUserInfoModel";
  7. import IpInfoModel from "../model/IpInfoModel";
  8. import md5 from "../lib/md5";
  9. class request {
  10. // 统一API请求入口
  11. async api(type, params, method = "post") {
  12. try {
  13. let wxNetworkInfo;
  14. const wxSystemInfo = await getSystem();
  15. // 获取启动query参数
  16. const query = getStorage("urlQuery");
  17. const rySdkConfig = getStorage("rySdkConfig");
  18. // 组装公共参数
  19. //启动参数有渠道id和site_id的按启动参数,没有则按系统类型对应的渠道id和site_id,游戏id按系统类型对应的游戏id
  20. params.config_id = rySdkConfig.config_id; //配置id
  21. params.platform = wxSystemInfo.platform;
  22. params.os = wxSystemInfo.system;
  23. params.model = wxSystemInfo.model;
  24. params.device_brand = wxSystemInfo.brand;
  25. // params.mnos = wxNetworkInfo.networkType;
  26. //游戏版本,初始化的时候透传进来
  27. params.app_version = rySdkConfig.app_version;
  28. params.queryStr = query.queryStr;
  29. // let ipinfo = IpInfoModel.getInstance().getStorage();
  30. // params.ipv4 = ipinfo.ipv4;
  31. // params.ipv6 = ipinfo.ipv6;
  32. let loginInfo = SdkLoginReUserInfoModel.getInstance().getStorage();
  33. params.access_token = loginInfo.access_token;
  34. (params.username = loginInfo.username), (params.uid = loginInfo.uid);
  35. params.openid = loginInfo.openid;
  36. params.mtype = gameConfig.MTYPE;
  37. params.uuid = sdkConfig.DEVICE_NO;
  38. params.imei = sdkConfig.DEVICE_NO;
  39. params.sdk_version = sdkConfig.SDK_VERSION;
  40. params.sdk_version_code = sdkConfig.SDK_VERSION_CODE;
  41. params.agent_id =
  42. query.agent_id ||
  43. ("ios" === wxSystemInfo.platform
  44. ? gameConfig.IOS_AGENT_ID
  45. : gameConfig.AGENT_ID);
  46. params.site_id =
  47. query.site_id ||
  48. ("ios" === wxSystemInfo.platform
  49. ? gameConfig.IOS_SITE_ID
  50. : gameConfig.SITE_ID);
  51. if (!params.appid) {
  52. params.appid = loginInfo.appid;
  53. }
  54. params.launchScene = getStorage("launchScene");
  55. // 组装请求接口地址
  56. const url = type in apiConfig ? apiConfig[type] : false;
  57. if (url === false) {
  58. return Promise.reject("type error");
  59. }
  60. //common类接口统一加密
  61. if (type === "COMMON") {
  62. params = request.addCommonSign(params);
  63. }
  64. if (type === "WX_API") {
  65. params = request.addCommonSign(params);
  66. }
  67. // 发起请求
  68. const res = await this.doRequest(url, method, params);
  69. return Promise.resolve(res);
  70. } catch (error) {
  71. return Promise.reject(error);
  72. }
  73. }
  74. doRequest(url, method, params) {
  75. return new Promise((resolve, reject) => {
  76. // 发起请求
  77. wx.request({
  78. url: url,
  79. header: {
  80. "Content-Type": "application/x-www-form-urlencoded",
  81. },
  82. method: method,
  83. data: params,
  84. // 成功响应
  85. success: (res) => {
  86. if (res.statusCode === 200) {
  87. if (res.data.ret === 1 || res.data.code === 1) {
  88. resolve(res.data.info);
  89. } else {
  90. reject({
  91. code: res.data.ret,
  92. msg: res.data.msg,
  93. });
  94. }
  95. } else {
  96. reject({
  97. code: -100,
  98. msg: `network error ${res.statusCode}`,
  99. });
  100. }
  101. },
  102. fail: (error) => {
  103. reject({
  104. code: -101,
  105. msg: error.errMsg,
  106. });
  107. },
  108. });
  109. });
  110. }
  111. /**
  112. * 通用类加密
  113. * @param params
  114. */
  115. static addCommonSign(params) {
  116. const rySdkConfig = getStorage("rySdkConfig");
  117. if (!params.time) {
  118. params.time = parseInt(new Date().getTime() / 1000);
  119. }
  120. let newData = sortObj(params);
  121. let signStr = "";
  122. for (let k in newData) {
  123. if (k === "sign") {
  124. continue;
  125. }
  126. if (newData[k] === "") {
  127. continue;
  128. }
  129. signStr = signStr + k + "=" + newData[k] + "&";
  130. }
  131. signStr = signStr.substring(0, signStr.length - 1) + rySdkConfig.config_id;
  132. // console.log('加密原串:'+signStr);
  133. params.sign = md5(signStr);
  134. return params;
  135. }
  136. }
  137. export default new request();