不经过悉心栽培,花儿开不出鲜艳的花朵;不经过时间的历练,幼苗长不成参天大树。

[微信公众平台开发]网页授权获取用户信息thinkphp示例代码

php 建伟 4807℃ 0评论

开头要说明一下,微信公众号获取授权有俩种方式,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,

第一种是用户关注以及回复消息的时候,均可以获得用户的OpenID,然后通过AppSecret即可获取access_token,另外一种就是本文中要说到的。

–>通过OAuth2.0方式弹出授权页面获得用户基本信息:

1.在公众号后台设置回调域名

2.拼接请求构造代码,跳转至微信的用户授权页:看代码注释

protected function checkValid(){
   //检测用户是否已经授权登录
   if(empty(session('user'))){
      //没有的话跳转授权登录方法
      return $this->wx_login();
   }
   $this->UserId=session('user')['userid'];
   $this->UserOpenid=session('user')['useropenid'];
   $this->UserName=session('user')['username'];
   $this->UserHeadimg=session('user')['userheadpic'];
}


//微信用户授权登录
public function wx_login(){
   $appid = "xxxxxxxxxx";
   $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri=http://xxx.com/user/index/wx_callback.html&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
   header("Location:".$url);
}

代码中的xxx.com就是第一步中设置的回调域名

在微信的用户授权页,如果用户选择了“同意授权”,则微信重新回跳的到用户设置的回跳地址时,会附带上code参数。

3.在回跳url中,首先从请求中取得code,然后根据code进一步换取openid和access_token,然后就可以根据openid和access_token调用微信的相关接口查询用户信息了。

//微信回调地址
public function wx_callback(){
   $appid = "xxxxxx";
   $secret = "xxxxxxx";
   $code = $_GET["code"];
   $get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
   //换取spenid和access_token
   $ch = curl_init();
   curl_setopt($ch,CURLOPT_URL,$get_token_url);
   curl_setopt($ch,CURLOPT_HEADER,0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
   $res = curl_exec($ch);
   curl_close($ch);
   $json_obj = json_decode($res,true);
   //这里做token缓存

   //根据openid和access_token查询用户信息
   $access_token = $json_obj['access_token'];
   $openid = $json_obj['openid'];
   //获取用户信息接口
   $get_user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';

   $ch = curl_init();
   curl_setopt($ch,CURLOPT_URL,$get_user_info_url);
   curl_setopt($ch,CURLOPT_HEADER,0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
   $res = curl_exec($ch);
   curl_close($ch);

   //解析json
   $user_obj = json_decode($res,true);
   //获得用户信息后  判断是否记录过
   $data['useropenid']=$user_obj['openid'];
   $data['username']=$user_obj['nickname'];
   $data['userheadpic']=$user_obj['headimgurl'];

   $user_data=db('user')->where('useropenid',$user_obj['openid'])->field('userid,useropenid,username,userheadpic')->find();

   if($user_data){
      //说明登录过  修改信息 存储session
      db('user')->where('userid',$user_data['userid'])->update($data);
      session('user',$user_data);
   }else{
      //未登录  先登记信息
      $data['usercreatetime']=time();
      $id=db('user')->insertGetId($data);
      $data['userid']=$id;
      session('user',$data);
   }

   //跳转回首页
   return $this->redirect('/user/index');

以上代码只是个基本例子,具体还待优化,仅供参考。

 

 

转载请注明:Li Jianwei's Blog » [微信公众平台开发]网页授权获取用户信息thinkphp示例代码

喜欢 (5)or分享 (0)
web技术交流群
22765697