微信公众平台实现获取用户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简单系统查询模块代码打包下载
Jun 07 PHP
php 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
PHP之密码加密的几种方式
Jul 29 PHP
PHP二维数组矩形转置实例
Jul 20 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 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.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
vue小白入门教程
2018/04/02 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
合作意向书范本
2014/03/31 职场文书
公司回复函格式
2015/07/14 职场文书
2016高考寄语集锦
2015/12/04 职场文书
求职信如何撰写?
2019/05/22 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers