收藏
回答

wx.login调用时机?

登录常见的场景如下:

用户一进入小程序登录页面,调用wx.login获取微信的code。用户点击“获取手机号”的getphonenumber按钮,得到授权令牌。然后后端调用用jscode2session接口获取sessionKey,再利用sessionKey解密授权令牌得到手机号。

在上述过程中,如果code超过5分钟(官方没确切时间),code可能会失效,怎么解决这个问题呢?

我想到的下面2个方法都不支持:

  1. 定时调用:wx.login获取微信的code,但是wx.login 有频率限制。
  2. 在用户点击“获取手机号”按钮后调用wx.login,但是小程序不支持这种方案,原因参考:https://developers.weixin.qq.com/community/develop/doc/0008044f8244a805d3766d1465b800


还有一个方法不友好,但目前看是唯一办法:

  1. 使用 wx.checkSession判断 code 是否有效,当提示失效,用弹窗提示用户重新获取code并重新点击“获取手机号”按钮,但是这种方法非常不优雅。


希望官方给个答复,是否上述方法是唯一解?

最后一次编辑于  2024-12-30
回答关注问题邀请回答
收藏

5 个回答

  • codebug
    codebug
    04-15

    步骤1:需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,通过 bindgetphonenumber 事件获取回调信息;

    步骤2:将 bindgetphonenumber 事件回调中的动态令牌code传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code来换取用户手机号。每个code有效期为5分钟,且只能消费一次。

    注:getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用。

    注意

    从基础库2.21.2开始,对步骤2中换取手机号信息的方式进行了安全升级,上述为新方式使用指南。(旧方式目前可以继续使用,但建议开发者使用新方式,以增强小程序安全性)另外,新方式不再需要提前调用wx.login进行登录。

    04-15
    有用
    回复
  • Bowie
    Bowie
    03-18

    你好,请问现在session_key有什么场景是需要用到的呢?

    我目前只在GetPhoneNumber 的接口处理中看到可以使用session_key, 但是官方文档中说这种为旧方式, 不建议使用

    那请问还有什么场景可能会用到呢? 如果没有场景我在考虑要不要后端就不保留这个session_key的值了

    03-18
    有用
    回复 1
    • wu wei
      wu wei
      03-18
      兄弟,感谢你,一直不知道有新方式,我们一直用的旧方式
      03-18
      回复
  • 肖荣豪
    肖荣豪
    01-02

    wx.login是一开始调用后后端返回 token 写在 cookie 里,进入小程序查看是否有token

    01-02
    有用
    回复 2
    • wu wei
      wu wei
      01-02
      兄弟,小程序不支持cookie
      01-02
      回复
    • 肖荣豪
      肖荣豪
      01-02回复wu wei
      wx.setStorage 这个
      01-02
      回复
  • 跨商通
    跨商通
    2024-12-30

    wx.getphonenumber是需要用户点击的,

    wx.login是静默执行的,用来获得openid,在用户点击之前,你有大把时间执行wx.login。完全不冲突吧。

    2024-12-30
    有用
    回复 3
    • wu wei
      wu wei
      2024-12-30
      什么时机执行wx.login呢,目前就是一进入页面就执行wx.login
      2024-12-30
      回复
    • wu wei
      wu wei
      01-02
      但是这个code是有有效期的,怎么检测code失效,并无感知更新code
      01-02
      回复
    • 跨商通
      跨商通
      01-02回复wu wei
      答案就在AI回答里。
      01-02
      回复
  • 智能回答 智能回答 该问答由AI生成
    2024-12-30
    有用
登录 后发表内容