实例分析基于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常用函数 推荐收藏保存
Feb 21 PHP
PHP foreach循环使用详解与实例代码
May 08 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
php tp验证表单与自动填充函数代码
Feb 22 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 PHP
PDO实现学生管理系统
Mar 21 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
python实现删除文件与目录的方法
2014/11/10 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
python机器学习库常用汇总
2017/11/15 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
Python中if有多个条件处理方法
2020/02/26 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
机关财务管理制度
2014/01/17 职场文书
计算机软件专业求职信
2014/06/10 职场文书
转让协议书
2015/01/27 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
公司业务员管理制度
2015/08/05 职场文书
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript