PHP实现微信网页授权开发教程


Posted in PHP onJanuary 19, 2016

微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息;在此之前,想要获取消息信息只能在用户和公众号交互时根据openid获取用户信息;而微信网页授权可在不需要消息交互,也不需要关注的情况下获取用户的基本信息。

PHP实现微信网页授权开发教程

微信网页授权时通过OAuth2.0完成的,整个过程分为三步:

  • 用户授权,获取code;
  • 根据code获取access_token【可通过refresh_token刷新获取较长有效期】
  • 通过access_token和openid获取用户信息

对微信网页授权过程做了简单封装:

<?php
 
/**
 * 微信授权相关接口
 */
 
class Wechat {
  
  //高级功能-》开发者模式-》获取
  private $app_id = 'xxx';
  private $app_secret = 'xxxxxxx';
 
 
  /**
   * 获取微信授权链接
   * 
   * @param string $redirect_uri 跳转地址
   * @param mixed $state 参数
   */
  public function get_authorize_url($redirect_uri = '', $state = '')
  {
    $redirect_uri = urlencode($redirect_uri);
    return "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->app_id}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";
  }
  
  /**
   * 获取授权token
   * 
   * @param string $code 通过get_authorize_url获取到的code
   */
  public function get_access_token($app_id = '', $app_secret = '', $code = '')
  {
    $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->app_id}&secret={$this->app_secret}&code={$code}&grant_type=authorization_code";
    $token_data = $this->http($token_url);
    
    if($token_data[0] == 200)
    {
      return json_decode($token_data[1], TRUE);
    }
    
    return FALSE;
  }
  
  /**
   * 获取授权后的微信用户信息
   * 
   * @param string $access_token
   * @param string $open_id
   */
  public function get_user_info($access_token = '', $open_id = '')
  {
    if($access_token && $open_id)
    {
      $info_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$open_id}&lang=zh_CN";
      $info_data = $this->http($info_url);
      
      if($info_data[0] == 200)
      {
        return json_decode($info_data[1], TRUE);
      }
    }
    
    return FALSE;
  }
  
  public function http($url, $method, $postfields = null, $headers = array(), $debug = false)
  {
    $ci = curl_init();
    /* Curl settings */
    curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ci, CURLOPT_TIMEOUT, 30);
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
 
    switch ($method) {
      case 'POST':
        curl_setopt($ci, CURLOPT_POST, true);
        if (!empty($postfields)) {
          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
          $this->postdata = $postfields;
        }
        break;
    }
    curl_setopt($ci, CURLOPT_URL, $url);
    curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ci, CURLINFO_HEADER_OUT, true);
 
    $response = curl_exec($ci);
    $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
 
    if ($debug) {
      echo "=====post data======\r\n";
      var_dump($postfields);
 
      echo '=====info=====' . "\r\n";
      print_r(curl_getinfo($ci));
 
      echo '=====$response=====' . "\r\n";
      print_r($response);
    }
    curl_close($ci);
    return array($http_code, $response);
  }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

PHP 相关文章推荐
cache_lite试用
Feb 14 PHP
珊瑚虫IP库浅析
Feb 15 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
php文件读取方法实例分析
Jun 20 PHP
php实现的操作excel类详解
Jan 15 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 #PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 #PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 #PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 #PHP
php pthreads多线程的安装与使用
Jan 19 #PHP
PHP+swoole实现简单多人在线聊天群发
Jan 19 #PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 #PHP
You might like
php 采集书并合成txt格式的实现代码
2009/03/01 PHP
php注销代码(session注销)
2012/05/31 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
javascript编写简易计算器
2017/05/06 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
Python FTP操作类代码分享
2014/05/13 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
python利用opencv保存、播放视频
2020/11/02 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
高中生的自我鉴定范文
2014/01/24 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
工会趣味活动方案
2014/08/18 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
博士导师推荐信
2015/03/25 职场文书
运动会宣传语
2015/07/13 职场文书
Django实现翻页的示例代码
2021/05/24 Python
python中 Flask Web 表单的使用方法
2022/05/20 Python