微信公众平台实现获取用户OpenID的方法


Posted in PHP onApril 15, 2015

本文实例讲述了微信公众平台实现获取用户OpenID的方法。分享给大家供大家参考。具体分析如下:

用户点击微信自定义菜单view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,但是view不能获取用户的openid,需要使用微信“网页授权获取用户基本信息”高级接口结合使用,获得用户的登入个人信息。

具体方法:

1、配置网页授权回调域名,如 3water.com

2、模拟公众号的第三方网页,https://3water.com/getcodeurl.php

<?php 
if(isset($_SESSION['user'])){ 
 print_r($_SESSION['user']);
exit;
}
$APPID='公众号在微信的appid';
$REDIRECT_URI='https://3water.com/callback.php';
$scope='snsapi_base';
//$scope='snsapi_userinfo';//需要授权
$url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$APPID.'&redirect_uri='.urlencode($REDIRECT_URI).'&response_type=code&scope='.$scope.'&state='.$state.'#wechat_redirect';
header("Location:".$url);
?>

3、第三方网页的回跳url中,首先从请求中取得code,然后根据code进一步换取openid和access_token,然后就可以根据openid和access_token调用微信的相关接口查询用户信息了。

<?php
//https://3water.com/callback.php
$appid = "公众号在微信的appid"; 
$secret = "公众号在微信的app secret"; 
$code = $_GET["code"]; 
$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$get_token_url); 
curl_setopt($ch,CURLOPT_HEADER,0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
$res = curl_exec($ch); 
curl_close($ch); 
$json_obj = json_decode($res,true); 
//根据openid和access_token查询用户信息 
$access_token = $json_obj['access_token']; 
$openid = $json_obj['openid']; 
$get_user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN'; 

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$get_user_info_url); 
curl_setopt($ch,CURLOPT_HEADER,0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
$res = curl_exec($ch); 
curl_close($ch); 

//解析json 
$user_obj = json_decode($res,true); 
$_SESSION['user'] = $user_obj; 
print_r($user_obj); 
?>

希望本文所述对大家基于php的微信公众平台开发有所帮助。

PHP 相关文章推荐
PHP通用检测函数集合
Nov 25 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
PHP5函数小全(分享)
Jun 06 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
php 参数过滤、数据过滤详解
Oct 26 PHP
CodeIgniter常用知识点小结
May 26 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 PHP
php实现格式化多行文本为Js可用格式
Apr 15 #PHP
php截取指定2个字符之间字符串的方法
Apr 15 #PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 #PHP
基于linnux+phantomjs实现生成图片格式的网页快照
Apr 15 #PHP
微信API接口大全
Apr 15 #PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 #PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 #PHP
You might like
德劲1107的电路分析与打磨
2021/03/02 无线电
建立动态的WML站点(三)
2006/10/09 PHP
php框架Phpbean说明
2008/01/10 PHP
PHP学习 变量使用总结
2011/03/24 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
php生成图片缩略图的方法
2015/04/07 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
Python中的zipfile模块使用详解
2015/06/25 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
JAVA中的关键字有什么特点
2014/03/07 面试题
解释i节点在文件系统中的作用
2013/11/26 面试题
关于安全的标语
2014/06/10 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python