易·威登(Louis Vuitton,1821年8月4日-1892年2月27日),企业家,出生于弗朗什孔泰,路易威登(LV)品牌创始人。
他于1854年在巴黎开了以自己名字命名的第一间皮箱店。一个世纪之后,路易威登成为皮箱与皮件领域数一数二的品牌,并涉及时装、手表等多个领域,傲居奢侈品牌之列。路易·威登被誉为法国历史上杰出的皮件设计大师之一。
这种情况偶发,一般发生在隔一段时间之后第一次登录时。
导致问题的原因是 getUserInfo 放在了 wx.login 之前。 getUserInfo 获取到 iv 和 encryptedData 传给后台。wx.login调用时用户的 session_key 可能会被更新而致使旧 session_key 失效。这样后台再去解密的时候就等于在用新的 session_key 去解密旧的 session_key 加密的数据,就会报 ILLEGAL_BUFFER 错误。
正常的流程应该是:
很容易错写成在 wx.getUserInfo 的回调里再调 wx.login 拿 code 再发送给服务器,这样 getUserInfo 里的 data 加密用的session_key就有可能跟解密的时候的 session_key 不一致,因为 wx.login 有可能会刷新了 session_key
建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。
其实还蛮简单的,可以说一搜一大把,下面说下两种方式。
自行开发
主要就是通过小程序端直接请求登录获取到code(登录凭证)、如果需要获取用户手机号则需要再次授权需要iv和encryptedData,注意这里授权两次,也可以作为一次处理。
(1) 后端接收到小程序端请求的code,进行解密,可以参考微信小程序开发文档,拿到openId和session_key,这一步如果是已经注册的用户可以直接将后台分配的token一起组成对象存储到redis中,期限7-30天皆可,先从redis判定这个openId是否已经解析过且已存储为正式用户,是则直接返回系统的登录凭证完成登录。如果不是就需要走第二步。
(2)通过iv和encryptedData解析获取用户的手机号,完成解析后将用户信息存储,并一样存储到数据库和redis中,返回凭证。
2. 使用已经集成好的sdk,使用maven项目直接引入对象的jar即可。
举个栗子 weixin-java-miniapp 可以看下对应的文档说明,使用已经集成好的方法即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)