2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
SOAP signifie Simple Object Access Protocol et est une ancienne forme de protocole d'accès aux services Web basé sur des normes, similaire à REST. Tant que la configuration nécessaire est en place, vous pouvez utiliser SOAP pour envoyer des commandes au serveur TrinityCore.
Une bonne façon de comprendre SOAP est de le comparer au REST contemporain. L'article suivant l'explique très bien – https://smartbear.com/blog/soap-vs-rest-whats-the-difference/.
La principale différence entre les deux est que SOAP s'appuie entièrement sur XML pour fournir des réponses et accepter des charges utiles. PHP fournit certaines méthodes pour faciliter ce processus, mais selon votre cas d'utilisation, vous devrez peut-être vous familiariser avec XML.
worldserver.conf
Assurez-vous que les paramètres du fichier de configuration sont correctement définis.
- # SOAP.Enable
- # Description: Enable soap service.
- # Default: 0 - (Disabled)
- # 1 - (Enabled)
- SOAP.Enabled = 1
-
- # SOAP.IP
- # Description: Bind SOAP service to IP/hostname.
- # Default: "127.0.0.1" - (Bind to localhost)
- SOAP.IP = "127.0.0.1"
-
- # SOAP.Port
- # Description: TCP port to reach the SOAP service.
- # Default: 7878
- SOAP.Port = 7878
Compte tenu de votre configuration d'accès RBAC spécifique, vous aurez également besoin d'un compte utilisateur doté des autorisations nécessaires pour utiliser les commandes GM. Il pourrait être judicieux de créer un compte à accès limité spécifiquement à cette fin, plutôt qu'un compte utilisé par une seule personne.
REMARQUE : Au moment de la rédaction, le TC 335a ne prend en charge que HTTP, veillez donc à ne pas envoyer de secrets (mots de passe, etc.) de cette façon. On suppose que tout ce qui est transmis est en texte clair et peut être lu par n'importe qui.
Si vous envisagez de vous connecter à distance via SOAP, vous devez absolument prendre des mesures pour garantir une connexion sécurisée. Une approche potentielle consiste à utiliser un proxy SSL inverse via Apache ou Nginx. Cependant, cela sort du cadre de ce guide et ne sera pas inclus.
Il existe des clients pour établir rapidement une connexion et tester les commandes de la console :
facteur : https://www.postman.com/ (réseau, agent/client de bureau)
insomnie : https://insomnia.rest/
Rossignol rossignol : https://nightingale.rest/
Ils offrent tous une variété de détails, mais fonctionnent finalement à peu près de la même manière. Merci à Jackpoz d'avoir fourni les étapes spécifiques pour Postman - https://www.postman.com/.
Postman est disponible en deux versions : une interface Web (ainsi qu'un proxy qui peut être installé pour effectuer des requêtes localhost) et une application de bureau client complète. Les instructions sont les mêmes dans les deux cas.
Sous « Mon espace de travail », recherchez le bouton « Importer ». Vous utiliserez l’option de texte original.
Copiez et collez le JSON suivant dans la zone de texte. Veuillez vous assurer de mettre à jour les informations d'identification sous item.request.auth.basic pour l'utilisateur GM mentionné précédemment.
- {
- "info": {
- "name": "TC SOAP",
- "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
- },
- "item": [
- {
- "name": "server info",
- "request": {
- "auth": {
- "type": "basic",
- "basic": {
- "username": "CHANGEME",
- "password": "CHANGEME",
- "showPassword": false
- }
- },
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "<?xml version="1.0" encoding="utf-8"?>rn<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:TC">rn<SOAP-ENV:Body>rn<ns1:executeCommand>rn<command>server info</command>rn</ns1:executeCommand>rn</SOAP-ENV:Body>rn</SOAP-ENV:Envelope>",
- "options": {
- "raw": {
- "language": "xml"
- }
- }
- },
- "url": "http://127.0.0.1:7878"
- },
- "response": []
- }
- ]
- }
Vous devriez considérer TC SOAP comme une collection à importer. Cliquez sur Importer.
Cela remplira la nouvelle collection avec la méthode HTTP correcte (POST) et les détails sous les onglets Autorisation et Corps.
Sous l'onglet Corps, notez les commandes de charge utile XML et d'informations sur le serveur qui sont pré-remplies pour vous.
Cliquer sur le bouton « Envoyer » soumettra la demande et fournira une réponse XML.
Sur le côté droit de l'interface Postman, un</> Le symbole ouvrira un extrait de code qui pourra convertir la requête dans la langue de votre choix.
¶Utiliser PHP
Pour interagir avec TrinityCore à l'aide de PHP, vous devez vous assurer que l'extension PHP-soap est installée. Assurez-vous également que vous utilisez une version de PHP toujours activement prise en charge. Des exemples de code ont été testés sur PHP7.4 à PHP8.1.
Dans tous ces exemples, l'URI urn:TC est un paramètre obligatoire car nous n'avons pas fourni de document WSDL.
SoapClient-https://www.php.net/manual/fr/class.soapclient.php
- $command = 'server info';
-
- $opts = [
- 'http' => [
- 'header' => "Authorization: Basic " . base64_encode("USERNAME:PASSWORD")
- ]];
-
- $client = new SoapClient($wsdl = null, [
- 'stream_context' => stream_context_create($opts),
- 'location' => 'http://127.0.0.1:7878',
- 'uri' => 'urn:TC',
- ]);
-
- try {
- $result = $client->executeCommand(new SoapParam($command, 'command'));
- } catch (Exception $e) {
- die($e->getMessage());
- }
-
- echo $result;
Notez que nous transmettons un en-tête d'autorisation HTTP de base avec un nom d'utilisateur et un mot de passe codés en base64 (séparés par deux points). Vous pouvez également omettre lestream_context
paramètre, et incluez plutôt un nom d'utilisateur (de connexion) et un mot de passe dans votre configuration SoapClient.
- $command = 'server info';
-
- $client = new SoapClient($wsdl = null, [
- 'location' => 'http://127.0.0.1:7878',
- 'uri' => 'urn:TC',
- 'login' => 'USERNAME',
- 'password' => 'PASSWORD',
- ]);
-
- try {
- $result = $client->executeCommand(new SoapParam($command, 'command'));
- } catch (Exception $e) {
- die($e->getMessage());
- }
-
- echo $result;
Les deux approches sont valables, mais ne vous laissez pas tromper ! Le codage en base 64 ne le rend pas intrinsèquement plus sûr.
N'oubliez pas que le client SOAP ne peut reconnaître que les échecs de connexion ou les mauvaises configurations.Il ne saura pas si vous avez fourni une commande non valide. C'est donc à vous d'analyser les résultats et de décider si le résultat escompté est un succès ou non. Le résultat sera le même que si vous aviez exécuté la commande sur la console.
Enfin, si vous préférez ne pas vous fier à l'extension ou au client SOAP, vous pouvez former la charge utile XML et analyser vous-même la réponse XML résultante. Vous aurez toujours besoin deExtension cURL, mais cela est généralement disponible s'il n'est pas activé par défaut.
- <?xml version="1.0" encoding="utf-8"?>
- <SOAP-ENV:Envelope
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:ns1="urn:TC">
- <SOAP-ENV:Body>
- <ns1:executeCommand>
- <command>server info</command>
- </ns1:executeCommand>
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
- $curl = curl_init();
-
- curl_setopt_array($curl, [
- CURLOPT_POSTFIELDS => $payload, // $payload is the XML provided above
- CURLOPT_URL => 'http://127.0.0.1:7878',
- CURLOPT_TIMEOUT => 0,
- CURLOPT_CUSTOMREQUEST => 'POST',
- CURLOPT_HTTPHEADER => [
- "Authorization: Basic " . base64_encode("{$user}:{$pass}"),
- 'Content-Type: application/xml',
- ],
- ]);
-
- $response = curl_exec($curl);
- curl_close($curl);
- echo $response;