当前位置 主页 > 网站技术 > 代码类 >

    php获取微信openid方法总结

    栏目:代码类 时间:2019-10-25 06:03

    使用微信接口,无论是自动登录还是微信支付我们首先需要获取的就是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?app&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);
    
      }
    
     
    
    }
    
    ?>