[Aide au Jeu] Utiliser l'interface de connexion GT

  • Auteur de la discussion DeletedUser10744
  • Date de début

DeletedUser10744

Guest
tuto_tools_connexion.png



§1. Présentation

Guerre Tribale fourni un système d'authentification sécurisé des joueurs sur les sites externes. Pour cela, il est nécessaire de mettre en place deux choses : l'url de renvoi vers GT et un fichier callback.php.
Afin d'introduire au fonctionnement, je vous invite à consulter un message de Morthy, développeur Innogames : http://forum.tribalwars.net/showthread.php?t=117912&page=3#42.

§2. Récupération des identifiants

Vous devez récupérer un identifiant client et un password auprès de l'équipe de support. Pour cela, rendez-vous sur le système de tickets : http://support.innogames.de/login?game=staemme&lang=fr, connectez-vous et ouvrez un ticket en indiquant que vous souhaitez récupérer ces informations. Je vous conseille au passage de bien décrire le projet que vous souhaitez développer.

§3. Création du lien vers GT

Une fois que cela est fait, passons à l'url de renvoi vers GT. Dans l'exemple ci-dessous, cela est fait avec comme nom de client tw-manager.com et je choisis de lui envoyer comme sid l'identifiant de session de l'utilisateur :

PHP:
$session_id = session_id();
$link 		= 'http://www.guerretribale.fr/external_auth.php?sid='.$session_id.'&client=tw-manager.com';


§4. Le fichier Callback.php

Voilà ci-dessous un exemple concret commenté :


PHP:
<?php
// Si nécessaire, on indique dans quel répertoire stocker les sessions
ini_set('session.save_path','...');

// Récupération des paramètres
$sid 		= $_GET['sid'];			// Id de session du joueur
$username 	= $_GET['username'];	// Pseudo du joueur
$hash 		= $_GET['hash'];		// Hash fourni par GT qui permet de contrôler les informations
$market 	= $_GET['market'];		// Correspond au site GT sur lequel est l'utilisateur (fr, de, en, etc.)

// Initialisation de la session avec le sid fourni en paramètre
session_id($sid);
session_start();

// Le password est fourni par Guerre Tribale sur demande
$password = '....'; 

// On teste si les informations fournies par l'utilisateur sont correctes
if(md5($sid.$username.$password) == $hash) {
	// Stockage des informations en session
	$_SESSION['connected'] 	= true;
	$_SESSION['username'] 	= $username;
	$_SESSION['market'] 	= $market;
	
	// Connexion à la BDD
	mysql_connect('...','...','...');
	mysql_select_db('...');
	
	// On regarde si l'utilisateur est déjà enregistré (il faut rechercher suivant le username ET le market,
	// Car deux joueurs différents peuvent avoir le même pseudo, mais sur des markets différents)
	// Par exemple : il peut y avoir le joueur Truc sur le market fr, et le joueur Truc sur le market de
	$request = mysql_query('SELECT `user_id` FROM `tw_user` WHERE `user_name`="'.$username.'" AND `user_market`="'.$market.'" ');
	
	// Si le joueur n'est pas enregistré, on l'ajoute en BDD et on stocke l'id généré en session
	if(mysql_num_rows($request) != 1) {
		mysql_query('INSERT INTO `tw_user`(`user_name`,`user_date_first_connexion`,`user_market`) VALUES("'.$username.'","'.time().'","'.$market.'") ');
		$_SESSION['user_id'] 	= mysql_insert_id();
	}
	// Sinon, on récupère son id et on le stocke en session
	else {
		$user = mysql_fetch_assoc($request);
		$_SESSION['user_id'] = $user['user_id'];
	}
	
	// On écrit dans la page l'url vers laquelle gt doit renvoyé l'utilisateur
	echo 'http://'.$market.'.tw-manager.com/portal/index.php';
}
// On écrit dans la page l'url d'erreur connexion vers laquelle gt doit renvoyé l'utilisateur
else
	echo 'http://'.$market.'.tw-manager.com/portal/index.php?p=error';

