PHP版QQ互联OAuth示例代码分享_PHP
由于国内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']; } }
以上所述就是本文的全部内容了,希望大家能够喜欢。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

OAuth2.0是一種用來授權第三方應用程式存取使用者資源的協議,現已廣泛應用於網際網路領域。隨著網路業務的發展,越來越多的應用程式需要支援OAuth2.0協定。本文將介紹利用PHP實作OAuth2.0協定的最佳方式。一、OAuth2.0基礎知識在介紹OAuth2.0的實作方式之前,我們需要先了解一些OAuth2.0的基礎知識。授權類型OAuth2.0協議定

隨著行動互聯網的普及,越來越多的應用程式都需要使用者進行身份驗證和授權。 OAuth2是一種流行的認證和授權框架,它為應用程式提供了一種標準化的機制來實現這些功能。 LaravelPassport是一個易於使用,安全且開箱即用的OAuth2伺服器實現,它為PHP開發人員提供了構建OAuth2身份驗證和授權的強大工具。本文將介紹LaravelPassport的使

PHP和OAuth:實現微軟登錄整合隨著互聯網的發展,越來越多的網站和應用程式需要支援用戶使用第三方帳號登錄,以提供方便的註冊和登入體驗。微軟帳號是全球廣泛使用的帳號之一,許多用戶希望使用微軟帳號登入網站和應用程式。為了實現微軟登入集成,我們可以使用OAuth(開放授權)協定來實現。 OAuth是一種開放標準的授權協議,允許使用者授權第三方應用程式代表自己

PHP中的OAuth:創建一個JWT授權伺服器隨著行動應用和前後端分離的趨勢的興起,OAuth成為了現代Web應用中不可或缺的一部分。 OAuth是一種授權協議,透過提供標準化的流程和機制,用於保護使用者的資源免受未經授權的存取。在本文中,我們將學習如何使用PHP建立一個基於JWT(JSONWebTokens)的OAuth授權伺服器。 JWT是一種用於在網路中

如何使用PHP和OAuth進行GoogleDrive整合GoogleDrive是一款受歡迎的雲端儲存服務,它允許用戶在雲端儲存檔案並與其他用戶共用。透過GoogleDriveAPI,我們可以使用PHP編寫程式碼來與GoogleDrive進行集成,實現檔案的上傳、下載、刪除等操作。要使用GoogleDriveAPI,我們需要透過OAuth進行驗證並

OAuth2是一個廣泛使用的開放標準協議,用於在不將用戶名和密碼直接傳輸到第三方應用程式的情況下授權存取他們的用戶資源,例如Google,Facebook和Twitter等社交網路。在PHP中,您可以使用現成的OAuth2庫來輕鬆實現OAuth2流程,或者您可以建立自己的程式庫來實現它。在本文中,我們將重點放在使用現成的OAuth2庫,如何透過它來使用OAut

PHP中的OAuth2鑑權方法及實現方式隨著網路的發展,越來越多的應用程式需要與第三方平台互動。為了保護用戶的隱私和安全,許多第三方平台使用OAuth2協定來實現用戶鑑權。在本文中,我們將介紹PHP中的OAuth2鑑權方法及實作方式,並附上對應的程式碼範例。 OAuth2是一種授權框架,它允許使用者授權第三方應用程式存取其在另一個服務提供者上的資源,而無需提

隨著API的使用逐漸普及,保護API的安全性和可擴充性變得越來越關鍵。而OAuth2已經成為了一種廣泛採用的API安全協議,它允許應用程式透過授權來存取受保護的資源。為了實現OAuth2身份驗證,LaravelPassport提供了一種簡單、靈活的方式。在本篇文章中,我們將學習如何使用LaravelPassport實作APIOAuth2身份驗證。 Lar
