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 相关文章推荐
从网上搜到的phpwind 0day的代码
Dec 07 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
linux下php上传文件注意事项
Jun 11 PHP
PHP微信开发之有道翻译
Jun 23 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
PHP 实现公历日期与农历日期的互转换
Sep 13 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
PHP自动生成缩略图函数的源码示例
Mar 18 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
php DES加密算法实例分析
Sep 18 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 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与php MySQL 之间的关系
2009/07/17 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
用ADODB.Stream转换
2007/01/22 Javascript
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
js停止输出代码
2008/07/20 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
2014年小学元旦活动方案
2014/02/12 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
PO模式在selenium自动化测试框架的优势
2022/03/20 Python