实例分析基于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 相关文章推荐
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
解析php中反射的应用
Jun 18 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
PHP线程的内存回收问题
Jul 08 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 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
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python线程的两种编程方式
2015/04/14 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
python搜索算法原理及实例讲解
2020/11/18 Python
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
向领导表决心的话
2014/03/11 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
体育教师个人工作总结
2015/02/09 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
Mysql中mvcc各场景理解应用
2022/08/05 MySQL