这篇文章主要介绍了微信公众平台实现获取用户OpenID的方法,需要开发人员经过微信授权后获取高级接口才能使用此功能,用户OpenID对于微信公众平台建设有着非常广泛的用途,需要的朋友可以参考下

本文实例讲述了微信公众平台实现获取用户OpenID的方法。分享给大家供大家参考。具体分析如下:

用户点击微信自定义菜单view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,但是view不能获取用户的openid,需要使用微信“网页授权获取用户基本信息”高级接口结合使用,获得用户的登入个人信息。

具体方法:

1、配置网页授权回调域名,如 www.jb51.net

2、模拟公众号的第三方网页,//www.jb51.net/getcodeurl.php

<?php
if(isset($_SESSION['user'])){
print_r($_SESSION['user']);
exit;
}
$APPID='公众号在微信的appid';
$REDIRECT_URI='//www.jb51.net/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
////www.jb51.net/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的微信公众平台开发有所帮助。

转载;https://www.jb51.net/article/64174.htm

最新文章

  1. 由css reset想到的深入理解margin及em的含义
  2. 初学Python遇到的问题一二
  3. 关于《rsyslog+mysql+loganalyzer搭建日志服务器&lt;个人笔记&gt;》的反思
  4. 如果重新设计网络,有没有可能合并IP地址跟MAC地址?
  5. The illustrated guide to a Ph.D.
  6. erlang局域网内节点通信——艰难四步曲 (转)
  7. js select onchange事件
  8. 启动RIDE时报错:wxPython not found
  9. 处理json中的异常字符
  10. c# 柱状图(转载)
  11. iOS swift lazy loading
  12. Samza/KafkaAnalysizing
  13. UVa 727 - Equation
  14. Python笔记&#183;第五章—— 列表(List) 的增删改查及其他方法
  15. 【模板小程序】求第n个fibonacci数
  16. Vue: 用 key 管理可复用的元素
  17. delete,truncate ,drop区别
  18. react router @4 和 vue路由 详解(二)react-router @4用法
  19. java int and Integer
  20. SVM学习(五):松弛变量与惩罚因子

热门文章

  1. pandas:由列层次化索引延伸的一些思考
  2. linux下centos7中mysql崩溃问题的解决
  3. JZOJ5371 组合数问题
  4. browser-sync 文件监听失败的解决方案
  5. express的web server设置流程
  6. 动态加载与插件系统的初步实现(二):AppDomain卸载与代理
  7. SpringBoot之MongoTemplate的查询可以怎么耍
  8. JUC——线程同步锁(Condition精准控制)
  9. kubernetes集群部署mysql 8.0
  10. Linux 做网关