收藏
回答

如何保证getPhoneNumber用户只需点击一次即可获得手机号码?

在app.js中 onLaunch时

调用wx.login获取code并传递到服务端,服务端调用auth.code2Session获取该用户的session_key并保存。

检测到该用户未绑定手机号码,进入获取用户手机号码页面。



正常场景:

用户在获取用户手机号码页面,短时间(2分钟内)点击获取手机号码button(open-type="getPhoneNumber")得到iv和encryptedData传递到服务端,服务端使用上面保存的session_key和传递的iv/encryptedData进行解密,可获得用户的手机号码。

---------------------------

异常场景:

用户在获取用户手机号码页面,10分钟后点击获取手机号码button(open-type="getPhoneNumber")得到iv和encryptedData传递到服务端,服务端使用上面保存的session_key和传递的iv/encryptedData进行解密,解密失败,无法获得用户的手机号码。

解决办法:在这种异常场景,可以返回给小程序客户端获取手机号码失败,客户端根据返回的错误信息,再次调用wx.login获取code并传递到服务端,服务端调用auth.code2Session获取该用户的session_key并保存,并再次引导用户点击获取手机号码button得到iv和encryptedData传递到服务端,服务端再次解密才可获得用户的手机号码。(需用户点击两次)


==========

问题:如何在这种异常场景,用户只需点击一次即可获得手机号码?

最后一次编辑于  2020-04-07
回答关注问题邀请回答
收藏

2 个回答

  • 小白钊
    小白钊
    2020-04-07

    每次点击按钮的时候都调用一次wx.login不就可以了么, 对前端用户是无感的。


    进阶做法就是,前端记录上次login的时间,超过10分钟才再次提前调用


    2020-04-07
    有用
    回复
  • 亮子🌞
    亮子🌞
    2020-04-07

    的确会有过期场景 用户点击按钮时 获取一次code更新服务端的session_key 用户授权完成之后 再把iv和data上传上去即可

    2020-04-07
    有用
    回复
登录 后发表内容
问题标签