ホームページ バックエンド開発 PHPチュートリアル PHPバージョンQQログインポート

PHPバージョンQQログインポート

Jun 09, 2018 am 09:39 AM
oauth

この記事では主に PHP 版の QQ ログインポートを紹介します。興味のある方は参考にしていただければ幸いです。

国内の QQ ユーザーの人気により、主要な Web サイトは QQ ログイン ポートを提供するために最善を尽くしています。参考までに php バージョンを見てみましょう。

/**
 * QQ互联 oauth
 * @author dyllen
 *
 */
class Oauth
{
  //取Authorization Code Url
  const PC_CODE_URL = 'https://graph.qq.com/oauth2.0/authorize';
   
  //取Access Token Url
  const PC_ACCESS_TOKEN_URL = 'https://graph.qq.com/oauth2.0/token';
   
  //取用户 Open Id Url
  const OPEN_ID_URL = 'https://graph.qq.com/oauth2.0/me';
   
  //用户授权之后的回调地址
  public $redirectUri = null;
   
  // App Id
  public $appid = null;
   
  //App Key
  public $appKey = null;
   
  //授权列表
  //字符串,多个用逗号隔开
  public $scope = null;
   
  //授权code
  public $code = null;
   
  //续期access token的凭证
  public $refreshToken = null;
   
  //access token
  public $accessToken = null;
   
  //access token 有效期,单位秒
  public $expiresIn = null;
   
  //state
  public $state = null;
   
  public $openid = null;
   
  //construct
  public function __construct($config=[])
  {
    foreach($config as $key => $value) {
      $this->$key = $value;
    }
  }
   
  /**
   * 得到获取Code的url
   * @throws \InvalidArgumentException
   * @return string
   */
  public function codeUrl()
  {
    if (!$this->redirectUri) {
      throw new \Exception('parameter $redirectUri must be set.');
    }
    $query = [
        'response_type' => 'code',
        'client_id' => $this->appid,
        'redirect_uri' => $this->redirectUri,
        'state' => $this->getState(),
        'scope' => $this->scope,
    ];
   
    return self::PC_CODE_URL . '?' . http_build_query($query);
  }
   
  /**
   * 取access token
   * @throws Exception
   * @return boolean
   */
  public function getAccessToken()
  {
    $params = [
        'grant_type' => 'authorization_code',
        'client_id' => $this->appid,
        'client_secret' => $this->appKey,
        'code' => $this->code,
        'redirect_uri' => $this->redirectUri,
    ];
   
    $url = self::PC_ACCESS_TOKEN_URL . '?' . http_build_query($params);
    $content = $this->getUrl($url);
    parse_str($content, $res);
    if ( !isset($res['access_token']) ) {
      $this->thrwoError($content);
    }
   
    $this->accessToken = $res['access_token'];
    $this->expiresIn = $res['expires_in'];
    $this->refreshToken = $res['refresh_token'];
   
    return true;
  }
   
  /**
   * 刷新access token
   * @throws Exception
   * @return boolean
   */
  public function refreshToken()
  {
    $params = [
        'grant_type' => 'refresh_token',
        'client_id' => $this->appid,
        'client_secret' => $this->appKey,
        'refresh_token' => $this->refreshToken,
    ];
   
    $url = self::PC_ACCESS_TOKEN_URL . '?' . http_build_query($params);
    $content = $this->getUrl($url);
    parse_str($content, $res);
    if ( !isset($res['access_token']) ) {
      $this->thrwoError($content);
    }
   
    $this->accessToken = $res['access_token'];
    $this->expiresIn = $res['expires_in'];
    $this->refreshToken = $res['refresh_token'];
   
    return true;
  }
   
  /**
   * 取用户open id
   * @return string
   */
  public function getOpenid()
  {
    $params = [
        'access_token' => $this->accessToken,
    ];
   
    $url = self::OPEN_ID_URL . '?' . http_build_query($params);
       
    $this->openid = $this->parseOpenid( $this->getUrl($url) );
     
    return $this->openid;
  }
   
