ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
下载文件选择phpdemo [https://res.wx.qq.com/wxdoc/dist/assets/media/aes-sample.eae1f364.zip](https://res.wx.qq.com/wxdoc/dist/assets/media/aes-sample.eae1f364.zip) 在控制器中调用 ``` <?php namespace app\system\api; use app\common\controller\Common; use Env; use think\Db as Db; class Xcx extends Common { public function sendCode(){ $APPID = 'wx9633f7d19a7822f9'; $AppSecret = 'd24b0b731ad4930843003990ab886d20'; $code = input('get.code'); if(empty($code)){ echo "code不能为空"; die; } $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$APPID.'&secret='.$AppSecret.'&js_code='.$code.'&grant_type=authorization_code'; $arr = $this -> vegt($url); $arr = json_decode($arr,true); // $openid = $arr['openid']; $session_key = $arr['session_key']; // 数字签名校验 $signature = input('get.signature'); $signature2 = sha1($_GET['rawData'].$session_key); if($signature != $signature2){ echo "数字签名失败"; die; } // 获取信息,对接口进行解密 // Vendor("PHP.wxBizDataCrypt"); require_once '../extend/PHP/wxBizDataCrypt.php';//引用类文件 $encryptedData = $_GET['encryptedData']; $iv = $_GET['iv']; if(empty($signature) || empty($encryptedData) || empty($iv)){ echo "传递信息不全"; } include_once "../extend/PHP/wxBizDataCrypt.php"; $pc = new \WXBizDataCrypt($APPID,$session_key); $errCode = $pc->decryptData($encryptedData,$iv,$data); if($errCode != 0){ echo "解密数据失败"; die; }else { $data = json_decode($data,true); session('myinfo',$data); $save['open_id'] = $data['openId']; $save['cooker_name'] = $data['nickName']; $save['sex'] = $data['gender']; $save['cooker_address'] = $data['city']; $save['ctime'] = time(); $save['cooker_header'] = $_GET['cooker_header']; !empty($data['unionId']) && $save['unionId'] = $data['unionId']; $res = Db::table('hisi_system_cooker') -> where(['open_id'=>$data['openId']]) -> find(); if(!$res){ $db = Db::table('hisi_system_cooker') -> insert($save); $userId = Db::table('hisi_system_cooker') -> getLastInsID(); //获得刚插入的id if($db !== false){ $data['msg'] = '保存用户成功'; $data['userId'] = $userId; $data['userInfo'] = $save; echo json_encode($data); }else{ echo "error"; } }else{ $data['msg'] = '用户已经存在'; $data['data'] = $res; echo json_encode($data); } } //生成第三方3rd_session // $session3rd = null; // $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; // $max = strlen($strPol)-1; // for($i=0;$i<16;$i++){ // $session3rd .=$strPol[rand(0,$max)]; // } // echo $session3rd; } public function vegt($url){ $info = curl_init(); curl_setopt($info,CURLOPT_RETURNTRANSFER,true); curl_setopt($info,CURLOPT_HEADER,0); curl_setopt($info,CURLOPT_NOBODY,0); curl_setopt($info,CURLOPT_SSL_VERIFYPEER, false); curl_setopt($info,CURLOPT_SSL_VERIFYHOST, false); curl_setopt($info,CURLOPT_URL,$url); $output= curl_exec($info); curl_close($info); return $output; } } ``` 或者也可以下面这种 ``` <?php namespace app\teacherapi\controller; use think\Controller; /** * @date: 2018-12 * 微信操作类 */ class WxDecode extends Controller { public function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } /** * @author: zxf * @date: 2018-12-08 * @description: 解密微信用户敏感数据 * @return array */ public function WxDecode() { // 接收参数 $data = request() -> param(); // 引入解密文件 在微信小程序开发文档下载 vendor('wx.WXBizDataCrypt'); vendor('wx.ErrorCode'); $appid = config('TESTPPID'); $appsecret = config('TESTSECREET'); $grant_type = "authorization_code"; //授权(必填) $code = $data['code']; //有效期5分钟 登录会话 $encryptedData=$data['encryptedData']; $iv = $data['iv']; $signature = $data['signature']; $rawData = $data['rawData']; // 拼接url $url = "https://api.weixin.qq.com/sns/jscode2session?"."appid=".$appid."&secret=".$appsecret."&js_code=".$code."&grant_type=".$grant_type; $res = json_decode($this->httpGet($url),true); $sessionKey = $res['session_key']; //取出json里对应的值 $signature2 = sha1(htmlspecialchars_decode($rawData).$sessionKey); // 验证签名 if ($signature2 !== $signature){ return json("验签失败"); } // 获取解密后的数据 $pc = new \WXBizDataCrypt($appid, $sessionKey); $errCode = $pc->decryptData($encryptedData, $iv, $data ); if ($errCode == 0) { return return_succ($data); } else { return return_error($errCode); } } } ``` 参考网址 [https://www.jb51.net/article/174181.htm](https://www.jb51.net/article/174181.htm)