环境:php5.5.7
问题: 有时候获取unionid失败,检查是openssl_decrypt解密后的数据为空
场景:假如我有一段时间没有操作微信开发者工具,第一次就会解密失败,后续都会成功
public function decryptUser( $sessionKey , $encryptData , $iv ) { $errorCode = [ 0=> 'ok' , 41001=> 'encodingAesKey 非法' , 41002=> 'IllegalIv' , 41003=> ' aes 解密失败' , 41004=> '解密后得到的buffer非法' , 41005=> 'base64解密失败' , 41016=> 'base64解密失败' , ]; if (mb_strlen( $sessionKey ) !== 24) { throw new \Exception( $errorCode [41001], 41001); } if (mb_strlen( $iv ) !== 24) { throw new \Exception( $errorCode [41002], 41002); } $aesKey = base64_decode ( $sessionKey ); $aesIv = base64_decode ( $iv ); $aesCipher = base64_decode ( $encryptData ); $result = openssl_decrypt( $aesCipher , 'AES-128-CBC' , $aesKey , 1, $aesIv ); var_dump( $result ); $decodeResult = json_decode( $result ,true); var_dump( $decodeResult ); if ( empty ( $decodeResult )) { throw new \Exception( $errorCode [41003], 41003); } if ( $decodeResult [ 'watermark' ][ 'appid' ] !== $this ->appid) { throw new \Exception( $errorCode [41003], 41003); } return $decodeResult ; } |
也遇到这个情况了,楼主怎么解决的?求分享
我用java写的 第一次也会失败,然后用同样的session_key再次解密就会成功,为什么?
你好, 请问楼主返回-41002的问题是怎么造成的呢 , 有解决方法了吗
这个问题没人解决么?
同样遇到这个坑,不同小程序,一样的代码,一个解密正常获取到手机号,另外一个就一直41001.
你好,请问你那个openssl_decrypt结果为空的问题是怎么解决掉的呢,我现在从始至终都是获取到的数据为空。。麻烦指教一下好不呀T——T
你检测一下 code,session_key ,etc 那些数据是不是有。
获取unionid的前提是开open.wechat.qq.com
参考文档https://developers.weixin.qq.com/miniprogram/dev/api/unionID.html
你好,我这些参数检查过了,都是有的,只是base64_decode之后都是乱码,然后就采用openssl_decrypt,结果就是为空,我试过了aes类方法,也是空值,真的很奇怪啊。
base64_decode之后就是乱码。你公众号和小程序都在open.wechat.qq.com里面绑定了?
我没有绑定,不是说没有绑定不可以获取到unionID,但并不影响解密用户的信息嘛,我现在一直都是结果为空~~T——T
你好,我现在遇到了你的这个首次解密失败的问题,请问你是怎么处理的呢?Y——Y
解密需要session_key,
session_key需要code,
你检查下session_key与code,
都没问题的话就能解密了
嗯,但是隔一段时间的第一次获取的为空
我觉得那是因为session_key过期了,你可以做个方法,如果过期了就重新获取session_key
也不是吧。每次的session_key都是新的
好像 不能 直接获取 包括解密 也一样的,只有关注小程序的公众号 才能获取到
关注公众号 就可以jscode2session直接获取,没关注公众号就要解密
应该是登录状态的关系,前面的已经失效或者还没有生效。再来一次就好了,我经常碰到这个,不知道算不算bug
我也不清楚,第一次肯定失效。。
现在获取unionid好像不需要进行到解密这一步
https://api.weixin.qq.com/sns/jscode2session
这个接口就可以直接返回unionid
假如用户关注了与小程序关联的公众号这个可以直接获取到uninoid,不然就要解密。
坑啊
是的 啊。(v.v)
我刚才试了一下,我这边取关公众号之后,仍然是可以拿到unionid的
看了一下文档,还是需要授权的,大概我以前授权过,所以就算取关了,也一样有unionid