话不多说,根据官方文档需求说明,首先接口权限设置修改
先根据你的URL配置一下授权回调页域名
微信公众平台OAuth2.0授权的详细步骤如下
1)用户关注微信公众号。
2)微信公众号提供用户请求授权页面URL。
3)用户点击授权页面URL,将向服务器发送请求。
4)服务器询问用户是否同意授权给微信公众号(scope为snsapi_base时无此步骤)。
5)用户同意(scope为snsapi_base时无此步骤)。
6)服务器将code通过回调传给微信公众号。
7)微信公众号获得code。
8)微信公众号通过code向服务器请求access token.
9)服务器返回access token和Openid给微信公众号.
10)微信公众号通过access token向服务器请求用户信息(scope为snsapi_base时无此步骤)
11)服务器将用户信息回送给微信公众号(scope为snsapi_base时无此步骤)
下面简述一下snsapi_base与snsapi_userinfo区别
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
下面直接上授权请求代码
这个就是拼接请求的接口代码 weixin.class.php
<?php
class class_weixin
{ var $appid = "youappid"; var $appsecret = "youappsecret";//构造函数,获取Access Token
public function __construct($appid = NULL, $appsecret = NULL) { if($appid && $appsecret){ $this->appid = $appid; $this->appsecret = $appsecret; } }//生成OAuth2的URL
public function oauth2_authorize($redirect_url, $scope, $state = NULL) { $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".$redirect_url."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect"; return $url; }//生成OAuth2的Access Token
public function oauth2_access_token($code) { $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authorization_code"; $res = $this->http_request($url); return json_decode($res, true); }//获取用户基本信息(OAuth2 授权的 Access Token 获取 未关注用户,Access Token为临时获取)
public function oauth2_get_user_info($access_token, $openid) { $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; $res = $this->http_request($url); return json_decode($res, true); } //获取token public function token(){ $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=".client_credential."&appid=".$this->appid."&secret=".$this->appsecret.""; $res = $this->http_request($url); return json_decode($res, true); } //获取用户基本信息public function get_user_info($access_token,$openid)
{ //$url = "https//api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->access_token."&openid=".$openid."&lang=zh_CN"; $url= "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; $res = $this->http_request($url); return json_decode($res, true); }//HTTP请求(支持HTTP/HTTPS,支持GET/POST)
protected function http_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); curl_close($curl); return $output; }}
下面是授权获取微信用户个人信息的请求代码
<?php
require_once('weixin.class.php');
$weixin = new class_weixin();if (!isset($_GET["code"])){ //判断有没有获取到code值,code相当于是和微信服务器请求的凭证,来换取access token
$redirect_url = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $jumpurl = $weixin->oauth2_authorize($redirect_url, "snsapi_userinfo", "123"); Header("Location: $jumpurl");}else{ $access_token_oauth2 = $weixin->oauth2_access_token($_GET["code"]); $token=$weixin->token(); $userinfo = $weixin->get_user_info($token["access_token"], $access_token_oauth2['openid']); var_dump($userinfo); //这边就打印出了用户的个人信息了
?>
下面附上打印出来的结果
array(16) { ["subscribe"]=> int(1) ["openid"]=> string(28) "okGKvv6xpZ4FzfPBB5CbPkqdH-QI" ["nickname"]=> string(12) "匠人精神" ["sex"]=> int(1) ["language"]=> string(5) "zh_CN" ["city"]=> string(0) "" ["province"]=> string(0) "" ["country"]=> string(36) "南乔治亚岛和南桑德韦奇岛" ["headimgurl"]=> string(138) "http://thirdwx.qlogo.cn/mmopen/nbQibjkByWwve7MQlPQgceoKJQmZRJwmibMcHfnmIeltGuOdkdwCOlxicic7wBlhHnicmE9r6gORKq18wFRyPia07Via3YUn2OJ5ghe/132" ["subscribe_time"]=> int(1533544648) ["remark"]=> string(0) "" ["groupid"]=> int(0) ["tagid_list"]=> array(0) { } ["subscribe_scene"]=> string(17) "ADD_SCENE_QR_CODE" ["qr_scene"]=> int(0) ["qr_scene_str"]=> string(0) "" }