§5. Conclusion

Voilà, c'est fini, il ne vous reste plus qu'à faire un super site :D

 
Dernière édition par un modérateur:

DeletedUser

Guest
Salut et merci pour ce tuto
mais Je ne comprend pas comment tu récupère les parametres :
sid, username, hash et market.

il me faudrait s'il te plait la marche a suivre pour que GT transmet les infos sur la page (ici Callback.php), et c'est la ou je bloque;
tu indique ce lien : 'http://www.guerretribale.fr/external_auth.php?sid='.$session_id.'&amp;client=tw-manager.com';
mais je ne comprend pas comment obtenir la valeurs de la variable session_id();
 
Dernière édition par un modérateur:

DeletedUser

Guest
Plup.

session_id() n'est pas un variable mais une fonction. Cette fonction à 2 objectifs.
1) Définir un id à une session
2) Récupérer l'id d'une session.

En français la cette ligne veut dire :
Code:
$link= 'http://www.guerretribale.fr/external_auth.php?sid='.$session_id.'&amp;client=tw-manager.com';

On passe la variable GET['id'] = session courante et GET['client'] = tw-manager.com à l'adresse http://www.guerretribale.fr/external_auth.php

Si jamais il y a plain de doc pour PHP

PHP Manuel
Tout sur les sessions

Have a Fun
 

DeletedUser

Guest
ok, je me suis documenté et j'ai fait un ptit test :

PHP:
<?php
session_start();
$session_id = session_id(); 
$link= 'http://www.guerretribale.fr/external_auth.php?sid='.$session_id.'&amp;client=ploupy';
echo $link;
?>

effectivement $link; me renvoie bien le lien en entier avec la session ,
donc j'ait fait un copier/coller du lien vers mon navigateur et
ca me renvoit bien un lien vers le page d'authentification, mais lorsque je clique sur "Authentifier" ca me renvoie sur http://www.guerretribale.fr/%3Chtml%3E


alors que si je le fait pour fr.tw-manager.com, il me renvoie bien sur http://fr.tw-manager.com/portal/index.php


Ce qui veux dire que le problème ne viens pas de moi mais de guerre tribale : Mon id client est valide mais il ne renvoie pas vers l'adresse de mon site. c'est ça le problème, bon je les recontact...
 
Dernière édition par un modérateur:

DeletedUser10744

Guest
Non ce n'est pas du tout ça le problème.

Tu as bien créé un fichier callback.php sur ton site ? Et as-tu donné l'url vers ce fichier au support ?

Je te réexplique le processus qui est expliqué dans le lien vers le message de Morthy (http://forum.tribalwars.net/showthread.php?t=117912&page=3#42), les étapes sont :

1. Le visiteur est redirigé vers external_auth.php avec les paramètres sid et client via GET.
2. Le visiteur se connecte en utilisant son login et son password
3. Guerre Tribale fait une requête en arrière-plan vers l'url de validation (callback.php) avec les paramètres username, sid, hash and market via GET.
4. Guerre Tribale redirige le visiteur vers la lien fourni par l'url de validation (callback.php)

Donc as-tu bien fait ton fichier callback.php ? Car Guerre Tribale redirige vers le lien que tu écris dans le callback.php, donc s'il redirige pas au bon endroit, c'est que tu ne leur fourni pas ce qu'il faut.
 

DeletedUser

Guest
as-tu donné l'url vers ce fichier au support ?

C'est justement la le problème que je viens de t'expliquer

Oui je leur ai donné l'url car il en avait besoin pour me fournir l'ID client, mais ils ne l'on pas prise en compte c'est ça le problème.
car quand je met mon id client, il me renvoie à guerretribale.fr
et Quand je met ton id client (a partir de mon site) , il me renvoie bien sur ton site, donc le probleme est la



par rapport au processus :
1. Le visiteur est redirigé vers external_auth.php avec les paramètres sid et client via GET. --> ca c'est bon !!!
2. Le visiteur se connecte en utilisant son login et son password --> ca c'est bon !!!

mais Guerre Tribale ne redirige pas le visiteur vers mon l'url

ce n'est pas un problème de code, tu verra essai avec ta page Callback.php --> ne marque rien dedans, et je suis certain que même vide , guerre tribale te redirigera quand même dessus, il ne fait juste que de te renvoyer les 4 variables qui sont :
'sid' , 'username', 'hash'] et 'market'
ensuite c'est ta page qui se charge de faire la requête de vérification
 
Dernière édition par un modérateur:

DeletedUser

Guest
1.J'entre mon lien dans le navigateur avec les variables Session ID et client
pour cette exemple :
id client : ploupy
session id : 57d41ce816321eeceafaea081c16bfe6
http://www.guerretribale.fr/external_auth.php?sid=57d41ce816321eeceafaea081c16bfe6&client=ploupy

2.J'arrive sur la page d'identification...
122445idexterne.png


3.Je valide, il me renvoie à cette adresse

4.Et voila le résultat, cela ne me renvoie pas sur mon site...
226498google.png


vous pouvez tester...

Le support ne m'a jamais répondu

mais je sais pourquoi..
 
Dernière édition par un modérateur:

DeletedUser10744

Guest
Peux-tu m'envoyer ton fichier callback.php en enlevant avant les logins de connexion à ta BDD et ton password fourni par Guerre tribale ?
 

DeletedUser

Guest
pour le moment je n'es pas de fichier callback.php car j'ai donnér pour lien ma page d'accueil.
je ferai le code de la page après au pas et pas pour vérifier à chaques fois ce que ca donne.

mais le soucis c'est que le site ne me renvoie pas sur ma page
 

DeletedUser10744

Guest
Donc tu n'as rien compris au fonctionnement :/

Je vais donc recommencer :
1. Le visiteur est redirigé vers external_auth.php avec les paramètres sid et client via GET.
2. Le visiteur se connecte en utilisant son login et son password
3. Guerre Tribale fait une requête en arrière-plan vers l'url de validation (callback.php) avec les paramètres username, sid, hash and market via GET.
4. Guerre Tribale redirige le visiteur vers la lien fourni par l'url de validation (callback.php)


Les points 3 et 4 ne peuvent pas fonctionner chez toi puisque tu n'as pas fait de fichier callback.php. TU t'étonnes que ça ne renvoie pas vers ton site mais vers <html>.

Vu que tu as donné comme lien la home de ton site, lorsque guerre tribale interroge ton lien pour recevoir l'url de retour, il lit la première ligne du fichier reçu, et comme c'est ta home, il récupère donc la première balise qui est <html>. Normal donc que ça ne fonctionne pas.

Si tu regardes bien mon fichier callback.php, à la fin de celui-ci, j'écris dans la page l'url vers laquelle je veux que l'utilisateur soit renvoyé, soit la home de mon site :
PHP:
    // On écrit dans la page l'url vers laquelle gt doit renvoyé l'utilisateur
    echo 'http://'.$market.'.tw-manager.com/portal/index.php';
}
// On écrit dans la page l'url d'erreur connexion vers laquelle gt doit renvoyé l'utilisateur
else
    echo 'http://'.$market.'.tw-manager.com/portal/index.php?p=error';

Donc là, toi tu voudrais que ça fonctionne mais sans respecter les consignes... Et le pire, c'est que tu oses dire après que c'est le système de Guerre Tribale qui ne fonctionne pas...
 

DeletedUser

Guest
Bon ça marche !!!!!

effectivement je n'avais pas compris.

disons que j'ai mis du code html dans mon "Callback.php" car je pensait que c 'était le lien que GT renvoyait mais en faite c'est le contenu de la page callback.php(echo) qui est le lien justement, d'ou mon erreur....


Bon merci quand même
 
Haut