微信网页授权接口调用实例解析

工欲善其事必先利其器,想要开始相关操作,首先要鼓捣个公众号,至于公众号怎么注册这里不多说。我们先来配置一个测试账号用于测试微信的相关接口。

首先:登录自己的公众号后选择开发---》开发工具,如图

微信网页授权接口调用实例解析

其次:选择该页面公众平台测试账号,点击进入,如图:

微信网页授权接口调用实例解析

此时我们就获取到了测试账号的appid和appsecret,如图

微信网页授权接口调用实例解析

再次:往下滚动页面,找到测试号二维码,扫描关注,以便下面使用

微信网页授权接口调用实例解析

下面步入正题,来说说自己对微信网页授权的一些愚见

1.经常见到的例子:

- 某个页面在微信中可以打开,但选择在浏览器中打开时会提示请在微信中打开

- 打开某个微信页面会弹出确认登录的页面

2.相关知识点:

- 网页授权接口两种scope的区别介绍

1.snsapi_base仅可以获取用户的openid;是静默授权的

2.snsapi_userinfo同时可以获取用户基本信息;需要用户手动同意

- 网页授权接口调用流程解析图

微信网页授权接口调用实例解析

- scope为snsapi_base值时接口调用实例并获取到openid的值

首先先要添加:授权回调页面域名:
在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

微信网页授权接口调用实例解析

这里我添加的是部署在新浪的SAE项目的网址:

微信网页授权接口调用实例解析

第二步编写PHP代码:

 1 <?php
 2 // 网页授权获取用户openid
 3 $code = $_GET['code'];
 4 $appId = "asdasdfasdfasdfasf";
 5 $appSecret = "asdfadsfasdfadf";
 6 $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appId}&secret={$appSecret}&code={$code}&grant_type=authorization_code";
 7 
 8 $openIdArr = json_decode(getToken($url), true);
 9 
10 //scope为snsapi_base是获取到的openid;
11 echo $openIdArr['openid'];
12 
13 function getToken($url) {
14     $ch = curl_init();
15     curl_setopt($ch, CURLOPT_URL, $url);
16     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
17     curl_setopt($ch, CURLOPT_HEADER, 0);
18     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko)");
19     curl_setopt($ch, CURLOPT_ENCODING, "gzip");//加入gzip解析
20     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
21     $output = curl_exec($ch);
22     curl_close($ch);
23 
24     return $output;
25 }

第三步,将编写的代码部署到新浪SAE,我这里用的git,git的相关命令:

1 git init
2 git remote add sae https://git.sinacloud.com/newapp
4 git add .
6 $ git commit -m"xxx"
8 $ git push sae master:1

第四步,通过自己的微信账号(要关注哦,要不没法接收信息)给自己发送消息
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

微信网页授权接口调用实例解析

链接中的APPID写测试账号的就行,REDIRECT_URI:写自己部署的文件的网址,我这里是新浪SAE的网址:http://xxx.applinzi.com/url-openid.php(url-openid.php就是上面我写代码的文件用git推送到网上的地址),SCOPE:snsapi_base

当微信收到咱们发送的消息时,进入点击收到的链接,就会跳转页面,页面跳转完成后,页面会输出获取到的openid,如果获取不到,请仔细检查上面的操作步骤是否有误。

- scope为snsapi_userinfo值时接口调用实例并获取用户基本信息

操作基本和上面一样,只是把第四步发送的url中的SCOPE替换为snsapi_userinfo

代码:

 1 <?php
 2 // 网页授权获取用户openid
 3 $code = $_GET['code'];
 4 $appId = "asdsadfasdfasdfasdf";
 5 $appSecret = "asdfasdfasdfasdfasdfasdf";
 6 $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appId}&secret={$appSecret}&code={$code}&grant_type=authorization_code";
 7 
 8 $openIdArr = json_decode(getToken($url), true);
 9 
10 $token = $openIdArr['access_token'];
11 $openId = $openIdArr['openid'];
12 
13 $url_userInfo = "https://api.weixin.qq.com/sns/userinfo?access_token={$token}&openid={$openId}&lang=zh_CN";
14 
15 $userInfoArr = (array)json_decode(getToken($url_userInfo));
16 
17 // print_r($userInfoArr);
18 
19 //输出用户的昵称、省份、城市
20 echo $userInfoArr['nickname']."<br/>".$userInfoArr['province']."<br/>".$userInfoArr['city'];
21 
22 
23 function getToken($url) {
24     $ch = curl_init();
25     curl_setopt($ch, CURLOPT_URL, $url);
26     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
27     curl_setopt($ch, CURLOPT_HEADER, 0);
28     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko)");
29     curl_setopt($ch, CURLOPT_ENCODING, "gzip");//加入gzip解析
30     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
31     $output = curl_exec($ch);
32     curl_close($ch);
33 
34     return $output;
35 }