php unid,php 解密小程序获取unionid

该代码实现了一个微信小程序的登录功能,通过获取微信授权的js_code,调用微信API获取session_key和openid。然后校验签名,使用AES-128-CBC解密用户数据。如果解密成功,返回解密后的数据;否则返回错误信息。
摘要由CSDN通过智能技术生成

小程序代码

php代码

public function login2()

{

$post = input();

if (!empty($post)) {

$appid = $this->wxappid;

$secret = $this->wxsecret;

if(isset($post['code'])) $code = $post['code'];

if(isset($post['iv'])) $iv = $post['iv'];

if(isset($post['rawData'])) $rawData = $post['rawData'];

if(isset($post['signature'])) $signature = $post['signature'];

if(isset($post['encryteData'])) $encryptedData = $post['encryteData'];

$url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appid . "&secret=" . $secret . "&js_code=" . $code . "&grant_type=authorization_code";

$weixin = file_get_contents($url);

$jsondecode = json_decode($weixin);

$res = get_object_vars($jsondecode);

$sessionKey = $res['session_key'];//取出json里对应的值

// 验证签名

$signature2 = sha1(htmlspecialchars_decode($rawData) . $sessionKey);

if ($signature2 !== $signature) return json("signNotMatch");

$data = [];

$errCode = $this->decryptData($encryptedData, $iv, $sessionKey, $data);

if ($errCode == 0) {

return $data;

} else {

return json('获取失败');

}

}

}

public function decryptData( $encryptedData, $iv,$sessionKey, &$data )

{

if (strlen($sessionKey) != 24) {

return json('sessionKey错误');

}

$aesKey=base64_decode($sessionKey);

if (strlen($iv) != 24) {

return json('iv错误');

}

$aesIV=base64_decode($iv);

$aesCipher=base64_decode($encryptedData);

$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

$dataObj=json_decode( $result );

if( $dataObj == NULL )

{

return json('IllegalBuffer错误');

}

if( $dataObj->watermark->appid != $this->wxappid )

{

return json('IllegalBuffer错误');

}

$data = $result;

return $data;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值