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 相关文章推荐
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
PHP异常处理浅析
May 12 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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
PHP集成FCK的函数代码
2008/09/27 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
js读取cookie方法总结
2014/10/31 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
常用python编程模板汇总
2016/02/12 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
董事长职责范文
2013/11/08 职场文书
针对吵架老公保证书
2015/05/08 职场文书
教师读书活动心得体会
2016/01/14 职场文书
5道关于python基础 while循环练习题
2021/11/27 Python
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android