php版获取unionid,有时候解密失败
发布于 7 年前 作者 fma 783 次浏览 来自 问答

环境: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;
}
10 回复

应该是登录状态的关系,前面的已经失效或者还没有生效。再来一次就好了,我经常碰到这个,不知道算不算bug

解密需要session_key,

session_key需要code,

你检查下session_key与code,

都没问题的话就能解密了

也遇到这个情况了,楼主怎么解决的?求分享

好像 不能 直接获取  包括解密 也一样的,只有关注小程序的公众号 才能获取到

这个问题没人解决么?

你好, 请问楼主返回-41002的问题是怎么造成的呢 , 有解决方法了吗

我用java写的   第一次也会失败,然后用同样的session_key再次解密就会成功,为什么?

同样遇到这个坑,不同小程序,一样的代码,一个解密正常获取到手机号,另外一个就一直41001.

你好,请问你那个openssl_decrypt结果为空的问题是怎么解决掉的呢,我现在从始至终都是获取到的数据为空。。麻烦指教一下好不呀T——T

现在获取unionid好像不需要进行到解密这一步

https://api.weixin.qq.com/sns/jscode2session

这个接口就可以直接返回unionid

回到顶部