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 相关文章推荐
如何在PHP中使用Oracle数据库(6)
Oct 09 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
PHP 第二节 数据类型之数组
Apr 28 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
PHP入门之常量简介和系统常量
May 12 PHP
php实现在服务器上创建目录的方法
Mar 16 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php模拟post上传图片实现代码
Jun 24 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 PHP
PHP实现两种排课方式
Jun 26 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 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
Python中常见的数制转换有哪些
2020/05/27 Python
python用什么编辑器进行项目开发
2020/06/17 Python
python 如何对logging日志封装
2020/12/02 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
小学门卫岗位职责
2013/12/17 职场文书
英文商务邀请信
2014/01/22 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
会计师事务所实习证明
2014/11/16 职场文书
2014年生产部工作总结
2014/12/17 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
运动会加油稿50字
2015/07/21 职场文书
2016年情人节广告语
2016/01/28 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技