  /**
   * get方式取url内容
   * @param string $url
   * @return mixed
   */
  public function getUrl($url)
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_URL, $url);
    $response = curl_exec($ch);
    curl_close($ch);
   
    return $response;
  }
   
  /**
   * post方式取url内容
   * @param string $url
   * @param array $keysArr
   * @param number $flag
   * @return mixed
   */
  public function postUrl($url, $keysArr, $flag = 0)
  {
    $ch = curl_init();
    if(! $flag) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $keysArr);
    curl_setopt($ch, CURLOPT_URL, $url);
    $ret = curl_exec($ch);
   
    curl_close($ch);
    return $ret;
  }
   
   
  /**
   * 取state
   * @return string
   */
  protected function getState()
  {
    $this->state = md5(uniqid(rand(), true));
    //state暂存在缓存里面
    //自己定义
        //。。。。。。。。。
   
    return $this->state;
  }
   
  /**
   * 验证state
   * @return boolean
   */
  protected function verifyState()
  {
    //。。。。。。。
  }
   
  /**
   * 抛出异常
   * @param string $error
   * @throws \Exception
   */
  protected function thrwoError($error)
  {
    $subError = substr($error, strpos($error, "{"));
    $subError = strstr($subError, "}", true) . "}";
    $error = json_decode($subError, true);
     
    throw new \Exception($error['error_description'], (int)$error['error']);
  }
   
  /**
   * 从获取openid接口的返回数据中解析出openid
   * @param string $str
   * @return string
   */
  protected function parseOpenid($str)
  {
    $subStr = substr($str, strpos($str, "{"));
    $subStr = strstr($subStr, "}", true) . "}";
    $strArr = json_decode($subStr, true);
    if(!isset($strArr['openid'])) {
      $this->thrwoError($str);
    }
     
    return $strArr['openid'];
  }
}
ログイン後にコピー

概要: 以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。

関連する推奨事項:

php は、HTML タグの終了タグの検出と補完機能を実装します

PHP 文字列変換スキル

PHP は指定されたサフィックス ファイルのバッチ アップロード機能を実装します

以上がPHPバージョンQQログインポートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP を使用して OAuth2.0 を実装する最良の方法 PHP を使用して OAuth2.0 を実装する最良の方法 Jun 08, 2023 am 09:09 AM

OAuth2.0 は、サードパーティのアプリケーションがユーザー リソースにアクセスすることを承認するために使用されるプロトコルであり、現在インターネット分野で広く使用されています。インターネット ビジネスの発展に伴い、OAuth2.0 プロトコルをサポートする必要があるアプリケーションがますます増えています。この記事では、PHP を使用して OAuth2.0 プロトコルを実装する最適な方法を紹介します。 1. OAuth2.0 の基礎知識 OAuth2.0 の実装を紹介する前に、OAuth2.0 の基礎知識を理解する必要があります。認可タイプ OAuth2.0 プロトコルが決定されました

PHP と OAuth: Microsoft ログイン統合の実装 PHP と OAuth: Microsoft ログイン統合の実装 Jul 28, 2023 pm 05:15 PM

PHP と OAuth: Microsoft ログイン統合の実装 インターネットの発展に伴い、便利な登録とログイン エクスペリエンスを提供するために、ユーザーがサードパーティ アカウントを使用してログインできるようにする必要がある Web サイトやアプリケーションがますます増えています。 Microsoft アカウントは世界中で広く使用されているアカウントの 1 つであり、多くのユーザーが Web サイトやアプリケーションにログインするために Microsoft アカウントを使用したいと考えています。 Microsoft ログインの統合を実現するには、OAuth (Open Authorization) プロトコルを使用します。 OAuth は、ユーザーがサードパーティのアプリケーションに代わって動作することを承認できるオープン標準の承認プロトコルです。

PHP の OAuth: JWT 認証サーバーを作成する PHP の OAuth: JWT 認証サーバーを作成する Jul 28, 2023 pm 05:27 PM

