小程序
小游戏
企业微信
微信支付
扫描小程序码分享
请问下wx.getUserInfo(OBJECT)和getPhoneNumber(OBJECT)的解码是一样的吗?为什么我原来的代码wx.getUserInfo(OBJECT)用示例代码可以解出来,但是getPhoneNumber(OBJECT)解码的时候始终都是
error code<li>-41003: aes 解密失败</li>???
想请问一下我是哪里出错了?
正常解出来的,用一样的代码一样的解密函数,导入一样的参数,但是就是出错
求指教~~~~~谢谢~~~~~~~~
17 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
如果加密的时候登录已经过期,这是会生成新的sessionKey,之后login会延续这个sessionKey。除非是加密之后,login之前登录过期,但一般这个时间间隔很短,发生几率很低。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
如果在获取到加密信息后调用login,如果此时登录未过期,sessionKey会刷新,开发者使用code获取到的sessionKey和加密用的sessionKey就不是同一个了。
手机号码这个可能也会有另一个问题,对某些解密算法库的实现支持有问题,刚刚定位到,我们会尽快修复。
你好,session未过期情况下login会刷新登录态,导致sessionKey发生变化。稳妥的方案是在用户点击后,先checkSession,如果未过期,不login,服务器可以用之前的sessionKey解密。如果session过期,再重新login,可以使用新的sessionKey解密。
怎么判断之前的sessionKey是当前这个用户的呢?
@易装客装修顾问
是的,在bindgetphonenumber 前先重新生成一个code,然后提交服务器时用这个code
虽然土了点:) 但总比不行强。
我的也通了,其实也简单。就是用存在自己数据库里的sessionkey来解就OK了。这样就要求在调用个体phone number之前就保证sessionkey是最新的就行了。要么就在上一页进行检测或在本页的onload里完成检测和刷新。
@晨
明白了,谢谢耐心解释,刚才测试也成功了。
也就是说,bindgetphonenumber的时候是用现有的key进行加密的,如果过期就用新的key加密。
如果提交服务器前再wx.login会产生新的key而解不出来。
那么问题来了。。。哎!
很多人都不储存 code 或者sessionkey 在用户端或服务器上,因为wx.XXXX,的接口都是异步的,判断起来有点麻烦,所以都是现用现wx.login(), 反正频率也不会搞,我们保持用户连接的key是自己生成的key,不用wx.login。
而过去的getUserInfo, getWeRunData,还有群ID的那个就是用接口,都可以先wx.login(), 成功后再 wx.XXXXX
只有这个是先加密好了, 这个就有点麻烦了,需要改不少地方。
我不知道在<button /> 上 加个bindtap="login" ,能否先在 bindgetphonenumber 重新生成 code,这样就不需要改很多地方。
这个解释大概明白了,但这样逻辑也有问题
如果先获取到加密信息后,登录正好过期了,那岂不是也拿不到正确的sessionkey?
您好,
我觉得这个不是重点啊,获取phone的频率很低,无非就是多刷几次sessionkey,也不至于把把都获取不到phonenumber
哦,不好意思,看错了
我的是41003,解密失败
如果你是41001的话,那你查一下你获取session_key的方法吧
@stephen
解密文档中有下列说明
对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。
对称解密的目标密文为 Base64_Decode(encryptedData)。
对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。
对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。
Base64_Decode(iv)在哪里要用这个函数处理,我之前解密用户数据都没用到这个函数啊.而且现在解密用户数据也正常.
你知道这个函数要用在哪里吗
正在加载...
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
如果加密的时候登录已经过期,这是会生成新的sessionKey,之后login会延续这个sessionKey。除非是加密之后,login之前登录过期,但一般这个时间间隔很短,发生几率很低。
如果在获取到加密信息后调用login,如果此时登录未过期,sessionKey会刷新,开发者使用code获取到的sessionKey和加密用的sessionKey就不是同一个了。
手机号码这个可能也会有另一个问题,对某些解密算法库的实现支持有问题,刚刚定位到,我们会尽快修复。
你好,session未过期情况下login会刷新登录态,导致sessionKey发生变化。稳妥的方案是在用户点击后,先checkSession,如果未过期,不login,服务器可以用之前的sessionKey解密。如果session过期,再重新login,可以使用新的sessionKey解密。
怎么判断之前的sessionKey是当前这个用户的呢?
@易装客装修顾问
是的,在bindgetphonenumber 前先重新生成一个code,然后提交服务器时用这个code
虽然土了点:) 但总比不行强。
我的也通了,其实也简单。就是用存在自己数据库里的sessionkey来解就OK了。这样就要求在调用个体phone number之前就保证sessionkey是最新的就行了。要么就在上一页进行检测或在本页的onload里完成检测和刷新。
@晨
明白了,谢谢耐心解释,刚才测试也成功了。
也就是说,bindgetphonenumber的时候是用现有的key进行加密的,如果过期就用新的key加密。
如果提交服务器前再wx.login会产生新的key而解不出来。
那么问题来了。。。哎!
很多人都不储存 code 或者sessionkey 在用户端或服务器上,因为wx.XXXX,的接口都是异步的,判断起来有点麻烦,所以都是现用现wx.login(), 反正频率也不会搞,我们保持用户连接的key是自己生成的key,不用wx.login。
而过去的getUserInfo, getWeRunData,还有群ID的那个就是用接口,都可以先wx.login(), 成功后再 wx.XXXXX
只有这个是先加密好了, 这个就有点麻烦了,需要改不少地方。
我不知道在<button /> 上 加个bindtap="login" ,能否先在 bindgetphonenumber 重新生成 code,这样就不需要改很多地方。
@晨
这个解释大概明白了,但这样逻辑也有问题
如果先获取到加密信息后,登录正好过期了,那岂不是也拿不到正确的sessionkey?
@晨
您好,
我觉得这个不是重点啊,获取phone的频率很低,无非就是多刷几次sessionkey,也不至于把把都获取不到phonenumber
@易装客装修顾问
哦,不好意思,看错了
我的是41003,解密失败
如果你是41001的话,那你查一下你获取session_key的方法吧
@stephen
解密文档中有下列说明
对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。
对称解密的目标密文为 Base64_Decode(encryptedData)。
对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。
对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。
Base64_Decode(iv)在哪里要用这个函数处理,我之前解密用户数据都没用到这个函数啊.而且现在解密用户数据也正常.
你知道这个函数要用在哪里吗