Page 1 sur 1

Requête SOAP | WSDL

Posté : 09 sept. 2016, 15:29
par Bowedy
Bonjour à tous,

Je chercherai un moyen pour pouvoir envoyer une requête SOAP à partir d'un code PHP. Je vous explique ce que je voudrais faire :

Un jeu en ligne nommé MovieStarPlanet, a une "librairie" avec de nombreuses requêtes SOAP.

Voici le lien de toutes ses requêtes :

- http://www.moviestarplanet.fr/WebServic ... rvice.asmx

La description du service entier :

- http://www.moviestarplanet.fr/WebServic ... .asmx?WSDL

J'essaye donc d'utiliser la fonction Login pour pouvoir vérifier si le pseudo et le mot de passe entrés par l'utilisateur, est correct. Comme la documentation l'indique, (http://www.moviestarplanet.fr/WebServic ... x?op=Login) la requête SOAP est comme ceci :
POST /WebService/ThirdParty/ThirdPartyService.asmx HTTP/1.1
Host: http://www.moviestarplanet.fr
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://moviestarplanet.com/Login"

<?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:Header>
    <ThirdPartyTokenHeader xmlns="http://moviestarplanet.com/">
      <ThirdPartyToken>string</ThirdPartyToken>
    </ThirdPartyTokenHeader>
  </soap:Header>
  <soap:Body>
    <Login xmlns="http://moviestarplanet.com/">
      <username>string</username>
      <password>string</password>
    </Login>
  </soap:Body>
</soap:Envelope>
Et la réponse de cette requête sera :
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?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:Header>
    <ThirdPartyTicketHeader xmlns="http://moviestarplanet.com/">
      <Ticket>string</Ticket>
    </ThirdPartyTicketHeader>
  </soap:Header>
  <soap:Body>
    <LoginResponse xmlns="http://moviestarplanet.com/">
      <LoginResult>
        <ServiceResult>
          <Codee>int</Codee>
          <Description>string</Description>
        </ServiceResult>
        <ActorId>int</ActorId>
        <AppToken>string</AppToken>
        <UserInfo>
          <FriendCount>int</FriendCount>
          <MembershipTimeoutDate>dateTime</MembershipTimeoutDate>
          <VipTier>int</VipTier>
          <Level>int</Level>
          <LockedUntil>dateTime</LockedUntil>
          <LockedText>string</LockedText>
          <SkinSWF>string</SkinSWF>
          <LastLogin>dateTime</LastLogin>
        </UserInfo>
      </LoginResult>
    </LoginResponse>
  </soap:Body>
</soap:Envelope>
Cela indiquera donc la plupart informations du compte en question, et si la combinaison pseudo/mot de passe est correct.

J'ai beaucoup cherché sur comment effectuer des requêtes SOAP, j'en ai essayé mais aucune ne marche pour moi. Voici le code qui pour moi, marcherai :
$soap_request  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$soap_request .= "<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/\">\n";
$soap_request .= "  <soap:Header>\n";
$soap_request .= "    <ThirdPartyTokenHeader xmlns=\"http://moviestarplanet.com/\">\n";
$soap_request .= "      <ThirdPartyToken>8346D304-F85E-4dc1-98EB-033CBEE0217F</ThirdPartyToken>\n";
$soap_request .= "    </ThirdPartyTokenHeader>\n";
$soap_request .= "  </soap:Header>\n";
$soap_request .= "  <soap:Body>\n";
$soap_request .= "    <Login xmlns=\"http://moviestarplanet.com/\">\n";
$soap_request .= "      <username>string</username>\n";
$soap_request .= "      <password>string</password>\n";
$soap_request .= "    </Login>\n";
$soap_request .= "  </soap:Body>\n";
$soap_request .= "</soap:Envelope>";

$header = array(
  "POST /WebService/ThirdParty/ThirdPartyService.asmx HTTP/1.1",
  "Host: http://www.moviestarplanet.fr",
  "Content-type: text/xml; charset=utf-8",
  "Content-length: ".strlen($soap_request),
  "SOAPAction: \"http://moviestarplanet.com/Login\"",
);

$url = "http://www.moviestarplanet.fr/WebService/ThirdParty/ThirdPartyService.asmx?WSDL";

$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, $url);
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_TIMEOUT,        10);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST,           true );
curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $soap_request);
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     $header);

if(curl_exec($soap_do) === false) {
  $err = 'Curl erreur : ' . curl_error($soap_do);
  curl_close($soap_do);
  print $err;
} else {
  curl_close($soap_do);
  print 'Succès.';
}
Lorsque j’exécute ce code sur ma page Web, une erreur m'indique "Operation timed out after 10000 milliseconds with 0 bytes received".

Quelqu'un aurait une idée pour résoudre ce problème ? Merci d'avoir lu !