实例分析基于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动态创建Flash动画
Oct 09 PHP
PHP脚本的10个技巧(2)
Oct 09 PHP
php基础知识:类与对象(5) static
Dec 13 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
PHP详细彻底学习Smarty
Mar 27 PHP
php session 错误
May 21 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
Mar 15 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
PHP 模拟登陆功能实例详解
Sep 10 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 和 MySQL 基础教程(三)
2006/10/09 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
python 内置函数filter
2017/06/01 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
Python中zip函数如何使用
2020/06/04 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
大学生职业生涯规划书范文
2014/01/14 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
和睦家庭事迹
2014/05/14 职场文书
优秀毕业生求职信
2014/06/05 职场文书
增员口号大全
2014/06/18 职场文书
建筑学专业自荐书
2014/07/09 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
教师远程研修感悟
2015/11/18 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
JS数组方法some、every和find的使用详情
2021/10/05 Javascript