ホームページ バックエンド開発 PHPチュートリアル PHP版QQ互联OAuth示例代码分享_PHP

PHP版QQ互联OAuth示例代码分享_PHP

May 30, 2016 am 08:45 AM
oauth

由于国内QQ用户的普遍性,所以现在各大网站都尽可能的提供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'];
  }
}
ログイン後にコピー

以上所述就是本文的全部内容了,希望大家能够喜欢。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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 と 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 開発: 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 の OAuth: JWT 認証サーバーを作成する PHP の OAuth: JWT 認証サーバーを作成する Jul 28, 2023 pm 05:27 PM

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

Laravel開発: Laravel Passportを使用してAPI OAuth2認証を実装するにはどうすればよいですか? Laravel開発: Laravel Passportを使用してAPI OAuth2認証を実装するにはどうすればよいですか? Jun 13, 2023 pm 11:13 PM

API の使用がさらに普及するにつれて、API のセキュリティとスケーラビリティの保護がますます重要になります。 OAuth2 は、アプリケーションが認可を通じて保護されたリソースにアクセスできるようにする API セキュリティ プロトコルとして広く採用されています。 OAuth2 認証を実装するために、LaravelPassport はシンプルで柔軟な方法を提供します。この記事では、LaravelPassport を使用して APIOAuth2 認証を実装する方法を学びます。ラール

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

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

QQ ログイン統合に PHP と OAuth を使用する方法 QQ ログイン統合に PHP と OAuth を使用する方法 Jul 31, 2023 pm 12:37 PM

QQ ログイン統合に PHP と OAuth を使用する方法の紹介: ソーシャル メディアの発展に伴い、ユーザーが簡単に登録してログインできるように、サードパーティのログイン機能を提供する Web サイトやアプリケーションが増えています。中国最大のソーシャル メディア プラットフォームの 1 つである QQ は、多くの Web サイトやアプリケーションで提供されるサードパーティのログイン サービスとしても利用されています。この記事では、QQ ログイン統合に PHP と OAuth を使用する方法の手順をコード例とともに紹介します。ステップ 1: QQ オープン プラットフォーム開発者として登録します。QQ ログインの統合を開始する前に、

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 プロトコルが決定されました

See all articles