实例分析基于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 相关文章推荐
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
php抓取页面的几种方法详解
Jun 17 PHP
解析php中array_merge与array+array的区别
Jun 21 PHP
php页面防重复提交方法总结
Nov 25 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
php链表用法实例分析
Jul 09 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
php实现三级级联下拉框
2016/04/17 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
php提取微信账单的有效信息
2018/10/01 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python中map和列表推导效率比较实例分析
2015/06/17 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
python中的decimal类型转换实例详解
2019/06/26 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
会计实训报告范文
2014/11/04 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技