获取微信绑定手机号的需求大家应该都碰到过吧?code和session_key的匹配问题时常发生,一般的解决方案是在登录界面加载时先wx.login,将code保存下来,点击获取手机号按钮时再将code和加密数据打包给后端,但是可能出现用户在页面停留一段时间后再点击按钮的情况。
我想如果在按钮上增加bindtap事件,在tap事件中调用wx.login获取code,由于bindgetphonenumber需要一个允许的操作,因此可以保证获取code在前,获取加密数据在后。
之前一直没发现问题,以为解决了。可最近测试测出了一个问题,小程序关闭一段时间后(大概10多分钟),重新打开时第一次获取手机号会报错,根据后台日志查看应该是code和session_key没有对应上导致解密失败,后续再获取就正常,短时间内重新加载小程序也没有这个问题,让测试尝试先拒绝再允许也没有这个问题。
这就难以理解了,为何只有这种情况下会出现一次问题呢?是这样增加bindtap事件导致的问题吗?想了一天也没想出来是什么原因,欢迎大佬赐教讨论。
既然你知道这个问题存在发生的可能性,为什么你不在点击获取手机号码按钮的时候,先校验是否登录状态有效呢?如果有效就走获取手机号码的逻辑,如果无效就走授权code。