微信公众平台实现获取用户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 print类函数使用总结
Jun 25 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
php返回相对时间(如:20分钟前,3天前)的方法
Apr 14 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
May 04 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
Yii2中添加全局函数的方法分析
May 04 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
PHP基于array_unique实现二维数组去重
Jul 14 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
php中文验证码实现示例分享
2014/01/12 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
PHP加密解密实例分析
2015/12/25 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
服务员自我评价
2014/01/25 职场文书
机械机修工岗位职责
2014/08/03 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
一文简单了解MySQL前缀索引
2022/04/03 MySQL
基于PyQt5制作一个群发邮件工具
2022/04/08 Python
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