php获取微信openid方法总结


Posted in PHP onOctober 10, 2019

使用微信接口,无论是自动登录还是微信支付我们首先需要获取的就是openid,获取openid的方式有两种,一种是在关注的时候进行获取,这种订阅号就可以获取的到,第二种是通过网页授权获取,这种获取需要的是认证服务号。

今天我要说的是第二种网页授权获取openid。下面是我写的一个关于获取openid的类

<?php

/**

 * 微信授权相关接口

 * 

 * @link http://www.phpddt.com

 */

class Wchat

{

   private $app_id = 'wx444444444444';

   private $app_secret = '77777777';

   private $state='aaaa';

  /**

   * 获取微信授权链接

   * 

   * @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";

  }

   /**

   * 获取微信openid

   */

  public function getOpenid($turl)

  {

    if (!isset($_GET['code'])){

      //触发微信返回code码

       

       $url=$this->get_authorize_url($turl, $this->state);

       

      Header("Location: $url");

      exit();

    } else {

      //获取code码,以获取openid

      $code = $_GET['code'];

      $access_info = $this->get_access_token($code);

      return $access_info;

    }

     

  }

  /**

   * 获取授权token网页授权

   * 

   * @param string $code 通过get_authorize_url获取到的code

   */

  public function get_access_token($code = '')

  {

   $appid=$this->app_id;

   $appsecret=$this->app_secret;

    

    $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code";

    //echo $token_url;

    $token_data = $this->http($token_url);

    // var_dump( $token_data);

    if($token_data[0] == 200)

    {

      $ar=json_decode($token_data[1], TRUE);

      return $ar;

    }

     

    return $token_data[1];

  }

   

   

  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);

  }

 

}

?>

getOpenid($turl)这个方法就是获取openid的方法。前端调用代码如下:

$openid=isset($_COOKIE['openid'])?$_COOKIE['openid']:'';

  

   if(empty($openid))

   {

     $wchat=new wchat();

     $t_url='http://'.$_SERVER['HTTP_HOST'].'/user.php?act=register';

      

     $info=$wchat->getOpenid($t_url);

      

     if($info){

        $openid=$info['openid'];

      setcookie('openid',$openid,time()+86400*30);  

        

     }

      

   }

以上就是我总结的获取openid的方法啦。

以上就是php获取微信openid的详细内容,更多请关注三水点靠木其它相关文章!

PHP 相关文章推荐
再次研究下cache_lite
Feb 14 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
LNMP部署laravel以及xhprof安装使用教程
Sep 14 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 PHP
phpinfo的知识点总结
Oct 10 #PHP
phpfpm的作用和用法
Oct 10 #PHP
在laravel中实现事务回滚的方法
Oct 10 #PHP
laravel Model 执行事务的实现
Oct 10 #PHP
laravel框架模型、视图与控制器简单操作示例
Oct 10 #PHP
laravel框架数据库配置及操作数据库示例
Oct 10 #PHP
Laravel 关联模型-关联新增和关联更新的方法
Oct 10 #PHP
You might like
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php常用文件操作函数汇总
2014/11/22 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
Python中常用信号signal类型实例
2018/01/25 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
Python上下文管理器全实例详解
2019/11/12 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
如何高效率的查找一个月以内的数据
2012/04/15 面试题
会计自荐书
2013/12/02 职场文书
美容院店长岗位职责
2014/04/08 职场文书
运动会方阵口号
2014/06/07 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
学校党员干部承诺书
2015/05/04 职场文书
红色经典观后感
2015/06/18 职场文书
小学主题班会教案
2015/08/17 职场文书
四年级作文之植物
2019/09/20 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL
python程序的组织结构详解
2021/12/06 Python