ReqBase.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. const req = require("../utils/request.js");
  2. // const env = {
  3. // NODE_ENV: 'dev',
  4. // dev: { //测试环境
  5. // apiUrl: 'https://apitest.zhiqiyun.com',
  6. // },
  7. // product: { //生产环境
  8. // apiUrl: 'https://apimall.zhiqiyun.com',
  9. // },
  10. // lo: { //生产环境
  11. // apiUrl: 'http://192.168.110.180:8078',
  12. // }
  13. // }
  14. const env = {
  15. NODE_ENV: req.env.NODE_ENV=='dev'?'dev':req.env.NODE_ENV=='prd'?'product':'lo',
  16. dev: { //测试环境
  17. apiUrl: 'https://apitest.zhiqiyun.com',
  18. },
  19. product: { //生产环境
  20. apiUrl: 'https://apimall.zhiqiyun.com',
  21. },
  22. lo: { //生产环境
  23. apiUrl: 'http://192.168.110.180:8078',
  24. }
  25. }
  26. class ReqBase {
  27. /**
  28. * 构造函数
  29. * @param {Object} options 接口参数,appId 为必选参数
  30. */
  31. constructor(options) {
  32. console.log('ReqBase sdk:', options);
  33. if (!options.appId) {
  34. throw Error('appId值不能为空');
  35. }
  36. this.appId = options.appId;
  37. this.getSystemInfo();
  38. }
  39. /*
  40. * 获取token
  41. */
  42. getToken(url, success) {
  43. let token = '';
  44. var dataP = {};
  45. var header = {};
  46. token = this.getStorage('ACTION_TOKEN');
  47. dataP = {};
  48. header.appId = this.appId;
  49. header['content-type'] = 'application/json;charset=UTF-8';
  50. if (token) {
  51. header.authorityToken = token;
  52. success.call(this, token);
  53. return false;
  54. } else {
  55. this.loadToken(header, dataP, data => {
  56. success.call(this, data);
  57. });
  58. }
  59. }
  60. loadToken(header, dataP, success) {
  61. let that = this
  62. uni.request({
  63. url: env[env.NODE_ENV].apiUrl + '/api/access_token',
  64. data: dataP,
  65. method: 'get',
  66. header: header,
  67. success(json) {
  68. if (json.statusCode !== 200) {
  69. console.log('ACTION_TOKEN 获取失败>>>>>', json.data.message);
  70. return;
  71. }
  72. var token = json.data.data;
  73. that.setStorage('ACTION_TOKEN', token);
  74. success.call(that, token);
  75. },
  76. fail(res) {
  77. console.log('ACTION_TOKEN 获取失败>>>>>', res);
  78. }
  79. })
  80. }
  81. clearValueEmpty(data) {
  82. let keyValue = {};
  83. for (let key in data) {
  84. let value = typeof data[key];
  85. if (value == 'string' && value) {
  86. if (data[key] != 'undefined' || data[key] != " " || data[key] != undefined || data[key] != null) {
  87. if (data[key] != '') {
  88. keyValue[key] = data[key];
  89. }
  90. }
  91. if (data[key] != '') {
  92. keyValue[key] = data[key];
  93. }
  94. } else if (value == 'number' && value != null) {
  95. keyValue[key] = data[key];
  96. } else if (value == 'boolean') {
  97. keyValue[key] = data[key];
  98. } else {
  99. if (data[key]) keyValue[key] = data[key];
  100. }
  101. }
  102. return keyValue;
  103. }
  104. /**
  105. * 公共请求
  106. *
  107. * @param {*} url 请求url
  108. * @param {*} data 请求参数
  109. * @param {*} method 请求方法
  110. * @param {*} success 成功函数
  111. * @param {*} isLoad 是否显示加载提示
  112. */
  113. baseRequest(url, data, method, success) {
  114. var header = {};
  115. var deviceInfo = this.getStorage('deviceInfo');
  116. // #ifdef APP-PLUS
  117. var sysMac = this.getStorage('sysMac');
  118. // #endif
  119. var device_info = {};
  120. if (deviceInfo) {
  121. data.browser = deviceInfo.browserName;
  122. data.browserVersion = deviceInfo.browserVersion;
  123. data.manufacturer = deviceInfo.deviceBrand;
  124. data.model = deviceInfo.deviceModel;
  125. data.deviceId = deviceInfo.deviceId;
  126. data.os = deviceInfo.osName;
  127. data.osVersion = deviceInfo.osVersion;
  128. // #ifdef APP-PLUS
  129. if (sysMac) {
  130. data.sysMac = sysMac;
  131. }
  132. // #endif
  133. }
  134. var dataP = {
  135. uri: url,
  136. code: 'sys.behavior.service',
  137. body: data
  138. }
  139. this.getToken(url, token => {
  140. header.authorityToken = token;
  141. header.appId = this.appId;
  142. header['content-type'] = 'application/json;charset=UTF-8';
  143. uni.request({
  144. url: env[env.NODE_ENV].apiUrl + '/api/v3/application/public',
  145. data: this.clearValueEmpty(dataP),
  146. method: method,
  147. header: header,
  148. success(json) {
  149. if (json.statusCode !== 200) {
  150. console.log('action sdk error:', json.data.message);
  151. success.call(this, -1);//接口异常返回-1,不影响其他应用
  152. return;
  153. }
  154. if (json.data.code !== 0) {
  155. console.log('action sdk error:', json.data.msg);
  156. success.call(this, -1);//接口异常返回-1,不影响其他应用
  157. return;
  158. }
  159. let dataR = json.data.data;
  160. if (typeof dataR === 'string' && dataR.indexOf("{") === 0) {
  161. dataR = JSON.parse(dataR);
  162. }
  163. success.call(this, dataR);
  164. },
  165. fail() {
  166. }
  167. })
  168. })
  169. }
  170. /**GET请求 */
  171. getRequest(url, data, success) {
  172. this.baseRequest(url, data, 'get', success);
  173. }
  174. /**POST请求 */
  175. postRequest(url, data, success) {
  176. this.baseRequest(url, data, 'post', success);
  177. }
  178. setStorage(key, value, expire = 0) {
  179. let obj = {
  180. data: value, //存储的数据
  181. time: Date.now() / 1000, //记录存储的时间戳
  182. expire: expire //记录过期时间,单位秒
  183. }
  184. uni.setStorageSync(env.NODE_ENV + "_" + key, JSON.stringify(obj))
  185. }
  186. getStorage(key) {
  187. let val = uni.getStorageSync(env.NODE_ENV + "_" + key)
  188. if (!val) {
  189. return null
  190. }
  191. try {
  192. val = JSON.parse(val)
  193. if (val.expire && Date.now() / 1000 - val.time > val.expire) {
  194. this.removeStorage(key)
  195. return null
  196. } else {
  197. return val.data
  198. }
  199. } catch (e) {
  200. return uni.getStorageSync(env.NODE_ENV + "_" + key)
  201. }
  202. return uni.getStorageSync(env.NODE_ENV + "_" + key)
  203. }
  204. removeStorage(key) {
  205. return uni.removeStorageSync(env.NODE_ENV + "_" + key);
  206. }
  207. getSystemInfo() {
  208. var that = this;
  209. console.log('getSystemInfo>>>>>>>');
  210. uni.getSystemInfo({
  211. success: function(res) {
  212. that.setStorage('deviceInfo', res);
  213. // #ifdef APP-PLUS
  214. that.getDeviceMac();
  215. // #endif
  216. }
  217. });
  218. };
  219. getDeviceMac() {
  220. var deviceMac = ""
  221. if (this.isAndroidSys()) {
  222. var net = plus.android.importClass("java.net.NetworkInterface");
  223. var wl0 = net.getByName('wlan0');
  224. var macByte = wl0.getHardwareAddress();
  225. deviceMac = '';
  226. for (var i = 0; i < macByte.length; i++) {
  227. var tmp = "";
  228. var num = macByte[i];
  229. if (num < 0) {
  230. tmp = (255 + num + 1).toString(16);
  231. } else {
  232. tmp = num.toString(16);
  233. }
  234. if (tmp.length == 1) {
  235. tmp = "0" + tmp;
  236. }
  237. deviceMac += tmp;
  238. }
  239. }
  240. this.setStorage('sysMac', deviceMac);
  241. };
  242. /**
  243. * 安卓环境
  244. */
  245. isAndroidSys() {
  246. return uni.getSystemInfoSync().platform == 'android';
  247. }
  248. }
  249. module.exports = ReqBase