7.3.1 网页授权获取个人信息
以下PHP代码实现了获取用户信息的功能。
1 class class_weixin
2 {
3 var $appid = APPID;
4 var $appsecret = APPSECRET;
5
6 // 构造函数,获取Access Token
7 public function __construct($appid = NULL, $appsecret = NULL)
8 {
9 if($appid && $appsecret){
10 $this->appid = $appid;
11 $this->appsecret = $appsecret;
12 }
13 }
14
15 // 生成OAuth2.0的URL
16 public function oauth2_authorize($redirect_url, $scope, $state = NULL)
17 {
18 $url = "https:// open.weixin.qq.com/connect/oauth2/authorize?appid=".$th
is->appid."&redirect_uri=".$redirect_url."&response_type=code&scope=".
$scope."&state=".$state."#wechat_redirect";
19 return $url;
20 }
21
22 // 生成OAuth2.0的Access Token
23 public function oauth2_access_token($code)
24 {
25 $url = "https:// api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->
appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authori
zation_code";
26 $res = $this->http_request($url);
27 return json_decode($res, true);
28 }
29
30 // 获取用户基本信息(OAuth2.0授权的Access Token获取。未关注用户,Access Token为临
// 时获取)
31 public function oauth2_get_user_info($access_token, $openid)
32 {
33 $url = "https:// api.weixin.qq.com/sns/userinfo?access_token=".$access_token.
"&openid=".$openid."&lang=zh_CN";
34 $res = $this->http_request($url);
35 return json_decode($res, true);
36 }
37
38 // 获取用户基本信息
39 public function get_user_info($openid)
40 {
41 $url = "https:// api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->
access_token."&openid=".$openid."&lang=zh_CN";
42 $res = $this->http_request($url);
43 return json_decode($res, true);
44 }
45
46 // HTTP请求(支持HTTP/HTTPS,支持GET/POST)
47 protected function http_request($url, $data = null)
48 {
49 $curl = curl_init;
50 curl_setopt($curl, CURLOPT_URL, $url);
51 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
52 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
53 if (!empty($data)){
54 curl_setopt($curl, CURLOPT_POST, 1);
55 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
56 }
57 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
58 $output = curl_exec($curl);
59 curl_close($curl);
60 return $output;
61 }
62 }
当使用网页授权时,使用下面代码获取code,然后进行跳转获得Access Token信息,进而获得用户基本信息。
1 require_once('weixin.class.php');
2 $weixin = new class_weixin;
3
4 if (!isset($_GET["code"])){
5 $redirect_url = 'http:// '.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
6 $jumpurl = $weixin->oauth2_authorize($redirect_url, "snsapi_userinfo", "123");
7 Header("Location: $jumpurl");
8 }else{
9 $access_token_oauth2 = $weixin->oauth2_access_token($_GET["code"]);
10 $userinfo = $weixin->oauth2_get_user_info($access_token_oauth2['access_token'],
$access_token_oauth2['openid']);
11 }
Web页面的代码如下。
1 <!DOCTYPE html>
2 <html lang="zh-cn">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width,initial-scale=1,user-
scalable=0">
6 <title>网页授权Demo</title>
7 <link rel="stylesheet" href="css/weui.min.css">
8 <link rel="stylesheet" href="css/example.css">
9 </head>
10 <body ontouchstart="">
11 <p>
12 <p>
13 <p>
14 <h1>微信网页授权</h1>
15 <p>方倍工作室 出品</p>
16 </p>
17 <p>
18 <p>个人信息</p>
19 <p>
20 <p>
21 <p>
22 <p>OpenID</p>
23 </p>
24 <p><?php echo $userinfo["op
enid"];?></p>
25 </p>
26 <p>
27 <p>
28 <p>头像</p>
29 </p>
30 <p><img src="<?php echo str
_replace("/0","/46",$userinfo["headimgurl"]);?>">
</p>
31 </p>
32 <p>
33 <p>
34 <p>昵称</p>
35 </p>
36 <p><?php echo $userinfo["nick
name"];?></p>
37 </p>
38 <p>
39 <p>
40 <p>性别</p>
41 </p>
42 <p><?php echo (($userinfo["sex"]
== 0)?"未知":(($userinfo["sex"] == 1)?"男":"女"));?>
</p>
43 </p>
44 <p>
45 <p>
46 <p>地区</p>
47 </p>
48 <p><?php echo $userinfo["coun
try"];?> <?php echo $userinfo["province"];?> <?php e
cho $userinfo["city"];?></p>
49 </p>
50 <p>
51 <p>
52 <p>语言</p>
53 </p>
54 <p><?php echo $userinfo["lan
guage"];?></p>
55 </p>
56 </p>
57 </p>
58 </p>
59 </p>
60 </body>
61 </html>
OAuth2.0获取个人信息如图7-23所示。