框架类型 | 问题类型 | 操作系统 | 操作系统版本 | 手机型号 | 微信版本 |
---|---|---|---|---|---|
小程序 | Bug | Android | 8.0.0 | HUAWEI NXT-TL00 | 不清楚 |
不是小程序就普通的客户端三方登录,极少数用户出现登录失败的情况
/**
* 获取微信的 access_token
*
* @param appId 应用唯一标识,在微信开放平台提交应用审核通过后获得
* @param code 像微信请求登录权限后获得的 code
* @return 返回的响应 WXLoginResponse
*/
@GET("https://api.weixin.qq.com/sns/oauth2/access_token" +
"?grant_type=authorization_code")
Flowable<WXLoginResponse> getWechatToken(@Query("secret") String wx_secret, @Query("appid") String appId,
@Query("code") String code);
//微信登录
@Override
public void getWxInfo(String code) {
mRxHelper.getFlowable(mNetApi.getWechatToken(LoginUtils.WX_SECRET, LoginUtils.WX_APP_ID, code), mLifecycleProvider)
.subscribe(new ResponseSubscriber<WXLoginResponse>() {
@Override
public void onSuccess(WXLoginResponse response) {
// 保存微信登录过期时间:
// expiresTime:Token 有效截止时间
// 取出 expiresTime 之后减去 System.currentTimeMillis() 然后除以1000,小于0说明已经过期
// * 现在没有用到微信或 QQ 的分享功能,暂不需要使用token,暂不保存
// * LoginUtils.get().setExpireTime(LoginUtils.TYPE_WX, response.getExpires_in());
LoginUtils.get().setLoginType(LoginUtils.TYPE_WX); // 设置登录类型为微信
// 通过微信返回的 id 和 token 获得后台服务器账号的 openId 和 accessToken
account = response.getOpenid();
String id = response.getOpenid();
String token = response.getAccess_token();
mSpHelper.putString(SpHelper.OPEN_ID, id);
mSpHelper.putString(SpHelper.ACCESS_TOKEN, token);
Swatch5LogUtil.getInstance().writeLog("微信登录授权请求成功id:"+id+",token:"+token+",account:"+account, Swatch5LogUtil.LOGTYPE.LOG_THIRD_LOGIN);
getUserInfo(id, token, LoginUtils.TYPE_WX);
}
@Override
public void onFailure(WXLoginResponse response) {
super.onFailure(response);
Swatch5LogUtil.getInstance().writeLog("微信登录授权请求失败:"+response.getCode()+","+response.getMsg()+","+response.toString(), Swatch5LogUtil.LOGTYPE.LOG_THIRD_LOGIN);
}
@Override
public void onError(Throwable e) {
super.onError(e);
Swatch5LogUtil.getInstance().writeLog("微信登录授权请求异常:"+e.getMessage(), Swatch5LogUtil.LOGTYPE.LOG_THIRD_LOGIN);
}
});
}
这是用户当时手机的网络请求日志