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

[微信公众平台|开发文档] 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. JavaScript获取DOM元素位置和尺寸大小
  2. Softmax 回归 vs. k 个二元分类器
  3. opengl 反走样 混合 多重采样 blend multisample
  4. nyoj 10 skiing(DAG上的最长路,备忘录方法)
  5. mybatis配置properties属性
  6. mac安全与隐私只有两个选项,少了一个任何来源
  7. 关于js获取radio和select的属性并控制
  8. php实现文件留言,PHP文件操作及实例:留言板
  9. linux服务器怎么防,Linux服务器防攻击的各种方案
  10. 深度揭秘阿里云 Serverless Kubernetes
  11. HTML实现点击时的阴影(:active)(已解决iOS微信上无法使用)
  12. 获得邮件列表失败_邮件经常失败回弹很糟心?一定要知道这几个小知识
  13. 看到前一篇文章的感慨
  14. #paragma详解
  15. 《无人机DIY》——导读
  16. 支付宝网页支付(签名)
  17. 【bzoj3162】独钓寒江雪
  18. python闲鱼监控_推荐一个可玩的爬虫开源项目-闲鱼部分我已经测试过
  19. 【CAD】多段线的合并与闭合的操作与测试
  20. 常见的请求错误HTTP状态码

热门文章

  1. 初二因式分解奥数竞赛题_(完整)初中数学竞赛因式分解专题
  2. 第四十五讲:神州防火墙P2P流量控制配置
  3. android 通过电话号码来获取联系人姓名
  4. 数据标注基础知识:文本数据标注的类型及应用场景
  5. 一看就懂!任务提交的资源判断在Taier中的实践
  6. VMware Workstation实例二:单IP的虚拟机提供外网访问
  7. hbase bulkload java,HBase Bulkload 失败问题处理以及改进
  8. redis 安装
  9. Docker部署percona
  10. 计算机打开查看方式默认是什么样,如何设置电脑文件夹默认查看方式