环境: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