open_connect-8.x-1.x-dev/src/Plugin/OpenConnect/Provider/QQ.php

src/Plugin/OpenConnect/Provider/QQ.php
<?php

namespace Drupal\open_connect\Plugin\OpenConnect\Provider;

/**
 * Define the QQ identity provider.
 *
 * @OpenConnectProvider(
 *   id = "qq",
 *   label = @Translation("QQ"),
 *   description = @Translation("QQ Open Platform"),
 *   homepage = "http://open.qq.com",
 *   urls = {
 *     "authorization" = "https://graph.qq.com/oauth2.0/authorize",
 *     "access_token" = "https://graph.qq.com/oauth2.0/token",
 *     "openid" = "https://graph.qq.com/oauth2.0/me",
 *     "user_info" = "https://graph.qq.com/user/get_user_info",
 *   },
 * )
 */
class QQ extends ProviderBase {

//  /**
//   * {@inheritdoc}
//   *
//   * @see http://wiki.open.qq.com/wiki/website/%E4%BD%BF%E7%94%A8Authorization_Code%E8%8E%B7%E5%8F%96Access_Token
//   *
//   * For mobile, set a 'display' query parameter in redirect url.
//   */
//  protected function processRedirectUrlOptions(array &$options) {
//    // (Optional) Add in the display parameter, available values:
//    // - mobile
//    // $options['query']['display'] = 'mobile';
//  }

  /**
   * {@inheritdoc}
   *
   * Response examples:
   *
   * success:
   *   access_token=ACCESS_TOKEN&expires_in=7776000
   *
   * failure:
   *   callback( {"error":100004,"error_description":"param grant_type is wrong or lost "} );
   */
  protected function doFetchToken($url, array $params) {
    // Perform a GET request.
    $response = $this->httpClient->get($url, [
      'query' => $params,
    ]);

    return $this->parseResponseData((string) $response->getBody());
  }

  /**
   * {@inheritdoc}
   *
   * Response examples:
   *
   * success:
   *   callback( {"client_id":"APPID","openid":"OPENID"} );
   *
   * failure:
   *   callback( {"error":100007,"error_description":"param access token is wrong or lost "} );
   */
  protected function doFetchOpenid($url, array $params) {
    $response = $this->httpClient->get($url, [
      'query' => $params,
    ]);

    return $this->parseResponseData((string) $response->getBody());
  }

  /**
   * {@inheritdoc}
   *
   * Response examples:
   *
   * success:
   * {
   *   "ret":0,
   *   "msg":"",
   *   "nickname":"Peter",
   *   "figureurl":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/30",
   *   "figureurl_1":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/50",
   *   "figureurl_2":"http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/100",
   *   "figureurl_qq_1":"http://q.qlogo.cn/qqapp/100312990/DE1931D5330620DBD07FB4A5422917B6/41",
   *   "figureurl_qq_2":"http://q.qlogo.cn/qqapp/100312990/DE1931D5330620DBD07FB4A5422917B6/100",
   *   "is_yellow_vip":"1",
   *   "is_yellow_year_vip":"0",
   *   "yellow_vip_level":"6"
   * }
   */
  protected function doFetchUserInfo($url, array $params) {
    // Add in the oauth_consumer_key parameter.
    $params['oauth_consumer_key'] = $this->configuration['client_id'];
    $response = $this->httpClient->get($url, [
      'query' => $params,
    ]);
    return \GuzzleHttp\json_decode($response->getBody(), TRUE);
  }

  /**
   * {@inheritdoc}
   */
  protected function isResponseSuccessful(array $response) {
    return empty($response['error']);
  }

  /**
   * {@inheritdoc}
   */
  protected function getResponseError(array $response) {
    if (isset($response['error'], $response['error_description'])) {
      return sprintf('%s: %s', $response['error'], $response['error_description']);
    }
    return '';
  }

  /**
   * Parses the response data.
   *
   * @param $data
   *   The raw response data.
   *
   * @return array
   *   An array of parsed data values.
   */
  private function parseResponseData($data) {
    if(strpos($data, 'callback') !== FALSE){
      $lpos = strpos($data, '(');
      $rpos = strrpos($data, ')');
      $data  = substr($data, $lpos + 1, $rpos - $lpos -1);
      $result = \GuzzleHttp\json_decode($data, TRUE);
    }
    else {
      parse_str($data, $result);
    }
    return $result;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc