实例分析基于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 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
Oct 09 PHP
pw的一个放后门的方法分析
Oct 08 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
深入PHP FTP类的详解
Jun 13 PHP
yii框架通过控制台命令创建定时任务示例
Apr 30 PHP
PHP将进程作为守护进程的方法
Mar 19 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
php如何实现只替换一次或N次
Oct 29 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
Mar 09 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
mysql时区问题
2008/03/26 PHP
JS实现php的伪分页
2008/05/25 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
php5.3 注意事项说明
2013/07/01 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
详解JS数值Number类型
2018/02/07 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
Python生成随机密码
2015/03/10 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
参观考察邀请函范文
2014/01/29 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
冬季施工防火方案
2014/05/17 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
领导新年致辞2016
2015/07/29 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
Python集合的基础操作
2021/11/01 Python