一、
- 公众号认证
- 有网页授权获取用户基本信息的权限接口
二、
进入微信公众平台查看appId和appSecret
本地开发可以使用微信提供的微信公众平台测试账号来进行调试
微信测试账号登录地址为:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
三、
微信网页授权文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
四、大致步骤
1.首先引导用户进入授权页面同意授权,使用appId获取code
2. 通过code获取网页授权access_token,然后通过网页授权access_token和 openId即可获取到用户基本信息
// 授权回调地址
public function oauthurl()
{
$appid = 'xxxxxxxx';
$redirect_uri = urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']);//微信服务器回调url
$urls = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect";
return $urls;
}
public function index($code = "")
{
$appid = 'xxxxxxxx';
$appSecret = 'xxxxxxxxxx';
//1、获取微信用户信息,判断有没有code,
//有使用code换取access_token,没有去获取code。
if ($code == "") {//没有code,去微信接口获取code码
return $this->redirect($this->oauthurl());
} else {
//2. 获取access_token 和openid
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appSecret&code=$code&grant_type=authorization_code";
$res = $this->sendRequest($url);
if (!isset($res["access_token"])) {
return $this->redirect($this->oauthurl());
}
$access_token = $res["access_token"];
$openId = $res['openid'];
//3. 根据access_token 和openid 获取用户信息
$getUserInfo = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openId&lang=zh_CN";
$user_info = $this->sendRequest($getUserInfo);
// 取出用户信息
$res['openid'] = $user_info['openid'];
$res['nickname'] = $user_info['nickname'];
$res['avatar'] = $user_info['headimgurl'];
$res['province'] = $user_info['province'];
$res['city'] = $user_info['city'];
$res['sex'] = $user_info['sex']; //值为1时是男性,值为2时是女性,值为0时是未知
//$this->assign('data', $res);
$this->assign('openid', $user_info['openid']);
$this->assign('nickname', $user_info['nickname']);
$this->assign('headimgurl', $user_info['headimgurl']);
$user = new User();
$curUser = $user->where('openid', $user_info['openid'])->find();
if ($curUser) {
$user->openid = $user_info['openid'];
$user->nickname = $user_info['nickname'];
$user->avatar = $user_info['headimgurl'];
$user->province = $user_info['province'];
$user->city = $user_info['city'];
$user->sex = $user_info['sex'];
$user->save();
}
return $this->fetch('index');
}
}
案例:不二家登录