工欲善其事必先利其器,想要开始相关操作,首先要鼓捣个公众号,至于公众号怎么注册这里不多说。我们先来配置一个测试账号用于测试微信的相关接口。
首先:登录自己的公众号后选择开发---》开发工具,如图
其次:选择该页面公众平台测试账号,点击进入,如图:
此时我们就获取到了测试账号的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 }