微信公众平台实现获取用户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+xslt在windows平台上
Oct 09 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
php图片缩放实现方法
Feb 20 PHP
php 邮件发送问题解决
Mar 22 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
是 WordPress 让 PHP 更流行了 而不是框架
Feb 03 PHP
php 数组字符串搜索array_search技巧
Jul 05 PHP
laravel学习教程之关联模型
Jul 30 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
PHP操作Redis常用技巧总结
Apr 24 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
建立动态的WML站点(二)
2006/10/09 PHP
mysql 字段类型说明
2007/04/27 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
python批量赋值操作实例
2018/10/22 Python
python绘制多个子图的实例
2019/07/07 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
会计辞职信范文
2014/01/15 职场文书
2014全国两会心得体会
2014/03/17 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript