微信网页授权(OAuth2.0) PHP 源码简单实现


Posted in PHP onAugust 29, 2016

提要: 

1. 建议对OAuth2.0协议做一个学习。 

2. 微信官方文档和微信官网工具要得到充分利用。 
比较简单,直接帖源代码了。其中“xxxxxxxxxx”部分,是需要依据自己环境做替换的

/**
  * OAuth2.0微信授权登录实现
  *
  * @author zzy
  * @文件名:GetWxUserInfo.php
  */

 // 回调地址
 $url = urlencode("http://www.xxxxxxxxx.com/GetWxUserInfo.php");
 // 公众号的id和secret
 $appid = 'xxxxxxxxx';
 $appsecret = 'xxxxxxxxx';
 session_start();

 
 // 获取code码,用于和微信服务器申请token。 注:依据OAuth2.0要求,此处授权登录需要用户端操作
 if(!isset($_GET['code']) && !isset($_SESSION['code'])){
  echo 
  '<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6c11a252ff1d00c4
  &redirect_uri='.$url.'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect">
  <font style="font-size:30">授权</font></a>';
  
  exit;
 }
 
 // 依据code码去获取openid和access_token,自己的后台服务器直接向微信服务器申请即可
 if (isset($_GET['code']) && !isset($_SESSION['token'])){
  $_SESSION['code'] = $_GET['code'];
  
  $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid.
   "&secret=".$appsecret."&code=".$_GET['code']."&grant_type=authorization_code";
  $res = https_request($url);
  $res=(json_decode($res, true));
  $_SESSION['token'] = $res;
 }
 
 print_r($_SESSION);
 
 // 依据申请到的access_token和openid,申请Userinfo信息。
 if (isset($_SESSION['token']['access_token'])){
  $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$_SESSION['token']['access_token']."&openid=".$_SESSION['token']['openid']."&lang=zh_CN";
  echo $url;
  $res = https_request($url);
  $res = json_decode($res, true);
  
  $_SESSION['userinfo'] = $res;

 }
 
 print_r($_SESSION);

 // cURL函数简单封装
 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;
 }

得到正确结果如下:

Array
(
 [code] => 041GZI4l0tvGHg10N75l05FQ4l0GZI42
 [token] => Array
  (
   [access_token] => TWo6w5QMpzTZibu3FPh2k4EdC5bllp4sGeQkC4NbZtj-zti-ctZj1SrrNL1qGCf2lB1-6o3N7kh2bcxl5bxtQqJEGk1cq12l8CzF40R9XvA
   [expires_in] => 7200
   [refresh_token] => Iz3olCrkqPBOJvSSH2bOKvA09Sjvsp1c8Ltm7MvxxPfQXSbvI_WoVmzhjqASzwlMa7TAGgsg3mIJmaHjL7jrJHDqUF1jKbhd6GNDnLtXq0U
   [openid] => ota_XwQ4r_5nioVmshQ
   [scope] => snsapi_userinfo
  )

 [userinfo] => Array
  (
   [openid] => ota_XwQ4r_5nioVmshQq
   [nickname] => 野狐
   [sex] => 1
   [language] => zh_CN
   [city] => 杭州
   [province] => 浙江
   [country] => 中国
   [headimgurl] => http://wx.qlogo.cn/mmopen/PiajxSqBRaELwee7rhrt2ibnkC1MEnu04WiaWrw9FkuPBbGOgnrMbynNoEuxicgXOetW5VqQbTrS4fZDXNvAWsz6GQ/0
   [privilege] => Array
    (
    )

  )

)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php读取纯真ip数据库使用示例
Jan 26 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
PHP连接MySQL数据的操作要点
Mar 20 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
phpStorm2020 注册码
Sep 17 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 #PHP
Laravel 5.3 学习笔记之 配置
Aug 28 #PHP
Laravel 5.3 学习笔记之 安装
Aug 28 #PHP
PHP实现导出带样式的Excel
Aug 28 #PHP
Linux系统中为php添加pcntl扩展
Aug 28 #PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 #PHP
PHP编写简单的App接口
Aug 28 #PHP
You might like
PHP IPV6正则表达式验证代码
2010/02/16 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
python3实现mysql导出excel的方法
2019/07/31 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
Linux操作面试题
2015/02/11 面试题
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
会展中心部门工作职责
2013/11/27 职场文书
专科毕业生自我鉴定
2013/12/01 职场文书
驾驶员岗位职责
2014/01/29 职场文书
运动会稿件200字
2014/02/07 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
财务人员岗位职责
2015/02/03 职场文书