实例分析基于PHP微信网页获取用户信息


Posted in PHP onNovember 24, 2017

很多用户在开发微信版网页的时候,需要获取用户的基本信息,比如国家,省,市,昵称等,我们接下来基于PHP语言基础详细分析一下如何成功获取。

必要条件:

1)公众号认证

2)有网页授权获取用户基本信息的权限接口

注意:最近有朋友说:在公众平台申请的测试号,会出现无法取到用户信息。换到认证的公众账号就正常了!

如果您也遇到这个问题,可以试试在认证的公众账号里测试一下! 感谢大家的支持!

填写授权回调页面的域名

登录公众平台-->开发者中心-->接口权限表

找到 网页授权获取用户基本信息 然后修改-->填写你的域名.如下:

实例分析基于PHP微信网页获取用户信息

保存即可!

关于网页授权的两种scope的区别说明(官方)

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

因为scope有两中模式,所以下面分开解说:

scope为snsapi_base 那么用户必须是关注了公众号才能取得信息

先自己建立两个文件: index.php 和 getUserInfo.php

代码实例

index.php如下:

//scope=snsapi_base 实例
$appid='你的AppId';
$redirect_uri = urlencode ( 'http://你的域名/getUserInfo.php' );
$url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
header("Location:".$url);

getUserInfo.php如下:

$appid = "你的AppId";
$secret = "你的AppSecret";
$code = $_GET["code"];
//第一步:取全局access_token
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";
$token = getJson($url);
//第二步:取得openid
$oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
$oauth2 = getJson($oauth2Url);
 
//第三步:根据全局access_token和openid查询用户信息
$access_token = $token["access_token"];
$openid = $oauth2['openid'];
$get_user_info_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";
$userinfo = getJson($get_user_info_url);
//打印用户信息
print_r($userinfo);
function getJson($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}

scope为snsapi_userinfo 用户不用关注公众号,也能取到信息,但是会有一个界面让用户去点击确认!相当于一个登录授权吧!

代码实例

index.php如下:

//scope=snsapi_userinfo实例
$appid='你的AppId';
$redirect_uri = urlencode ( 'http://你的域名/getUserInfo.php' );
$url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
header("Location:".$url);

getUserInfo.php如下:

$appid = "你的AppId";
$secret = "你的AppSecret";
$code = $_GET["code"];
//第一步:取得openid
$oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
$oauth2 = getJson($oauth2Url);
//第二步:根据全局access_token和openid查询用户信息
$access_token = $oauth2["access_token"];
$openid = $oauth2['openid'];
$get_user_info_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";
$userinfo = getJson($get_user_info_url);
//打印用户信息
print_r($userinfo);
function getJson($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}

测试步骤:

创建index.php和getUserInfo.php两个文件后

先测试:scope为snsapi_base

1)先关注公众账号

2)将网址: http://你的域名/index.php 生成一个二维码!

3)用微信扫一扫

再测试:scope为snsapi_userinfo

1)替换代码

2)取消关注当前公众号.

3)然后用微信扫一扫,刚刚你生成的二维码.

PHP 相关文章推荐
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
深入解析Session是否必须依赖Cookie
Aug 02 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 PHP
laravel使用数据库测试注意事项
Apr 10 PHP
thinkPHP通用控制器实现方法示例
Nov 23 #PHP
PHP substr()函数参数解释及用法讲解
Nov 23 #PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 #PHP
PHP多维数组排序array详解
Nov 21 #PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 #PHP
ecshop添加菜单及权限分配问题
Nov 21 #PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 #PHP
You might like
杏林同学录(四)
2006/10/09 PHP
PHP二维数组去重算法
2016/12/17 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
javascript跨域请求包装函数与用法示例
2016/11/03 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
jQuery Ajax async=>false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python3里的super()和__class__使用介绍
2015/04/23 Python
Django Highcharts制作图表
2016/08/27 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
使用pyshp包进行shapefile文件修改的例子
2019/12/06 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
人事部主管岗位职责
2013/12/26 职场文书
应届大专生自荐书
2014/06/16 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
python 标准库原理与用法详解之os.path篇
2021/10/24 Python