微信公众平台实现获取用户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分页类的代码
May 18 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
php基于mcrypt的加密解密实例
Oct 27 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
php生成gif动画的方法
Nov 05 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 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
php 强制下载文件实现代码
2013/10/28 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
php模拟用户自动在qq空间发表文章的方法
2015/01/07 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
js随机生成一个验证码
2017/06/01 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
函授自我鉴定范文
2014/02/06 职场文书
大学秋游活动方案
2014/02/11 职场文书
运动会入场词60字
2014/02/15 职场文书
《满井游记》教学反思
2014/02/26 职场文书
精神文明建设标语
2014/06/16 职场文书
建筑工地标语
2014/06/18 职场文书
宾馆安全管理制度
2015/08/06 职场文书
高效课堂教学反思
2016/02/24 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
python urllib库的使用详解
2021/04/13 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server