PHP での OAuth: JWT 認証サーバーの作成 モバイル アプリケーションの台頭とフロントエンドとバックエンドの分離の傾向により、OAuth は最新の Web アプリケーションに不可欠な部分になりました。 OAuth は、標準化されたプロセスとメカニズムを提供することで、ユーザーのリソースを不正アクセスから保護する承認プロトコルです。この記事では、PHP を使用して JWT (JSONWebTokens) ベースの OAuth 認証サーバーを作成する方法を学びます。 JWT の一種です。

PHP 開発: Laravel Passport を使用した OAuth2 サービス プロバイダーの実装 PHP 開発: Laravel Passport を使用した OAuth2 サービス プロバイダーの実装 Jun 15, 2023 pm 04:32 PM

モバイル インターネットの普及に伴い、ユーザーが自分自身を認証し、許可することを必要とするアプリケーションがますます増えています。 OAuth2 は、これらの機能を実装するための標準化されたメカニズムをアプリケーションに提供する、一般的な認証および認可フレームワークです。 LaravelPassport は、使いやすく安全ですぐに使える OAuth2 サーバー実装であり、PHP 開発者に OAuth2 認証と認可を構築するための強力なツールを提供します。この記事ではLaravelPassportの使い方を紹介します。

PHP と OAuth を使用して Google ドライブを統合する方法 PHP と OAuth を使用して Google ドライブを統合する方法 Jul 31, 2023 pm 04:41 PM

PHP と OAuth を使用して GoogleDrive を統合する方法 GoogleDrive は、ユーザーがクラウドにファイルを保存し、他のユーザーと共有できるようにする人気のクラウド ストレージ サービスです。 GoogleDriveAPI を通じて、PHP を使用して GoogleDrive と統合するコードを記述し、ファイルのアップロード、ダウンロード、削除、その他の操作を実装できます。 GoogleDriveAPI を使用するには、OAuth 経由で認証する必要があります。

PHPでOAuth2を使用するにはどうすればよいですか? PHPでOAuth2を使用するにはどうすればよいですか? Jun 01, 2023 am 08:31 AM

OAuth2 は、ユーザー名やパスワードを直接送信せずに、Google、Facebook、Twitter などのソーシャル ネットワークなどのサードパーティ アプリケーションにユーザー リソースへのアクセスを許可する、広く使用されているオープン標準プロトコルです。 PHP では、既製の OAuth2 ライブラリを使用して OAuth2 フローを簡単に実装したり、独自のライブラリを構築して実装したりできます。この記事では、既製の OAuth2 ライブラリの使用と、それを介して OAut を使用する方法に焦点を当てます。

OAuth2認証方式とPHPでの実装 OAuth2認証方式とPHPでの実装 Aug 07, 2023 pm 10:53 PM

OAuth2 認証方法と PHP での実装 インターネットの発展に伴い、サードパーティのプラットフォームと対話する必要があるアプリケーションがますます増えています。ユーザーのプライバシーとセキュリティを保護するために、多くのサードパーティ プラットフォームは OAuth2 プロトコルを使用してユーザー認証を実装しています。この記事では、OAuth2 認証方法と PHP での実装を紹介し、対応するコード例を添付します。 OAuth2 は、ユーザーがサードパーティのアプリケーションが別のサービス プロバイダー上のリソースにアクセスすることを、何も言及せずに承認できるようにする承認フレームワークです。

Java を使用して Spring Security OAuth2 に基づくシングル サインオン システムを開発する方法 Java を使用して Spring Security OAuth2 に基づくシングル サインオン システムを開発する方法 Sep 20, 2023 pm 01:06 PM

Java を使用して SpringSecurityOAuth2 に基づくシングル サインオン システムを開発する方法 はじめに: インターネットの急速な発展に伴い、ユーザーにログインを必要とする Web サイトやアプリケーションがますます増えていますが、ユーザーは Web サイトやアプリケーションごとにログインすることを望んでいません。アカウント番号とパスワード。シングル サインオン システム (SingleSign-On、SSO と呼ばれる) を使用すると、この問題を解決できます。これにより、ユーザーは一度ログインした後は認証を繰り返すことなく、複数の Web サイトやアプリケーションにアクセスできるようになります。この記事で紹介するのは

See all articles