微信公众平台开发如何获取用户信息呢,我们以只获取用户openid(静默授权)为例说明一下.以下代码为Thinkphp代码

<?php

//微信公众平台接口,微信公众平台开发,微信公众平台网页授权,微信公众平台获取用户信息
class WapauthController extends Controller {
    public $wecha_id;
    public $clientinfo;
    static $userinfo;
    protected function _initialize() {
        //auth begin
        if ((!IS_AJAX) && (!$_GET['wecha_id'] ¦¦ urldecode($_GET['wecha_id']) == 'wechat_id') && $_GET['wecha_id'] != 'no') {//先判断是否需要获取wecha_id,
这里是可以手动在url后面加wecha_id=no参数,来忽略网页授权,使页面不在微信里时可访问.
//如果没有wecha_id或wecha_id不等于no,开始网页授权. 
             $userappid='wxaaaaaaaaaaaaaaa';
            $userappsecret='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';// 我们在申请微信自定义菜单时,要用到appid和appsecret,可以在微信公众平台获得.
			if(!$_SESSION['wecha_id']){//如果session的wecha_id为空 
            if (!isset($_GET['code'])) {//如果没有取得code,跳到微信公众平台,取得code
                $customeUrl ='http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
                    $scope = 'snsapi_base';
                $oauthUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $userappid . '&redirect_uri=' . urlencode($customeUrl) . 
'&response_type=code&scope=' . $scope . '&state=oauth#wechat_redirect';
//scope:应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo 
(弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
     header('Location:' . $oauthUrl);//跳转到:http://网址/本页面.php?code=00b788e3b42043c8459a57a8d8ab5d9f&state=oauth 
 }
            if (isset($_GET['code']) && isset($_GET['state']) && ($_GET['state'] == 'oauth')) {//如果从上面取得了code
                $rt = $this->curlGet('https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $userappid . '&secret=' . $userappsecret . '&code=' . 
$_GET['code'] . '&grant_type=authorization_code');
                $jsonrt = json_decode($rt, 1);
                $openid = $jsonrt['openid'];//获取用户openid
                $access_token = $jsonrt['access_token'];
                if (!$openid) {//如果没有获得openid,
                        $this->error('授权不对::' . $jsonrt['errcode'], '#');
                        exit();
                }

                $_GET['wecha_id'] = $openid;
                $this->wecha_id = $openid;
            }
			$_SESSION['wecha_id']=$this->wecha_id;
			}else{
				$this->wecha_id=$_SESSION['wecha_id'];//如果session的wecha_id不为空 
 		}
        }else{//如果是ajax并且有wecha_id或者wecha_id=no(不需要网页授权,为了用于开发方便 )
            $this->wecha_id = I('get.wecha_id');
        }

        $this->assign('wecha_id', $this->wecha_id);

        $clientinfo = S('Clientinfo' . $this->wecha_id);//读取缓存中的clientinfo信息

        if ($clientinfo) {//如果clientinfo信息存在
	        	$this->userinfo=$clientinfo;
	        	$this->assign('userinfo',$this->userinfo); //直接显示用户页面,不需要再登录.  
        }else{
			$clientinfo = M('client')->where(array('wechat_id' => $this->wecha_id))->find();
	        if (!$clientinfo){//判断是否绑定wecha_id

                $this->display('Member/register');exit();//没有绑定则转到绑定页
	        }else{
				S('Clientinfo' . $this->wecha_id , $clientinfo); //如果已绑定则缓存clientinfo信息
			}
		}
        //判断用户是否冻结
        if($clientinfo['status']== -1){
            $info['title'] = '账户冻结提示';
            $info['infos'] = '尊敬的用户,您好!<br />系统检测您的账户存在异常,暂时无法使用服务';
            $this->assign('info',$info);
            $this->display('tips/message');
            exit;
        }
        $this->clientinfo = $clientinfo;
        $this->assign('Clientinfo',$clientinfo); 

	}	

}

?>

转载注明来自http://blog.p2hp.com/archives/2663

微信公众平台程序开发–获取用户信息
标签: