国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
error:
msg? :
首頁(yè) 後端開(kāi)發(fā) php教程 QQ登錄OAuth2.0 php接入種

QQ登錄OAuth2.0 php接入種

Jun 13, 2016 am 10:39 AM
config function session url

QQ登錄OAuth2.0 php接入類

?

/**
?*
?* qq登錄
?* @author http://www.heui.org
?*
?*/
class Oauth_qq
{
??private static $_instance;
??private $config = array();
?
??private function __construct($config)
??{
????$this->Oauth_qq($config);
??}
?
??public static function getInstance($config)
??{
????if(!isset(self::$_instance))
????{
??????$c=__CLASS__;
??????self::$_instance = new $c($config);
????}
????return self::$_instance;
??}
?
??private function Oauth_qq($config)
??{
????$this->config = $config;
????$_SESSION["appid"]??? = $this->config['appid'];
????$_SESSION["appkey"]?? = $this->config['appkey'];
????$_SESSION["callback"] = $this->config['callback'];
????$_SESSION["scope"] = "get_user_info,add_share,list_album,add_album,upload_pic,add_topic,add_one_blog,add_weibo";
??}
?
??function login()
??{
????$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
????$login_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
????. $_SESSION["appid"] . "&redirect_uri=" . urlencode($_SESSION["callback"])
????. "&state=" . $_SESSION['state']
????. "&scope=".$_SESSION["scope"];
????header("Location:$login_url");
??}
?
??function callback()
??{
????if($_REQUEST['state'] == $_SESSION['state']) //csrf
????{
??????$token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
??????. "client_id=" . $_SESSION["appid"]. "&redirect_uri=" . urlencode($_SESSION["callback"])
??????. "&client_secret=" . $_SESSION["appkey"]. "&code=" . $_REQUEST["code"];
?
??????$response = get_url_contents($token_url);
??????if (strpos($response, "callback") !== false)
??????{
????????$lpos = strpos($response, "(");
????????$rpos = strrpos($response, ")");
????????$response? = substr($response, $lpos + 1, $rpos - $lpos -1);
????????$msg = json_decode($response);
????????if (isset($msg->error))
????????{
??????????echo "<h3 id="error">error:</h3>" . $msg->error;
??????????echo "<h3 id="msg">msg? :</h3>" . $msg->error_description;
??????????exit;
????????}
??????}
?
??????$params = array();
??????parse_str($response, $params);
?
??????$_SESSION["access_token"] = $params["access_token"];
????}
????else
????{
??????echo("The state does not match. You may be a victim of CSRF.");
????}
??}
?
??function get_openid()
??{
????$graph_url = "https://graph.qq.com/oauth2.0/me?access_token="
????. $_SESSION['access_token'];
?
????$str? = get_url_contents($graph_url);
????if (strpos($str, "callback") !== false)
????{
??????$lpos = strpos($str, "(");
??????$rpos = strrpos($str, ")");
??????$str? = substr($str, $lpos + 1, $rpos - $lpos -1);
????}
?
????$user = json_decode($str);
????if (isset($user->error))
????{
??????echo "<h3 id="error">error:</h3>" . $user->error;
??????echo "<h3 id="msg">msg? :</h3>" . $user->error_description;
??????exit;
????}
?
????//set openid to session
????return $_SESSION["openid"] = $user->openid;
??}
?
??function get_user_info()
??{
????$get_user_info = "https://graph.qq.com/user/get_user_info?"
????. "access_token=" . $_SESSION['access_token']
????. "&oauth_consumer_key=" . $_SESSION["appid"]
????. "&openid=" . $_SESSION["openid"]
????. "&format=json";
?
????$info = get_url_contents($get_user_info);
????$arr = json_decode($info, true);
?
????return $arr;
??}
?
??public function __clone()
??{
????trigger_error('Clone is not allow' ,E_USER_ERROR);
??}
?
}
?
/* 公用函數(shù) */
if (!function_exists("do_post"))
{
??function do_post($url, $data)
??{
????$ch = curl_init();
????curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
????curl_setopt($ch, CURLOPT_POST, TRUE);
????curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
????curl_setopt($ch, CURLOPT_URL, $url);
????$ret = curl_exec($ch);
?
????curl_close($ch);
????return $ret;
??}
}
if (!function_exists("get_url_contents"))
{
??function get_url_contents($url)
??{
????if (ini_get("allow_url_fopen") == "1")
????return file_get_contents($url);
?
????$ch = curl_init();
????curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
????curl_setopt($ch, CURLOPT_URL, $url);
????$result =? curl_exec($ch);
????curl_close($ch);
?
????return $result;
??}
}

使用實(shí)例:

$config['appid']??? = '';
$config['appkey']?? = '';
$config['callback'] = '';
$o_qq = Oauth_qq::getInstance($config);
?
//then
$o_qq->login();
//or
$o_qq->callback();
$o_qq->get_openid();
$o_qq->get_user_info();

原文:http://www.heui.org/archives/454

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

為什麼NameResolutionError(self.host, self, e) from e,怎麼解決 為什麼NameResolutionError(self.host, self, e) from e,怎麼解決 Mar 01, 2024 pm 01:20 PM

