QQ登录OAuth2.0 php接入种
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); ?? } ?
} ?
/* 公用函数 */ 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 ; ?? } } |
使用实例:
$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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Einführung in die PHP-Funktion – get_headers(): Überblick über das Abrufen der Antwort-Header-Informationen der URL: In der PHP-Entwicklung müssen wir häufig die Antwort-Header-Informationen einer Webseite oder einer Remote-Ressource abrufen. Die PHP-Funktion get_headers() kann problemlos die Antwortheaderinformationen der Ziel-URL abrufen und in Form eines Arrays zurückgeben. In diesem Artikel wird die Verwendung der Funktion get_headers() vorgestellt und einige zugehörige Codebeispiele bereitgestellt. Verwendung der Funktion get_headers(): get_header

Der Grund für den Fehler ist NameResolutionError(self.host,self,e)frome, ein Ausnahmetyp in der urllib3-Bibliothek. Der Grund für diesen Fehler ist, dass die DNS-Auflösung fehlgeschlagen ist, d. h. der Hostname oder die IP-Adresse Der Lösungsversuch konnte nicht gefunden werden. Dies kann daran liegen, dass die eingegebene URL-Adresse falsch ist oder der DNS-Server vorübergehend nicht verfügbar ist. So beheben Sie diesen Fehler Es gibt möglicherweise mehrere Möglichkeiten, diesen Fehler zu beheben: Überprüfen Sie, ob die eingegebene URL-Adresse korrekt ist und stellen Sie sicher, dass sie zugänglich ist. Stellen Sie sicher, dass der DNS-Server verfügbar ist. Sie können es mit dem Befehl „ping“ in der Befehlszeile versuchen Um zu testen, ob der DNS-Server verfügbar ist, versuchen Sie, über die IP-Adresse statt über den Hostnamen auf die Website zuzugreifen, wenn Sie sich hinter einem Proxy befinden

Unterschiede: 1. Unterschiedliche Definitionen, URL ist ein einheitlicher Ressourcen-Locator und HTML ist eine Hypertext-Markup-Sprache. 2. Es kann viele URLs in einer HTML-Seite geben, aber nur eine HTML-Seite kann in einer URL vorhanden sein eine Webseite, und URL bezieht sich auf die Website-Adresse.

Funktion bedeutet Funktion. Es handelt sich um einen wiederverwendbaren Codeblock mit bestimmten Funktionen. Er kann Eingabeparameter akzeptieren, bestimmte Operationen ausführen und Ergebnisse zurückgeben. Code, um die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern.

Ein Sitzungsfehler wird normalerweise durch den Ablauf der Sitzungslebensdauer oder das Herunterfahren des Servers verursacht. Die Lösungen: 1. Verlängern Sie die Lebensdauer der Sitzung. 3. Verwenden Sie Cookies. 4. Aktualisieren Sie die Sitzung.

Lösung des domänenübergreifenden Problems von PHPSession Bei der Entwicklung der Front-End- und Back-End-Trennung sind domänenübergreifende Anforderungen zur Norm geworden. Wenn es um domänenübergreifende Probleme geht, nutzen wir in der Regel Sitzungen und verwalten diese. Aufgrund von Richtlinieneinschränkungen für den Browserursprung können Sitzungen jedoch standardmäßig nicht über Domänen hinweg gemeinsam genutzt werden. Um dieses Problem zu lösen, müssen wir einige Techniken und Methoden verwenden, um eine domänenübergreifende gemeinsame Nutzung von Sitzungen zu erreichen. 1. Die häufigste Verwendung von Cookies zum domänenübergreifenden Teilen von Sitzungen

1. Implementieren der SMS-Anmeldung basierend auf der Sitzung 1.1 Ablaufdiagramm der SMS-Anmeldung 1.2 Implementieren des Sendens eines SMS-Bestätigungscodes Beschreibung der Front-End-Anfrage: Beschreibung der Anfragemethode POST-Anfragepfad/Benutzer/Code-Anfrageparameter Telefon (Telefonnummer) Rückgabewert Keine Back-End-Schnittstelle Implementierung: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1 Überprüfen Sie die Mobiltelefonnummer, wenn

JavaScript-Cookies Die Verwendung von JavaScript-Cookies ist die effektivste Möglichkeit, Präferenzen, Käufe, Provisionen und andere Informationen zu speichern und zu verfolgen. Informationen, die für ein besseres Besuchererlebnis oder Website-Statistiken benötigt werden. PHPCookieCookies sind Textdateien, die auf Client-Computern gespeichert und zu Nachverfolgungszwecken aufbewahrt werden. PHP unterstützt transparent HTTP-Cookies. Wie funktionieren JavaScript-Cookies? Ihr Server sendet einige Daten in Form eines Cookies an den Browser Ihres Besuchers. Browser können Cookies akzeptieren. Falls vorhanden, wird es als reiner Textdatensatz auf der Festplatte des Besuchers gespeichert. Wenn ein Besucher nun eine andere Seite der Website erreicht
