微信小程序用户信息获取单文件版,开封即用
<?php // encryptedData ,iv 前台传递过来需要url编码一下 namespace app\user\model; use think\Model; class Wxmp extends Model{ public $appid = ''; public $secret = ''; /** * 小程序登录 * * @param [type] $data * @return void * @author 617 <email:723875993@qq.com> */ public function wechatMini($data) { $appid = $this->appid; $secret = $this->secret; $js_code = $data['code']; $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$js_code}&grant_type=authorization_code"; $res = wx_send($url); $res = json_decode($res, true); if (isset($res['session_key']) && !empty($res['session_key'])) { $info = $this->decodeUserInfo($appid, $res['session_key'], $data); if($info){ return $info; } return false; } $this->error = $res['errmsg']; return false; } /** * 解密用户信息 * * @param [type] $data * @return void * @author 617 <email:723875993@qq.com> */ public function decodeUserInfo($appid, $sessionKey, $data) { $errCode = $this->decryptData($appid, $sessionKey, urldecode($data['encryptedData']), urldecode($data['iv']), $decode); if ($errCode === 0) return json_decode($decode,true); $this->error = $errCode; return false; } public function decryptData($appid, $sessionKey, $encryptedData, $iv, &$data ) { if (strlen($sessionKey) != 24) { return -41001; } $aesKey=base64_decode($sessionKey); if (strlen($iv) != 24) { return -41002; } $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 -41003; } if( $dataObj->watermark->appid != $appid ) { return -41003; } $data = $result; return 0; } }