報(bào)錯(cuò)的原因NameResolutionError(self.host,self,e)frome是由urllib3函式庫(kù)中的例外類型,這個(gè)錯(cuò)誤的原因是DNS解析失敗,也就是說(shuō),試圖解析的主機(jī)名稱或IP位址無(wú)法找到。這可能是由於輸入的URL位址不正確,或DNS伺服器暫時(shí)無(wú)法使用所導(dǎo)致的。如何解決解決此錯(cuò)誤的方法可能有以下幾種:檢查輸入的URL地址是否正確,確保它是可訪問(wèn)的確保DNS伺服器可用,您可以嘗試在命令行中使用"ping"命令來(lái)測(cè)試DNS伺服器是否可用嘗試使用IP位址而不是主機(jī)名稱來(lái)存取網(wǎng)站如果是在代理

PHP函數(shù)介紹—get_headers(): 取得URL的回應(yīng)頭訊息 PHP函數(shù)介紹—get_headers(): 取得URL的回應(yīng)頭訊息 Jul 25, 2023 am 09:05 AM

PHP函數(shù)介紹—get_headers():取得URL的回應(yīng)頭資訊概述:在PHP開(kāi)發(fā)中,我們經(jīng)常需要取得網(wǎng)頁(yè)或遠(yuǎn)端資源的回應(yīng)頭資訊。 PHP函數(shù)get_headers()能夠方便地取得目標(biāo)URL的回應(yīng)頭訊息,並以陣列形式傳回。本文將介紹get_headers()函數(shù)的用法,以及提供一些相關(guān)的程式碼範(fàn)例。 get_headers()函數(shù)的用法:get_header

html和url的差別是什麼 html和url的差別是什麼 Mar 06, 2024 pm 03:06 PM

區(qū)別:1、定義不同,url是是統(tǒng)一資源定位符,而html是超文本標(biāo)記語(yǔ)言;2、一個(gè)html中可以有很多個(gè)url,而一個(gè)url中只能存在一個(gè)html頁(yè)面;3、html指的是網(wǎng)頁(yè),而url指的是網(wǎng)站位址。

session失效怎麼解決 session失效怎麼解決 Oct 18, 2023 pm 05:19 PM

session失效通常是由於 session 的生存時(shí)間過(guò)期或伺服器關(guān)閉導(dǎo)致的。其解決方法:1、延長(zhǎng)session的生存時(shí)間;2、使用持久化儲(chǔ)存;3、使用cookie;4、非同步更新session;5、使用會(huì)話管理中介軟體。

function是什麼意思 function是什麼意思 Aug 04, 2023 am 10:33 AM

function是函數(shù)的意思,是一段具有特定功能的可重複使用的程式碼區(qū)塊,是程式的基本組成單元之一,可以接受輸入?yún)?shù),執(zhí)行特定的操作,並傳回結(jié)果,其目的是封裝一段可重複使用的程式碼,提高程式碼的可重複使用性和可維護(hù)性。

PHP Session 跨域問(wèn)題的解決方法 PHP Session 跨域問(wèn)題的解決方法 Oct 12, 2023 pm 03:00 PM

PHPSession跨域問(wèn)題的解決方法在前後端分離的開(kāi)發(fā)中,跨域請(qǐng)求已成為常態(tài)。在處理跨域問(wèn)題時(shí),我們通常會(huì)涉及session的使用和管理。然而,由於瀏覽器的同源策略限制,跨域情況下預(yù)設(shè)無(wú)法共享session。為了解決這個(gè)問(wèn)題,我們需要採(cǎi)用一些技巧和方法來(lái)實(shí)現(xiàn)session的跨域共享。一、使用cookie跨域共享session最常

Redis的分享session應(yīng)用如何實(shí)現(xiàn)簡(jiǎn)訊登入 Redis的分享session應(yīng)用如何實(shí)現(xiàn)簡(jiǎn)訊登入 Jun 03, 2023 pm 03:11 PM

1.基於session實(shí)作簡(jiǎn)訊登入1.1簡(jiǎn)訊登入流程圖1.2實(shí)作發(fā)送簡(jiǎn)訊驗(yàn)證碼前端請(qǐng)求說(shuō)明:說(shuō)明請(qǐng)求方式POST請(qǐng)求路徑/user/code請(qǐng)求參數(shù)phone(電話號(hào)碼)回傳值無(wú)後端介面實(shí)作:@Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1.校驗(yàn)手機(jī)號(hào)碼if

JavaScript和PHP的cookie之間有哪些差異? JavaScript和PHP的cookie之間有哪些差異? Sep 02, 2023 pm 12:29 PM

JavaScriptCookie使用JavaScriptcookie是記住和追蹤偏好、購(gòu)買、傭金和其他資訊的最有效方法。更好的訪客體驗(yàn)或網(wǎng)站統(tǒng)計(jì)所需的資訊。 PHPCookieCookie是儲(chǔ)存在客戶端電腦上的文字檔案並保留它們用於追蹤目的。 PHP透明地支援HTTPcookie。 JavaScriptcookie如何運(yùn)作?您的伺服器將一些資料傳送到訪客的瀏覽器cookie的形式。瀏覽器可以接受cookie。如果存在,它將作為純文字記錄儲(chǔ)存在訪客的硬碟上?,F(xiàn)在,當(dāng)訪客到達(dá)網(wǎng)站上的另一個(gè)頁(yè)面時(shí)

See all articles