我写了个公共的请求api获取授权的类,因为session_key是没有失效时间的,服务端的token时间是有访问一直在累加的,所以通过getUserProfile获取encryptedData的时候发现session_key 已经解不了这串数据了,这时候服务端返回401触发api类重新获取session_key 再次请求发现也解不了,感觉可能是getUserProfile获取数据时的session_key在重新wx.login的时候已经变化了
import { Token } from 'token.js';
import { Config } from 'config.js';
class Base {
constructor() {
"use strict";
this.baseRestUrl = Config.apiHost;
}
//http 请求类, 当noRefech为true时,不做未授权重试机制
request(params, noRefetch) {
var _self = this,
url = this.baseRestUrl + params.url;
if (!params.type) {
params.type = 'GET';
}
/*不需要再次组装地址*/
if (params.setUpUrl == false) {
url = params.url;
}
return wx.request({
url: url,
data: params.data,
method: params.type,
header: {
'content-type': 'application/json',
'token': wx.getStorageSync('token')
},
enableHttp2: true,
success: function (res) {
// 判断以2(2xx)开头的状态码为正确
// 异常不要返回到回调中,就在request中处理,记录日志并showToast一个统一的错误即可
var code = res.statusCode.toString();
var startChar = code.charAt(0);
if (startChar == '2') {
params.sCallback && params.sCallback(res.data);
} else {
//console.log('code' + code);
if (code == '401') {
if (!noRefetch) {
_self._refetch(params);
}
}
if (!noRefetch) {
_self._processError(res);
params.eCallback && params.eCallback(res.data);
}
}
},
fail: function (err) {
//wx.hideNavigationBarLoading();
_self._processError(err);
// params.eCallback && params.eCallback(err);
}
});
}
_processError(err) {
console.log(err);
}
needGetUserInfo(callback, eCallback) {
var param = {
url: '/mp/auth/needGetUserInfo',
type: 'POST',
data: {},
sCallback: function (data) {
callback && callback(data);
},
eCallback: eCallback
}
this.request(param);
}
upUserInfo(pdata, callback, eCallback) {
var param = {
url: '/mp/auth/UserProfile',
type: 'POST',
data: pdata,
sCallback: function (data) {
callback && callback(data);
},
eCallback: eCallback
}
this.request(param);
}
_refetch(param) {
var token = new Token();
token.getTokenFromServer((token) => {
this.request(param, true);
});
}
/*获得元素上的绑定的值*/
getDataSet(event, key) {
return event.currentTarget.dataset[key];
};
};
export { Base };
“使用接口 wx.checkSession可以校验 session_key 是否有效,从而避免小程序反复执行登录流程,具体请参考:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html”