PHP 위 챗 웹 페이지 권한 부여 개발 강좌 구현

위 챗 홈 페이지 권한 수 여 는 서비스 번호 에 만 있 는 고급 기능 으로 개발 자 는 권한 수 여 를 통 해 사용자 의 기본 정 보 를 얻 을 수 있 습 니 다.그 전에 정 보 를 얻 으 려 면 사용자 와 공중 번호 가 상호작용 할 때 openid 에 따라 사용자 정 보 를 얻 을 수 있 습 니 다.한편,위 챗 홈 페이지 의 권한 수 여 는 메시지 의 상호작용 이 필요 하지 않 고 관심 을 가 질 필요 가 없 는 상황 에서 사용자 의 기본 정 보 를 얻 을 수 있다.

위 챗 웹 페이지 에서 권한 을 수 여 받 을 때 OAuth 2.0 을 통 해 완 성 된 것 으로 전체 과정 은 세 단계 로 나 뉜 다.
  • 사용자 권한 수여,코드 획득;
  • 코드 에 따라 access 획득token[refresh 를 통 해 가능token 리 셋 획득 비교적 긴 유효기간]
  • access 를 통 해token 과 openid 가 사용자 정 보 를 가 져 옵 니 다.
  • 위 챗 홈 페이지 권한 수여 과정 에 대해 간단 한 포장 을 했 습 니 다.
    
     <?php
     
    /**
     *         
     */
     
    class Wechat {
      
      //    -》     -》  
      private $app_id = 'xxx';
      private $app_secret = 'xxxxxxx';
     
     
      /**
       *         
       * 
       * @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";
      }
      
      /**
       *     token
       * 
       * @param string $code   get_authorize_url    code
       */
      public function get_access_token($app_id = '', $app_secret = '', $code = '')
      {
        $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->app_id}&secret={$this->app_secret}&code={$code}&grant_type=authorization_code";
        $token_data = $this->http($token_url);
        
        if($token_data[0] == 200)
        {
          return json_decode($token_data[1], TRUE);
        }
        
        return FALSE;
      }
      
      /**
       *             
       * 
       * @param string $access_token
       * @param string $open_id
       */
      public function get_user_info($access_token = '', $open_id = '')
      {
        if($access_token && $open_id)
        {
          $info_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$open_id}&lang=zh_CN";
          $info_data = $this->http($info_url);
          
          if($info_data[0] == 200)
          {
            return json_decode($info_data[1], TRUE);
          }
        }
        
        return FALSE;
      }
      
      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
    "; var_dump($postfields); echo '=====info=====' . "\r
    "; print_r(curl_getinfo($ci)); echo '=====$response=====' . "\r
    "; print_r($response); } curl_close($ci); return array($http_code, $response); } }
    이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기