Table des matières
error:
msg? :
Maison développement back-end tutoriel php QQ登录OAuth2.0 php接入种

QQ登录OAuth2.0 php接入种

Jun 13, 2016 pm 01:18 PM
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);
?? }
?
}
?
/* 公用函数 */
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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Introduction à la fonction PHP — get_headers() : récupère les informations d'en-tête de réponse de l'URL Introduction à la fonction PHP — get_headers() : récupère les informations d'en-tête de réponse de l'URL Jul 25, 2023 am 09:05 AM

Introduction à la fonction PHP — get_headers() : Présentation de l'obtention des informations d'en-tête de réponse de l'URL : Dans le développement PHP, nous avons souvent besoin d'obtenir les informations d'en-tête de réponse de la page Web ou de la ressource distante. La fonction PHP get_headers() peut facilement obtenir les informations d'en-tête de réponse de l'URL cible et les renvoyer sous la forme d'un tableau. Cet article présentera l'utilisation de la fonction get_headers() et fournira quelques exemples de code associés. Utilisation de la fonction get_headers() : get_header

Comment résoudre l'échec de la session Comment résoudre l'échec de la session Oct 18, 2023 pm 05:19 PM

L'échec de la session est généralement dû à l'expiration de la durée de vie de la session ou à l'arrêt du serveur. Les solutions : 1. Prolonger la durée de vie de la session ; 2. Utiliser le stockage persistant ; 3. Utiliser les cookies ; 4. Mettre à jour la session de manière asynchrone ; 5. Utiliser un middleware de gestion de session ;

Solution au problème inter-domaines de session PHP Solution au problème inter-domaines de session PHP Oct 12, 2023 pm 03:00 PM

Solution au problème inter-domaines de PHPSession Dans le développement de la séparation front-end et back-end, les requêtes inter-domaines sont devenues la norme. Lorsque nous traitons de problèmes interdomaines, nous impliquons généralement l'utilisation et la gestion de sessions. Cependant, en raison des restrictions de la politique d'origine du navigateur, les sessions ne peuvent pas être partagées par défaut entre les domaines. Afin de résoudre ce problème, nous devons utiliser certaines techniques et méthodes pour réaliser le partage de sessions entre domaines. 1. L'utilisation la plus courante des cookies pour partager des sessions entre domaines

Pourquoi NameResolutionError(self.host, self, e) de e et comment le résoudre Pourquoi NameResolutionError(self.host, self, e) de e et comment le résoudre Mar 01, 2024 pm 01:20 PM

La raison de l'erreur est NameResolutionError(self.host,self,e)frome, qui est un type d'exception dans la bibliothèque urllib3. La raison de cette erreur est que la résolution DNS a échoué, c'est-à-dire le nom d'hôte ou l'adresse IP qui était. La tentative de résolution n'a pas pu être trouvée. Cela peut être dû au fait que l'adresse URL saisie est incorrecte ou que le serveur DNS est temporairement indisponible. Comment résoudre cette erreur Il peut y avoir plusieurs façons de résoudre cette erreur : Vérifiez si l'adresse URL saisie est correcte et assurez-vous qu'elle est accessible Assurez-vous que le serveur DNS est disponible, vous pouvez essayer d'utiliser la commande "ping" dans la ligne de commande pour tester si le serveur DNS est disponible Essayez d'accéder au site Web en utilisant l'adresse IP au lieu du nom d'hôte si vous êtes derrière un proxy

Que signifie fonction ? Que signifie fonction ? Aug 04, 2023 am 10:33 AM

Fonction signifie fonction. Il s'agit d'un bloc de code réutilisable avec des fonctions spécifiques. C'est l'un des composants de base d'un programme. Il peut accepter des paramètres d'entrée, effectuer des opérations spécifiques et renvoyer des résultats. code pour améliorer la réutilisabilité et la maintenabilité du code.

Quelle est la différence entre HTML et URL Quelle est la différence entre HTML et URL Mar 06, 2024 pm 03:06 PM

Différences : 1. Différentes définitions, l'URL est un localisateur de ressources uniforme et le HTML est un langage de balisage hypertexte ; 2. Il peut y avoir plusieurs URL dans un HTML, mais une seule page HTML peut exister dans une URL. 3. HTML fait référence à ; une page Web, et l'url fait référence à l'adresse du site Web.

Comment implémenter la connexion SMS dans l'application de session partagée Redis Comment implémenter la connexion SMS dans l'application de session partagée Redis Jun 03, 2023 pm 03:11 PM

1. Implémentation de la connexion SMS basée sur la session 1.1 Organigramme de connexion SMS 1.2 Implémentation de l'envoi du code de vérification SMS Description de la demande frontale : Description de la méthode de demande Chemin de requête POST/utilisateur/code paramètre de demande téléphone (numéro de téléphone) valeur de retour Aucune interface back-end implémentation : @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1 Vérifiez le numéro de téléphone mobile si.

Conseils d'optimisation Scrapy : Comment réduire l'exploration des URL en double et améliorer l'efficacité Conseils d'optimisation Scrapy : Comment réduire l'exploration des URL en double et améliorer l'efficacité Jun 22, 2023 pm 01:57 PM

Scrapy est un puissant framework d'exploration Python qui peut être utilisé pour obtenir de grandes quantités de données sur Internet. Cependant, lors du développement de Scrapy, nous rencontrons souvent le problème de l'exploration des URL en double, ce qui fait perdre beaucoup de temps et de ressources et affecte l'efficacité. Cet article présentera quelques techniques d'optimisation de Scrapy pour réduire l'exploration des URL en double et améliorer l'efficacité des robots d'exploration Scrapy. 1. Utilisez les attributs start_urls et Allowed_domains dans le robot d'exploration Scrapy pour

See all articles