uni-app 微信解绑提示缺失业务参数

结论

只有 uni-app 当前是登陆状态
且当前登陆状态是通过微信认证登陆 uni-app 时
uni-app 微信解绑或退出才需调用 uni-app 提供的plus.oauth.AuthService.logout()Api

解决方案

手机号登陆解绑不调用plus.oauth.AuthService.logout()

发现问题

近日与前端调试 uni-app 应用时
发现登陆应用后再点击微信解绑会发生如下错误

{
    "code": -7,
    "message": "业务参数配置缺失,http://ask.dcloud.net.cn/article/282"
}

uni-app 官网错误描述

根据提示信息和链接http://ask.dcloud.net.cn/article/282可找到 uni-app 官网的详细信息
如下截图
在这里插入图片描述

初次排查

据上述信息可知是微信移动应用相关的信息缺失导致的
但根据前端代码的检查并未发现有信息缺失
微信登陆功能都是正常的
后来重复测试了这个 Bug 并不是一定会出现
事实也印证了这一点
前端在微信解绑时会调用 plus.oauth.AuthService.logout()
参考uni-app plus.oauth.AuthService 文档
继续和前端的交流中得知这个是 uni-app 框架要求的必须调用的
如微信移动应用登陆时需要调用 plus.oauth.AuthService.authorize()
但是根据微信移动应用-微信登陆功能可知其并不要求前端需要和微信服务器发送任何请求
参考微信移动应用-微信登陆功能文档
所以觉得解决方法就是微信解绑时不要去调用plus.oauth.AuthService.logout()
但是前端非常肯定是需要调用的
根据 uni-app 的 Api 可知前端的这一说法还是有理有据的
毕竟 uni-app 不可能平白无故的会多提供这些 Api
有必要去认真考证一下
打消双方的疑虑
于是大家一起去uni-app 的问答社区搜索
但是搜索一圈下来并没有找到想要的答案
由于还有其它优先级比较高的任务
所以大家都暂时搁置了这个 Bug

进一步排查

次日
找前端要了安装包
首先在模拟器中用手机号登陆运行
同时打开抓包工具 Charles
走了一遍 Bug 用例
确实重现了 Bug
发现并没有发出任何相关的网络请求
同时又操作了几遍
发现依旧如此
然后用微信认证登陆
结果可以正常解绑微信
基本确定问题是 uni-app 的内部原理导致的
基于此打算看下 uni-app 的源代码
根据 uni-app plus.oauth.AuthService 文档可知相关类接口是 AuthService

查看相关 Android 源代码

Andoird 源代码地址https://github.com/dcloudio/H5P.Android.git
十分幸运代码库分支主要就是 master
没有 tag
所以直接切此分支即可
相关类BaseOAuthService.javaWeiXinOAuthService.java
logout:前端调用plus.oauth.AuthService.logout()对应的 Android 接口
在这里插入图片描述

super.logout:首先调用父类的 logout 代码
在这里插入图片描述

super.hasGeneralError、super.hasFullConfigData:实际传递错误的调用点
在这里插入图片描述
hasFullConfigData:实际判断是否存在微信信息的调用点
可知 appId、appSecret 只有调用 initMetaData 或 initAuthOptions 方法才设置
而上述2个方法只有被 login、authorize 调用
login 对应前端调用plus.oauth.AuthService.login()
authorize 对应前端调用plus.oauth.AuthService.authorize()
在这里插入图片描述
在这里插入图片描述

removeToken:清楚绑定的变量
在这里插入图片描述

makeResultJSONObject:创建返回结果信息给前端
在这里插入图片描述
onLogoutFinished:返回结果给前端
在这里插入图片描述

查看相关 IOS 源代码

由于未学习过 Objective-C
所以临时去菜鸟教程网站上简单过了一遍 Objective-C 的语法
IOS 源代码地址https://github.com/dcloudio/H5P.iOS.git
十分幸运代码库分支主要就是 master
虽然有 tag
但是 tag 不多
所以直接切此分支即可
相关类PGWXOAuth.mPGWXOpenApi.m
logout:前端调用plus.oauth.AuthService.logout()对应的 IOS 接口
在这里插入图片描述

getWXAPI:此处是关键,和 Android 代码不同的是这里不会判断是否为空
在这里插入图片描述

cancelPreConn:取消之前的连接,并释放连接资源
在这里插入图片描述

clear:实例变量设置为 nil,nil 类似于 Java 的 null
在这里插入图片描述

executeJSSucessCallback:获取 OAuth 用户信息,构造状态为OK的返回信息
在这里插入图片描述

getOauthInfo:主要是构造用户信息字典,字典类似于 Java 中的 Map
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值