实例分析基于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,不用COM,生成excel文件
Oct 09 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
php获取新浪微博数据API实例
Nov 12 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
PHP获取文件行数的方法
Jun 10 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
基础的WordPress插件制作教程
Nov 24 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 PHP
Laravel框架查询构造器简单示例
May 08 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面向对象全攻略 (七) 继承性
2009/09/30 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
javascript 闭包详解
2015/02/15 Javascript
javascript控制台详解
2015/06/25 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
python递归计算N!的方法
2015/05/05 Python
Django中使用locals()函数的技巧
2015/07/16 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
Django中Forms的使用代码解析
2018/02/10 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
Python创建临时文件和文件夹
2020/08/05 Python
sealed修饰符是干什么的
2012/10/23 面试题
园林资料员岗位职责
2013/12/30 职场文书
医师定期考核实施方案
2014/05/07 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
团员年度个人总结
2015/02/26 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL
php修改word的实例方法
2021/11/17 PHP