所有微信开发的相关内容,都需要参考官方文档。

[微信公众平台|开发文档] http://mp.weixin.qq.com/wiki/home/。

一、通过网页授权,可以获取用户微信的基本信息。

二、总共有5个步骤:

1 :用户同意授权,获取code

2 :通过code换取网页授权access_token

3 :刷新access_token(如果需要)

4 :拉取用户信息(需scope为 snsapi_userinfo)

5 附:检验授权凭证(access_token)是否有效

三、每一个步骤的实现。

1 :用户同意授权,获取code

/*** @explain* 获取code,用于获取openid和access_token* @remark* code只能使用一次,当获取到之后code失效,再次获取需要重新进入* 不会弹出授权页面,适用于关注公众号后自定义菜单跳转等,如果不关注,那么只能获取openid**/public function getCode(){if (isset($_GET["code"])) {return $_GET["code"];} else {$str = "location: https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->appid . "&redirect_uri=" . $this->index_url . "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";header($str);exit;}}

2 :通过code换取网页授权access_token

/*** @explain* 用于获取access_token,返回的<span style="font-family: Arial, Helvetica, sans-serif;">$access_token_array中也包含有用户的openid信息。</span>
**/public function getOpenId(){$access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->appsecret . "&code=" . $this->code . "&grant_type=authorization_code";$access_token_json = $this->https_request($access_token_url);$access_token_array = json_decode($access_token_json, TRUE);return $access_token_array;}

3 :刷新access_token(如果需要)

这一步直接略过。

4 :拉取用户信息(需scope为 snsapi_userinfo)

/*** @explain* 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token**/public function getUserInfo(){$userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$this->access_token['access_token'] ."&openid=" . $this->access_token['openid']."&lang=zh_CN";$userinfo_json = $this->https_request($userinfo_url);$userinfo_array = json_decode($userinfo_json, TRUE);return $userinfo_array;}

至此四个步骤全部完成。

四、完整代码。实际项目使用TP3.2.3。

<?phpnamespace Wechat\Controller;use Think\Controller;//微信接口基础类,其他微信类都继承这个基础类。可以自动判断用户状态,获取用户信息。
class WxbaseController extends Controller
{public $appid = 'wxba09d9f0fed4b84b';                   //微信APPID,公众平台获取public $appsecret = '332c2b1fc1eb282c0136b73723db4237'; //微信APPSECREC,公众平台获取public $index_url = "http://www.你的域名.cn/项目目录/index.php?m=分组&c=控制器&a=方法";  //微信回调地址,要跟公众平台的配置域名相同public $code;public $openid;/***检测有无$_SESSION。<span style="font-family: Arial, Helvetica, sans-serif;">如果有,直接忽略。</span>
*如果没有$<span style="font-family:Arial, Helvetica, sans-serif;">_SESSION</span>,就依次执行getCode、getOpenId、getUserInfo来获取用户信息。目的是解决CODE只能获取一次,刷新页面openid会丢失的问题。*再判断是否在数据库中,没有则写入数据库。最后将open_id写入session。
<span style="white-space:pre">  </span>*/public function _initialize(){if (!$_SESSION['openid']) {                             //如果$_SESSION中没有openid,说明用户刚刚登陆,就执行getCode、getOpenId、getUserInfo获取他的信息$this->code = $this->getCode();$this->access_token = $this->getOpenId();$userInfo = $this->getUserInfo();if ($userInfo) {$ins = M('Wechat_user_info');<span style="white-space:pre">       </span>    //其他框架请自行调整方法。$map['openid'] = $userInfo['openid'];$result = $ins->where($map)->find();            //根据OPENID查找数据库中是否有这个用户,如果没有就写数据库。继承该类的其他类,用户都写入了数据库中。if (!$result) {$ins->add($userInfo);}session('openid', $userInfo['openid']);         //写到$_SESSION中。微信缓存很坑爹,调试时请及时清除缓存再试。}}}/*** @explain* 获取code,用于获取openid和access_token* @remark* code只能使用一次,当获取到之后code失效,再次获取需要重新进入* 不会弹出授权页面,适用于关注公众号后自定义菜单跳转等,如果不关注,那么只能获取openid**/public function getCode(){if (isset($_GET["code"])) {return $_GET["code"];} else {$str = "location: https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->appid . "&redirect_uri=" . $this->index_url . "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
header($str);exit;}}/*** @explain* 用于获取用户openid**/public function getOpenId(){$access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->appsecret . "&code=" . $this->code . "&grant_type=authorization_code";$access_token_json = $this->https_request($access_token_url);$access_token_array = json_decode($access_token_json, TRUE);return $access_token_array;}/*** @explain* 通过code获取用户openid以及用户的微信号信息* @return* @remark* 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token* access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s. 7200s后access_token失效**/public function getUserInfo(){$userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$this->access_token['access_token'] ."&openid=" . $this->access_token['openid']."&lang=zh_CN";$userinfo_json = $this->https_request($userinfo_url);$userinfo_array = json_decode($userinfo_json, TRUE);return $userinfo_array;}/*** @explain* 发送http请求,并返回数据**/public function https_request($url, $data = null){$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)) {curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($curl);curl_close($curl);return $output;}
}

微信开发之微信网页授权 完整示例相关推荐

  1. 【wechat】微信开发——OAuth2.0网页授权

    一.框架.工具 spring+springMvc+idea 二.具体实现 1.首先需要了解一下微信提供的API开发文档 2.目的:授权后可获取用户基本信息,进而实现业务逻辑 3.需要的配置(参看API ...

  2. 连小白都能看懂的微信开发之 微信自定义菜单 + 获取网页授权 + 获取用户信息

    微信自定义菜单+获取网页授权+获取用户信息 今天项目需要一个需求,就是添加一个菜单接口,并且还可以获取用于的信息,从而根据用户的信息去做一些业务的查询.通过百度和自己查看文档大致的解决办法如下: 注意 ...

  3. 微信公众平台开发OAuth2.0网页授权(转)

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息  作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在 ...

  4. 企业微信三方开发(三):网页授权登录

    其他链接 初识微信开发 企业微信三方开发:注册企业微信服务商 企业微信三方开发(一):回调验证及重要参数获取 企业微信三方开发(二):获取access_token 企业微信三方开发(三):网页授权登录 ...

  5. 微信公众号的网页授权如何在本地调试?

    调试微信公众号的网页授权时,要填写网页授权域名(如图1),否则授权的时候会提示redirect_uri参数错误(图2),可是我得在localhost先调试成功才能上传到实际的网站上吧,可是这里不支持l ...

  6. 微信鉴权服务器地址,微信开发之微信授权登录

    本篇教程探讨了微信开发之微信授权登录,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 应用场景是:用Hbuilder打包app,在app中点击微信授权登录或者某一操作, ...

  7. 微信公众号-测试号-网页授权

    微信公众号-测试号-网页授权 自己摸索几天,总算搞清楚了 第一步 登录微信公众号平台,开发者工具菜单进入公众平台测试账号 第二步 设置网页帐号 网页授权获取用户基本信息的域名,测试号是可以用ip和域名 ...

  8. php 微信 语音,PHP语言微信开发:微信录音临时转永久存储

    本文主要向大家介绍了PHP语言微信开发:微信录音临时转永久存储,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 最近做开发的时候碰到了这个问题,甲方希望用户在微信端的录音能够一直有效.就 ...

  9. 微信开发:微信js_sdk 分享,前端部分(二)

    微信开发:微信js-sdk前端分享,代码如下: <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> ...

最新文章

  1. php jwt使用案例,PHP使用JWT创建Token的实例详解
  2. 悉尼大学陶大程:遗传对抗生成网络有效解决GAN两大痛点
  3. 小米平板android版本,除了安卓MIUI7,小米平板2为什么要推出Win10版?
  4. c语言循环设计思想结构,C语言程序设计_05循环结构程序设计讲述.pptx
  5. 003thinkphp 数据库查询及表关联
  6. Vue2 MVVM 双向绑定(数据劫持+发布者-订阅者模式)
  7. linux单块网卡绑定多个ip及网卡聚合绑定多个ip方法
  8. 注解的DI以及动态代理
  9. C++11 继承构造函数与委托构造函数
  10. 什么款式蓝牙耳机玩游戏更舒适?五款小巧低延迟蓝牙耳机推荐
  11. HTML页面点击下载文件的简单实现方法
  12. vue将链接转为二维码的方法即插件
  13. ESP32 NVS同windows文件系统的类比,附上一段NVS操作的代码解析
  14. ikbc键盘组合功能键
  15. 计算机毕业设计ssm高校学生社团管理系统n4pcu系统+程序+源码+lw+远程部署
  16. word文档太大怎么压缩到最小
  17. Android实现更换皮肤功能
  18. 【ROS】将odom里程计数据转换为path路径消息
  19. 毫米波雷达ADC数据采集
  20. c语言程序学生籍贯信息记录,c语言程序学生籍贯信息记录簿设计.doc

热门文章

  1. 一年中的某周转换成当前周星期一和星期日的日期
  2. vue中this.$router.params接收传值为空咋办
  3. Access根据出生日期计算年龄_小技巧 | 在SPSS中根据出生日期计算年龄
  4. 刷新浏览器后不进行任何点击操作时,不播放声音 | 解决方案(VUE-Element)
  5. 互联网晚报 | 10月17日 星期日 | 锤子论坛宣布下线;《长津湖》跻身中国影史票房前四;华为云专属月·行业深耕专项行动开启...
  6. python记忆式键入,在Python编程模式下输入命令”print(100+200)“执行的结果是()
  7. 计算机启动一下就停机,电脑启动一下就停了怎么办_电脑启动一下就停了是什么原因-win7之家...
  8. localhost和127.0.0.1有什么区别?
  9. 文盾信息非结构化数据安全解决方案,高效防护企业文档安全
  10. html5+植物大战僵尸,HTML5 Canvas植物大战僵尸 - 鳄梨射手