private $Wxconfig=[
'appID'=>'appid',//微信公众号appid
'appsecret'=>'appsecret',//微信公众号appsecret
'token'=>'token',//token
// 'Callback'=>'http://'.$this->_server('SERVER_NAME').'/index.php/Home/WeiXinUser/getWxUserInfo/',//回调地址
'EncodingAESKey'=>'JpZS1G3bYooK3ziBlbXrqwN3LIFlISOmnlVXBocx53k',//
// 'Callback'=>"'".$_SERVER['SERVER_NAME']."'"
];
这些配置可以在微信公众号里面调用然后根据数据库修改WeiXinOpenidGetUserInfo方法 里面有数据库的相关操作
以下是完整代码
'wx0b8fe631e5826552',//微信公众号appid
'appsecret'=>'c5eefb983d6ed4c46c9e7b8afc939a0b',//微信公众号appsecret
'token'=>'8ef3c0b7455b61d2af9c5aeee3fc3c7b',//token
// 'Callback'=>'http://'.$this->_server('SERVER_NAME').'/index.php/Home/WeiXinUser/getWxUserInfo/',//回调地址
'EncodingAESKey'=>'JpZS1G3bYooK3ziBlbXrqwN3LIFlISOmnlVXBocx53k',//
// 'Callback'=>"'".$_SERVER['SERVER_NAME']."'"
];
public function getWxConfig(){
return $Wxconfig;
}
// 获取用户信息
public function getWxUserInfo($link){
// 如果存在则直接生成token
$token=cookie('token')?cookie('token'):'';
$gettoken=isset($_GET['token'])?$_GET['token']:'';
if($gettoken or $token){
if($gettoken){$token=$gettoken;}
$userid=isset(explode('-',$token)[0])?explode('-',$token)[0]:0;
$userInfo=M('user')->where('userid='.$userid)->find();
if(!$userInfo){
$COM=$_SERVER['SERVER_NAME'];
if(C('COM_LIST')!=$COM){
if(isset($_GET['userid'])){
echo ""; exit;
}
echo ""; exit;
}
$token=$this->Wxlogin($link);
}
$COM=$_SERVER['SERVER_NAME'];
if(C('COM_LIST')==$COM){
$link=M('comlist')->where('status=1')->find()['com'];
if($link){
if(isset($_GET['userid'])){
echo ""; exit;
}
echo "";
exit;
}
}
cookie('token',$token,60*60);//一个小时
return $userInfo;
}
$COM=$_SERVER['SERVER_NAME'];
if(C('COM_LIST')!=$COM){
if(isset($_GET['userid'])){
echo "";
exit;
}
$link='http://'.C('COM_LIST');
//echo $link;exit;
echo ''; ;
exit;
}
$token=$this->Wxlogin($link);
$userid=isset(explode('-',$token)[0])?explode('-',$token)[0]:0;
$userInfo=M('user')->where('userid='.$userid)->find();
cookie('token',$token,60*60);//一个小时
$link=M('comlist')->where('status=1')->find()['com'];
if(isset($_GET['userid'])){
echo "";
exit;
}
echo "";
exit;
return $userInfo;
}
//微信登录
public function Wxlogin($link){
$token=$this->getWeiXinUserCode($link);
return $token;
}
public function getWxJsApiConfig(){
$access_token=$this->getWeiXinServerAccess();
$noncestr=$this->generate_password();//随机字符串
$timestamp=time();
$jsapi_ticket=$this->getWeiXinjsapi_ticket();
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
$url=explode('#', $url)[0];
$signature=sha1('jsapi_ticket='.$jsapi_ticket.'&noncestr='.$noncestr.'×tamp='.$timestamp.'&url='.$url);
$data=array(
'appid'=>$this->Wxconfig['appID'],
'access_token'=>$access_token,
'noncestr'=>$noncestr,
'timestamp'=>$timestamp,
'jsapi_ticket'=>$jsapi_ticket,
'url'=>$url,
'signature'=>$signature
);
return $data;
}
private function getWeiXinjsapi_ticket(){
$ticket=session('ticket');
if(!$ticket){
$api='https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$this->getWeiXinServerAccess().'&type=jsapi';
$json=json_decode($this->post_Https($api));
$ticket=$json->ticket;
session(array('ticket'=>$ticket,'expire'=>7200));
}
return $ticket;
}
//获取服务器Access方法
private function getWeiXinServerAccess(){
$ServerAccess=session('WxServerAccess');
if($ServerAccess){
return $ServerAccess;
}else{
$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->Wxconfig['appID'].'&secret='.$this->Wxconfig['appsecret'];
$json=json_decode($this->post_Https($url));
session(array('WxServerAccess'=>$json->access_token,'expire'=>60*30));
return $json->access_token;
}
}
// 返回随机字符串
private function generate_password( $length = 8 ) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$password = '';
for ($i=0;$i<$length;$i++){
$password.=substr($chars,mt_rand(0,strlen($chars)-1),1);
}
return $password;
}
// 获取code进行请求
private function getWeiXinUserCode($link){
$code=isset($_GET['code'])?$_GET['code']:'';
if($code){
// 获取网页授权access_token
$api='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->Wxconfig['appID'].'&secret='.$this->Wxconfig['appsecret'].'&code='.$code.'&grant_type=authorization_code';
$json=json_decode($this->post_Https($api));
$access_token=$json->access_token;
$openid=$json->openid;
if(!$openid){
if($link){
$url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->Wxconfig['appID'].'&redirect_uri='.urlencode($link).'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
echo ""; exit;
}else{
$url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->Wxconfig['appID'].'&redirect_uri='.urlencode($this->Wxconfig['Callback']).'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
echo "";exit;
} }
$token=$this->WeiXinOpenidGetUserInfo($openid,$access_token,$link);
return $token;
}else{
if($link){
$url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->Wxconfig['appID'].'&redirect_uri='.urlencode($link).'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
echo ""; exit;
}else{
$url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->Wxconfig['appID'].'&redirect_uri='.urlencode($this->Wxconfig['Callback']).'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
echo ""; exit;
}
}
}
//拿openid进行数据请求
private function WeiXinOpenidGetUserInfo($openid,$access_token,$link){
if(!$openid){
if($link){
echo "";exit;
}else{
echo ""; exit;
}
}
// 查询数据库是否存在 如果用户存在则直接返回不然请求之后返回数据库
$user=M('user')->where('openid="'.$openid.'"')->find();
if($user){
$token=$user['userid'].'-'.md5($user['openid'].time());
cookie('token',$token,60*60);//一个小时
return $token;
}else{
$api='https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
$json=json_decode($this->post_Https($api));
$status=M('movie_config')->where('id=2')->find();
if(!$status['value']){
$data=array('openid'=>$openid,'name'=>$json->nickname,'sex'=>$json->sex,'head'=>$json->headimgurl,'createtime'=>time(),'status'=>1);
}else{
$data=array('openid'=>$openid,'name'=>$json->nickname,'sex'=>$json->sex,'head'=>$json->headimgurl,'createtime'=>time());
}
$userid=M('user')->add($data);
// 随机vip时间
$data=M('movie_config')->where('id=5')->find();
$times=$data['value'];
$timestamp=time()+($times*60*60*24);//随机vip时间
M('user_info')->add(['userid'=>$userid,'movietime'=>$timestamp]);
$token=$userid.'-'.md5($openid.time().$access_token);
M('user')->where('userid='.$userid)->save(['token'=>$token]);
cookie('token',$token,60*60);//一个小时
return $token;
}
}
// 发送https请求
public function post_Https($url){
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
$tmpInfo = curl_exec($curl); //返回api的json对象
curl_close($curl);
return $tmpInfo; //返回json对象
}
}
?
调用方法
$link='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
$user=$this->getWxUserInfo($link);//返回用户相关信息 link是登录之后跳转的地址