微信公众平台开发如何获取用户信息呢,我们以只获取用户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
相关博文
微信公众平台程序开发–获取用户信息