1. 程式人生 > >thinkphp後臺獲取微信小程式使用者資訊

thinkphp後臺獲取微信小程式使用者資訊

 	public function sendCode(){
 		$APPID = '################APPID';
 		$AppSecret = '#################';
 		$code = input('get.code');
 		$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");
 		$encryptedData = $_GET['encryptedData'];
 		$iv = $_GET['iv'];
 		if(empty($signature) || empty($encryptedData) || empty($iv)){
 			echo "傳遞資訊不全";
 		}
 		include_once "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['openid'] = $data['openId'];
 			$save['uname'] = $data['nickName'];
 			$save['unex'] = $data['gender'];
 			$save['address'] = $data['city'];
 			$save['time'] = time();
 			$map['openid'] = $data['openId'];
 			!empty($data['unionId']) && $save['unionId'] = $data['unionId'];

 			$res = \think\Db::name('user') -> where($map) -> find();
 			if(!$res){
	 			$db = \think\Db::name('user') -> insert($save); 
	 			if($db !== false){
	 				echo "儲存使用者成功";
	 			}else{
	 				echo "error";
	 			}
 			}else{
 				echo "使用者已經存在";
 			}
 		}
		//生成第三方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;
 	}