小程序上线之后,报警邮件一直报错。但是用户并没有反馈无法使用。说明是几个不重要的接口在未登录的情况下报错了,而且只有新用户会遇到
The resource owner or authorization server denied the request. {"exception":"[object] (League\\OAuth2\\Server\\Exception\\OAuthServerException(code: 9): The resource own
er or authorization server denied the request. at /home/zhongwei/work/sd-sea-travel/vendor/league/oauth2-server/src/Exception/OAuthServerException.php:168)
首页无法测试。由用户个人中心测试,主要测试 app.js 中的 onLaunch - login 是否能在用户第一次打开的是非 index 页也能够被调用。先将 app.json 中的用户中心页面放到第一的位置,取代 index.
果然效果很明显
- login
- get_user_info
- orders_stat
三个接口被同时调用,所以结果是
- login 返回结果正常
- get_user_info, orders_stat 均报 401 未授权错误,原因是这三个请求是几乎同时发出的。这两个接口并没有用上 login 成功返回的登录态
再次刷新页面就没问题了。
如何解决第一次访问报错的问题
这个问题必须解决,原因是,用户可能通过其他人分享的商品详情页进入小程序。
而详情页包含了分销关系记录的逻辑,这些接口都是登录之后才能调用的。
- 未登录。先登录再发请求
- 已登录。直接请求
微信小程序的 wx.request 奇葩之处
状态码 401 被归类在 success 之内。
access_token 失效的处理
例如,后台清理了所有 access_token, 或者 access_token 失效,同样会报 401 错误。
合理的做法是,在每个 api 调用失败时(status code 为 401),调用一次 401。
但是这个做法太麻烦,目前也没有想到更简单的做法。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式