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 相关文章推荐
php4的session功能评述(一)
Oct 09 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
php字符串的替换,分割和连接方法
May 23 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
老生常谈PHP数组函数array_merge(必看篇)
May 25 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
PHP children()函数讲解
Feb 03 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 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
世界收音机发展史
2021/03/01 无线电
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
PHP代码加密的方法总结
2020/03/13 PHP
语义化 H1 标签
2008/01/14 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
js打造数组转json函数
2015/01/14 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
js常见遍历操作小结
2019/06/06 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
python处理中文编码和判断编码示例
2014/02/26 Python
python 文件转成16进制数组的实例
2018/07/09 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
python+pygame实现坦克大战
2019/09/10 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
收银员岗位职责
2015/02/03 职场文书
教育教学读书笔记
2015/07/02 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书