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的面向对象编程
Oct 09 PHP
Smarty+QUICKFORM小小演示
Feb 25 PHP
php中mysql模块部分功能的简单封装
Sep 30 PHP
php中curl和file_get_content的区别
May 10 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
php获取百度收录、百度热词及百度快照的方法
Apr 02 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
如何使用微信公众平台开发模式实现多客服
Jan 06 PHP
php_pdo 预处理语句详解
Nov 21 PHP
php插件Xajax使用方法详解
Aug 31 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
PHP的重载使用魔术方法代码实例详解
Feb 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文件上传类分享
2016/05/15 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
Python入门之后再看点什么好?
2018/03/05 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
人力资源管理专业应届生求职信
2013/09/28 职场文书
自主招生自荐信指南
2014/02/04 职场文书
一年级学生期末评语
2014/04/21 职场文书
学校周年庆活动方案
2014/08/22 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
业务员岗位职责范本
2015/04/03 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
2016新年致辞
2015/08/01 职场文书
关于做家务的心得体会
2016/01/23 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL