【微信小程序】,【获取手机号】,【session_key】微信服务器是如何对用户手机进行加密的?
1、环境: A、客户端:微信小程序 B、涉及组件:button(open-type="getPhoneNumber") C、涉及API:wx.login,通过该API获取code,服务器通过code调用code2session接口获取session_key 2、场景: A、前提(用户在使用小程序的过程中,客户端从未调用过wx.login) B、用户点击button(open-type="getPhoneNumber"),点击“允许” 3、问题:如果客户端从未调用过wx.login,服务器也从未调用过code2session接口,那么这个用户是否存在session_key 若session_key不存在或失效,微信服务器是如何对手机号进行加密的?(按照官方文档,加密时使用session_key做对称加密) 个人猜测:若客户端从未调用过wx.login,那么session_key不存在(或者用户长期未操作导致原有session_key失效)。但在获取手机号时,微信服务器依然能够返回加密后的数据。也就是说,微信服务器很可能在发现session_key不存在或失效时,自己会生成一个用于加密的session_key(生成这个session_key并不代表用户已经登陆,亲测此时调用wx.checkSession返回是fail)。用户想要获取session_key,就必须要要调用wx.login和code2session,获取到的就是微信服务器加密手机号时生成的那个session_key(我亲测是这样的,但因样本数据有限,无法肯定,请官方指正)。 若session_key存在,也就说不执行wx.login,session_key也存在。那么这个session_key是何时生成的? 4、最佳实践,请官方指正 A、app.js的onShow方法中调用wx.login,服务端调用code2session接口,并将session_key存到缓存或数据库中(没有失效时间) B、用户点击button(open-type="getPhoneNumber"),点击允许。回调函数中先调用wx.checkSession。 若为fail,则调用wx.login获取code,将code和密文一起回传服务器。服务器先调用code2session接口,再使用获取到的session_key解密密文。 若为sucess,则只将密文回传服务器。服务器使用缓存或数据库中的session_key进行解密