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 相关文章推荐
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
PHP的分页功能
Mar 21 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
PHP系统命令函数使用分析
Jul 05 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
PHP中执行cmd命令的方法
Oct 11 PHP
Yii入门教程之目录结构、入口文件及路由设置
Nov 25 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP代码优化技巧小结
2015/09/29 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
jquery插件制作简单示例说明
2012/02/03 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
Python连接mysql数据库的正确姿势
2016/02/03 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
如何用python 操作zookeeper
2020/12/28 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
大学同学聚会邀请函
2014/01/29 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
交心谈心活动总结
2015/05/11 职场文书
排球赛新闻稿
2015/07/17 职场文书
小学运动会宣传稿
2015/07/23 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书