Stratégie de développement_Côté serveur
Prérequis de lecture
Ce guide de développement est basé sur le processus de vérification d'autorisation consistant à utiliser le code d'autorisation pour obtenir un jeton d'accès. Il convient aux applications qui doivent être accessibles à partir du serveur Web, telles que les sites Web Web/wap.
Avant de lire ce guide de développement, veuillez lire [QQ Login] Utiliser le code d'autorisation pour obtenir un jeton d'accès pour comprendre le processus d'authentification.
1. Faites-en l'expérience
Remarque :
Cette expérience est basée sur le mode sans serveur, mais l'effet d'expérience est le même que celui du mode serveur.
1. Accès par navigateur : http://qzs.qq.com/qzone/openapi/client.html.
2. Cliquez sur le bouton « Connexion » sur la page :
3. Entrez le compte QQ et le mot de passe dans la boîte de connexion contextuelle :
4. Après une connexion réussie, accédez à l'adresse de rappel spécifiée, à l'URL. contient un jeton d'accès :
2. Commencez rapidement
Préparation
1. Veuillez vous assurer que votre site Web a soumis une demande d'accès à la connexion QQ et a obtenu avec succès l'appid et la clé d'application. Demandez l'accès
2. Veuillez envoyer une requête ping à openapi.qzone.qq.com sur votre serveur pour assurer une connexion fluide entre le site Web et Qzone.
Étape 1 : Placez le bouton de connexion QQ
Le site Web doit télécharger l'image du bouton « Connexion QQ » et placer le bouton à l'emplacement approprié sur la page conformément aux spécifications de l'interface utilisateur.
Spécification de placement du bouton de téléchargement de l'icône du bouton
Étape 2 : Obtenir le code d'autorisation
1 Ouvrez le navigateur et visitez l'adresse suivante (veuillez remplacer client_id, redirect_uri, scope et autres valeurs de paramètres par les vôtres) :
.
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&scope=[THE_SCOPE]
2. Si l'utilisateur est déjà connecté, une page de confirmation apparaîtra. Si vous n'êtes pas connecté, la page de connexion apparaîtra, comme indiqué ci-dessous :
3. Après une connexion réussie, la boîte d'autorisation apparaîtra pour guider l'utilisateur à autoriser (uniquement pour la première connexion réussie et la première Il est temps d'accéder à une OpenAPI non autorisée. La page d'autorisation apparaîtra), comme indiqué ci-dessous :
Remarque :
Si l'utilisateur clique sur "Passer", il passera à l'adresse de rappel et reviendra à l'avatar, au surnom et au sexe par défaut. .
Il est recommandé que les applications tierces contrôlent les éléments d'autorisation, c'est-à-dire que seul le nom OpenAPI qui doit être utilisé est transmis dans la portée du paramètre. Car plus il y a d’éléments d’autorisation, plus l’utilisateur est susceptible de refuser l’autorisation.
4. Si l'utilisateur clique sur "Confirmer" pour autoriser, il passera avec succès au redirect_uri spécifié et suivra le code d'autorisation (Notez que ce code expirera dans 10 minutes).
Par exemple, si l'adresse de rappel est : www.qq.com/my.php, elle passera à :
http://www.qq.com/my.php?code=520DD95263C1CFEA0870FBB66E**** **
Remarque :
Il est recommandé de définir l'adresse de rappel sur la page d'accueil du site Web ou sur le centre utilisateur du site Web.
Étape 3 : Obtenez le jeton d'accès via le code d'autorisation
1 Envoyez une demande à l'adresse suivante (veuillez remplacer la valeur du paramètre par la vôtre, voir ici pour l'explication des paramètres) :
https:/ / graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=[YOUR_APP_ID]&client_secret=[YOUR_APP_Key]&code=[The_AUTHORIZATION_CODE]&state=[The_CLIENT_STATE]&redirect_uri=[YOUR_REDIRECT_URI]
2.
access_token=YOUR_ACCESS_TOKEN&expires_in=3600
Vous pouvez accepter la demande dans le programme correspondant à l'URL de rappel (voir l'exemple de code ci-dessous) et terminer le travail d'obtention du jeton d'accès.
Rappel spécial :
Le token d'accès obtenu a une durée de validité de 3 mois et sera automatiquement rafraîchi lorsque l'utilisateur se reconnectera.
Les sites Web tiers peuvent stocker les informations du jeton d'accès pour une utilisation ultérieure lors de l'appel d'OpenAPI pour accéder et modifier les informations utilisateur.
Étape 4 : Utilisez le jeton d'accès pour obtenir l'OpenID de l'utilisateur
1 Envoyez une demande à l'adresse suivante (veuillez remplacer les valeurs des paramètres telles que access_token par la vôtre) :
https://graph. .qq. com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN
2 Obtenez l'OpenID de l'utilisateur et le package de retour est le suivant :
callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
Étape 5 : Utilisez le jeton d'accès et l'OpenID pour accéder et modifier les données utilisateur
1. Il est recommandé que le site Web appelle l'interface get_user_info après la connexion de l'utilisateur pour obtenir l'avatar et le pseudo de l'utilisateur et les afficher sur le site Web afin d'unifier l'expérience utilisateur.
2. Appelez un autre OpenAPI pour accéder et modifier les données utilisateur. Pour tous les détails sur OpenAPI, veuillez vous référer au document API [QQ Login].
Prenons l'exemple de l'appel de l'interface get_user_info :
(1) Envoyez une demande à l'URL de get_user_info (veuillez remplacer les valeurs access_token, appid et autres paramètres par les vôtres) :
https://graph .qq.com/user /get_user_info?access_token=YOUR_ACCESS_TOKEN&oauth_consumer_key=YOUR_APP_ID&openid=YOUR_OPENID
(2) Après un retour réussi, les données utilisateur peuvent être obtenues
{
"ret":0, "msg":"", "nickname":"YOUR_NICK_NAME", ...
}
:3. Exemple de code
//APPID de l'application
$app_id = "YOUR_APP_ID";
//APPKEY de l'application
$app_secret = "Y OUR_APP_KEY" ;
//Adresse de rappel après autorisation réussie
$my_url = "YOUR_REDIRECT_URL";
//Étape 1 : Obtenir le code d'autorisation
session_start();
$code = $_REQUEST["code"];
if(empty($ code))
// Le paramètre state est utilisé pour empêcher les attaques CSRF, il sera ramené tel quel lors du rappel après autorisation réussie
$_SESSION['state'] = (uniqid(rand(), TRUE));
/ / URL d'épissage
$dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
. $app_id "&redirect_uri=" . . $ _SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
if($_REQUEST['state'] == $_SESSION['state'])
{
//拼接URL
$token_url = "https://graph. qq.com/oauth2.0/token?grant_type=authorization_code&"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = file_get_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 ->erreur))
{
echo "<h3>erreur :</h3>" . $msg->erreur;
echo "<h3>msg :</h3>" . $msg->error_description;
exit;
}
}
$params = array();
parse_str($response, $params);
$graph_url = "https://graph.qq.com/oauth 2.0 /me?access_token="
$params['access_token'];
$str = file_get_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>erreur :</h3>" . $user->error;
echo "<h3>msg :</h3>" . $user->error_description;
exit;
}
echo("Bonjour " . $user->openid);
}
else
{
echo("L'état ne correspond pas. Vous peut-être être un victime du CSRF .");
}
?>