当前位置:   article > 正文

微信小程序登陆踩坑记录_getphonenumberaction获取到的code会过期吗?

getphonenumberaction获取到的code会过期吗?

业务需求:

需要使用微信小程序授权获取手机号直接进行登陆操作,后端没有存session_key,也就是说我们服务端的登录态跟微信只有第一次登陆解析手机号的时候有关联,所以这里没有使用wx.checkSession去检查微信的登录态

涉及技术:

  1. wx.login(Object object)
    文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html

  2. phonenumber.getPhoneNumber
    文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/phonenumber/phonenumber.getPhoneNumber.html


那么坑来了!!

坑点:

getPhoneNumber只能在button按钮上触发,并且需要使用wx.login换取的code换取用户手机号。 每个code只能使用一次,code的有效期为5min

踩坑之路:
  1. 因为需要提前获取code,所以我一开始的时候为了确保在点击获取手机号按钮之前已经有code,于是在onLoad里面获取了code并且保存了下来。问题来了:用户如果5分钟后还没登陆呢??那我这个code不是永远登陆不上了吗?总不能在后端调用微信提示错误让用户再点一次吧,体验不好,下一个
  2. 把wx.login放在了onShow里面,这样每次到这个页面又可以更新code了哈哈哈,但是上线之后每天慌兮兮,毕竟在这个页面停留5分钟以上还是会过期,果然客户那边偶尔还是会提示登陆失败,还是得换方式。
  3. 既然官方说需要确保在登陆时再获取code(文档没看到,我也不知道哪里查的时候看到的),那我就写到获取手机号里面,用同步写法,这不就每次都是最新的code去换手机号了吗,于是我本地测了几次,清空缓存之后去获取并登陆,没有一点问题。本以为已经成功了,没想到让后端把自己的token删了之后重新登陆微信那边就解析失败了,再登陆一次又好了,时好时坏,还以为是后端缓存的问题,明明本地清了开发工具的缓存每次登陆都是好的,于是开始百度:
    果然有跟我一样的情况,在评论区看到了希望:在这里插入图片描述
    在这里插入图片描述
    链接:https://developers.weixin.qq.com/community/develop/doc/0004aa601f4c804fab798081e51400?_at=1572269536143&ivk_sa=1024320u
    原来需要在getPhoneNumber之前就获取code(我咋看文档啥都不知道呢??看来是我读文档的方式不对。。),在里面获取会导致session_key刷新,所以后端去请求微信的时候肯定就不匹配了,是我冤枉他了。
    4.那又回到了最初的远点,我又要提前去获取code,难道我要写定时器去刷新code。没登陆就一直刷新吗?这也太鬼畜了,于是我又去百度了:
    皇天不负百度人,我终于找到了一个大佬的回答:
    在这里插入图片描述
    链接:https://developers.weixin.qq.com/community/develop/doc/000a4646914540cfc23b55ca651000

终于,参照大佬的写法后,总算是解决这个心头大患,不会每天担惊受怕了真好(卑微Orz)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/641731
推荐阅读
相关标签
  

闽ICP备14008679号