Jump to content

[PHP]Soap


Goshi

Recommended Posts

Hello, je débute avec SOAP. :cartonrouge:

Ce que je souhaite faire est assez simple. J'ai 4 xml qui correspondent à 4 requetes SOAP différentes. Selon la requete je dois afficher un XML ou un autre.

Comment en php récupérer la requete ? J'ai essayé un banal POST mais impossible.

La requete est :

POST /jeux/index.php HTTP/1.1
Host: tabs.msncreative.net
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.msn.com/webservices/Messenger/Client/GetAppEntry"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
<GetAppEntry xmlns="http://www.msn.com/webservices/Messenger/Client">
  <ID>int</ID>
</GetAppEntry>
 </soap:Body>
</soap:Envelope>

La seule chose qui change entre chaque requete est le nombre dans les balises <ID></ID>.

J'ai un serveur dédié avec SOAP d'installé. Quelqu'un peut me dire comment faire pour que PHP lise ce fameux int ? J'ai lu divers tuto mais tous sont bien trop complexe pour ceci, pas besoin de wsld ou autre :)

Link to comment
Share on other sites

Houla, que de confusion.

"Un serveur avec SOAP installé" ne veut rien dire, SOAP est un protocole!

Tu veux sûrement dire que tu as un serveur qui publie un webservice (une fonction "GetAppEntry" qui prend un nombre en paramètre, si j'en crois le message SOAP).

Si tu as accès au code source du service, il suffit de logger quelquepart le paramètre reçu lors de l'appel. Mais cela m'étonnerait, car ça a l'air d'être une fonction de MSN.

La solution consiste donc plutôt à faire passer les appels via un proxy spécial, qui parcourt ("parse") le XML à la volée pour en extraire le contenu de ta balise ID. Heureusement, PHP possède des librairies SAX qui permettent de faire ça facilement.

Link to comment
Share on other sites

Ah, il me semblait que soap était une librairie de php...

Parser ne pose pas de problemes, le soucis c'est comment en php lire le contenu de la requete recue ? GET, POST ? Une fois que j'aurais le contenu dans une valeur ça devrait aller je pense :)

Edit : En résumé, Msn est modifié pour se connecter à mon serveur et récupérer la config générale dessus (ca c'est fait et ca roule). Ce que je veux faire c'est en modifier les jeux (l'url pour la config des jeux et incluse dans la config générale donc aussi modifiable) et pour ça aussi je veux qu'il utilise mon serveur. Le soucis c'est qu'il utilise soap et que je ne sais pas comment lire sa requete, je sais juste quelle réponses il attend selon chaque requete et le lui envoyer ne pose pas de soucis non plus, j'ai les xml de réponses tout fait que je peux afficher simplement selon la requete.

Link to comment
Share on other sites

Ben, le principe de SOAP (en simplifiant), c'est d'envoyer une requête HTTP (ou autre "transport"), et dans le corps de la requête, balancer un message XML qui décrit un appel à une méthode.

Donc, logiquement, il suffit de dumper la requête pour avoir accès au XML, puis le parser pour récupérer la valeur qui t'intéresse.

As-tu essayé un simple print_r($_POST) pour voir ce que tu peux récupérer ?

Link to comment
Share on other sites

J'ai testé une source de developpez.com qui donnait tous les GET et POST recus par la page que j'ai fait stocké dans une base de donnée mysql, si je le fait manuellement (avec des trucs bidons) pour tester je récupere bien mais avec msn, rien.

Comment "dumper" la requete ?

Link to comment
Share on other sites

Et avec ça : http://tabs.msncreative.net/jeux/Projet.rar ?

Ca contient un executable qui simule la requete soap qu'enverrait Msn a l'adresse indiquée à la deuxieme ligne et un .xml qui est la réponse si int vaut 1.

Si ça peut permettre de plus te faire comprendre ? Mon seul et unique soucis étant en fait d'accéder à la requete via php :(.

Ca m'aiderait vraiment si tu pouvais m'indiquer comment accéder à la requete via php. Si on indique l'adresse du xml il se télécharge sans soucis, c'est donc bien la réponse attendue mais comme il y a plusieurs xml possible :ouioui:

Link to comment
Share on other sites

AAAAAAH, je m'améliore, je crois avoir compris comment lire la reqûete.

Voilà mon code, c'était un exemple, je voulais juste savoir si j'arrivais à lire la requete soap et j'ai bien une réponse du serveur, il me reste à parser cette requete et ca sera bon.

<?
$requete = getenv("HTTP_SOAPACTION");

if ($requete != ''){
header("Content-Type: text/xml; charset=utf-8");
$url = "1.xml";
$data = file_get_contents($url);
header("HTTP/1.1 200 OK");
$filesize=filesize($url);
header("Content-Length: ".$filesize);
echo $data;
		   }
?>

La réponse à ma question était tout simplement : $requete = getenv("HTTP_SOAPACTION"); :mdr:

Oui je sais, j'ai honte :mdr:

edit : ah ben nan, même pas, j'ai juste http://www.msn.com/webservices/Messenger/Client/GetAppEntry de récupéré :dd:

Link to comment
Share on other sites

:transpi: Merci bien de la réponse mais soap me semble trop complexe.

Quelqu'un peut me dire pourqoi ce code fait charger la page indéfiniment ?

<?php
$port = $_SERVER['REMOTE_PORT'];
// On crée la socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_bind($socket, '195.140.143.50', 80);

// On la fait écouter
socket_listen($socket, 5);

// Boucle infinie
while (TRUE)
{
// On attend qu'un client se connecte
$client = socket_accept($socket);

// On lit un paquet de réponse du client
$response = socket_read($client, 1000, PHP_BINARY_READ);

// On envoie des données au client
if ($reponse != ''){
$url = '1.xml';
header("Content-Type: text/xml; charset=utf-8");
header("Content-Length: ".filesize ($url) );
header("Status: HTTP/1.1 200 OK");
$data = file_get_contents($url);
			   }

// On ferme la connexion avec le client
socket_close($client);
}
?>

C'était toujours pour tester mais ca veut même pas, ca cherche sans fin la page

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...