微信公众平台实现获取用户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与MySQL开发的8个技巧小结
Dec 17 PHP
php实现无限级分类实现代码(递归方法)
Jan 01 PHP
基于python发送邮件的乱码问题的解决办法
Apr 25 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
php数字运算验证码的实现代码
Jul 30 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
php异常处理捕获错误整理
Sep 23 PHP
基于laravel Request的所有方法详解
Sep 29 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 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对象转换为数组函数(递归方法)
2012/02/04 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
javascript 控制弹出窗口
2007/04/10 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
JS作用域链详解
2017/06/26 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
关于python3中setup.py小概念解析
2019/08/22 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
python处理写入数据代码讲解
2020/10/22 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
super()与this()的区别
2016/01/17 面试题
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
运动会解说词200字
2014/02/06 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
五五普法心得体会
2014/09/04 职场文书
运动会广播稿20字
2015/08/19 职场文书
2016年记者节感言
2015/12/08 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
vue elementUI批量上传文件
2022/04/26 Vue.js