php微信公众平台开发之获取用户基本信息


Posted in PHP onAugust 17, 2015

本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息,而无需模拟登录。

把微信和第三方网站结合起来运行,是许多客户经常要的方案。这里简要介绍一下获取微信用户的基本信息,并在第三方网站直接登录。

当微信公户关注一个公众号时,会产生一个独一无二的OpenID,此时我们就需要用到它去请求微信服务器获取用户的基本信息,包括头像,昵称等。

更加详细的说明请参考 微信开发文档 。

获取的步骤如下:

1 第一步:用户同意授权,获取code
2 第二步:通过code换取网页授权access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
5 附:检验授权凭证(access_token)是否有效

一、在微信公众平台 —— 开发者中心 : 网页授权获取用户基本信息 :点击 “修改”,配置网页回调域名

php微信公众平台开发之获取用户基本信息

二、用户授权获取code

必备资源:

$appid = ‘*****************';
$appsecret = ‘*************************';

注:redirect_url是授权后重定向的回调链接地址,请使用urlencode对链接进行处理。

在网站入口处加上配置的  $url = ‘https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri=http%3A%2F%2Fjixian.c.zmit.cn%2F&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect';

并请求访问上诉 url 。

当用户授权后,回调设置的域名,并会在url参数中拼接我们所需要的code,我们直接用 $_GET[‘code'] 获取即可!

三、通过code获取网页授权access_token和openid

$token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
$token = json_decode(file_get_contents($token_url));
$opendid= $token->openid;
$access_token = $token->access_token;

四、获取用户信息

$info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$opendid.'⟨=zh_CN';
$info = json_decode(file_get_contents($info_url));
$data['name'] = $info->nickname;
$data['image'] = $info->headimgurl;
print_r($info);

五、当获取到用户的openid等信息后,我们就可以将其存入数据库,只要有openid了,就相当于微信用户已经登录该网站!

使用AppID和AppSecret获取的access_token,通过全局Access Token获取用户基本信息

1. 用户关注以及回复消息的时候,均可以获得用户的OpenID

<xml>
 <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>
 <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName>
 <CreateTime>1372307736</CreateTime>
 <MsgType><![CDATA[event]]></MsgType>
 <Event><![CDATA[subscribe]]></Event>
 <EventKey><![CDATA[]]></EventKey>
</xml>

其中的FromUserName就是OpenID

2. 然后使用access_token接口,请求获得全局Access Token

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
返回结果:

{
 "access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ",
 "expires_in": 7200
}

3. 再使用全局ACCESS_TOKEN获取OpenID的详细信息

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID
返回如下:

{
    "subscribe": 1,
    "openid": "oLVPpjqs2BhvzwPj5A-vTYAX4GLc",
    "nickname": "刺猬宝宝",
    "sex": 1,
    "language": "zh_CN",
    "city": "深圳",
    "province": "广东",
    "country": "中国",
    "headimgurl": "http://wx.qlogo.cn/mmopen/JcDicrZBlREhnNXZRudod9PmibRkIs5K2f1tUQ7lFjC63pYHaXGxNDgMzjGDEuvzYZbFOqtUXaxSdoZG6iane5ko9H30krIbzGv/0",
    "subscribe_time": 1386160805
}

至此,获得用户的基本信息。

这种方式最适合用户在关注的时候,回复一条欢迎关注+用户昵称的信息,如关注下面公众账号时的回复所示。扫描二维码可体验。

 php微信公众平台开发之获取用户基本信息

php微信公众平台开发之获取用户基本信息

php微信公众平台开发之获取用户基本信息

以上就是本文针对php微信公众平台开发之获取用户基本信息的全部内容,希望大家喜欢。

PHP 相关文章推荐
一个捕获函数输出的函数
Feb 14 PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
PHP 数组排序方法总结 推荐收藏
Jun 30 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
Jun 05 PHP
ThinkPHP中自定义错误页面和提示页面实例
Nov 22 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
php文件上传简单实现方法
Jan 24 PHP
php正则表达式学习笔记
Nov 13 PHP
php实现面包屑导航例子分享
Dec 19 PHP
Smarty变量用法详解
May 11 PHP
php提取微信账单的有效信息
Oct 01 PHP
PHP数组对象与Json转换操作实例分析
Oct 22 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 #PHP
php中switch语句用法详解
Aug 17 #PHP
Linux系统下PHP-FPM的安装和配置教程
Aug 17 #PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 #PHP
ThinkPHP开发框架函数详解:C方法
Aug 14 #PHP
提高php编程效率技巧
Aug 13 #PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 #PHP
You might like
星际争霸任务指南——神族
2020/03/04 星际争霸
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
浅析PHP开发规范
2018/02/05 PHP
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
jquery获取节点名称
2015/04/26 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python标准库defaultdict模块使用示例
2015/04/28 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
Java程序开发中如何应用线程
2016/03/03 面试题
护理专业推荐信
2013/11/07 职场文书
行政助理工作职责范本
2014/03/04 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
不同意离婚代理词
2015/05/23 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL