隔着屏幕轻易产生感情的你,肯定很孤独吧。

公司要做微信网页授权,看了看别人的代码,站在了巨人的肩膀上之后又根据项目做了一些修改适应,这篇文章先记录一个比较官方的操作方法,会在另一篇文章里记录根据公司具体的项目进行更改的一些操作。
首先各种申请账号,获取appid、sercert之类的跳过,直接说代码部分。
功能是使用的OAuth2.0方式弹出授权页面获得用户基本信息。还有一种方式是用户关注以及回复消息的时候,均可以获得用户的OpenID。
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’];
}
//微信用户授权登录
这里跳转到微信的授权登录,redirect_uri的域名需要写你微信后台配置的域名。
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);
}
授权成功,微信会跳转回你写的回调网址,带上code等参数,然后就可以用code获取access_token和用户的openid
//微信回调地址
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’);

分类: PHP

0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据