le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
SOAP sta per Simple Object Access Protocol ed è una vecchia forma di protocollo di accesso ai servizi Web basato su standard simile a REST. Finché è presente la configurazione necessaria, puoi sfruttare SOAP per inviare comandi al server TrinityCore.
Un buon modo per comprendere SOAP è confrontarlo con il REST contemporaneo. Il seguente articolo lo spiega molto bene: https://smartbear.com/blog/soap-vs-rest-whats-the-difference/.
La differenza principale tra i due è che SOAP si basa interamente su XML per fornire risposte e accettare payload. PHP fornisce alcuni metodi per semplificare questo processo, ma a seconda del caso d'uso, potrebbe essere necessario avere familiarità con XML.
servermondo.conf
Assicurati che le impostazioni nel file di configurazione siano impostate correttamente.
- # 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
Data la tua specifica configurazione di accesso RBAC, avrai bisogno anche di un account utente con autorizzazioni per utilizzare i comandi GM. Potrebbe essere una buona idea creare un account ad accesso limitato appositamente per questo scopo, anziché uno utilizzato da una sola persona.
NOTA: al momento in cui scrivo, il TC 335a supporta solo HTTP, quindi fai attenzione a non inviare segreti (password, ecc.) in questo modo. Si presuppone che tutto ciò che viene trasmesso sia in chiaro e possa essere letto da chiunque.
Se prevedi di connetterti in remoto tramite SOAP, dovresti assolutamente adottare misure per garantire una connessione sicura. Un potenziale approccio è tramite un proxy SSL inverso tramite apache o nginx. Tuttavia, questo non rientra nell'ambito di questa guida e non verrà incluso.
Esistono client per stabilire rapidamente una connessione e testare i comandi della console:
postino: https://www.postman.com/ (rete, agente/client desktop)
insonnia: https://insomnia.rest/
Usignolo usignolo: https://nightingale.rest/
Offrono tutti una varietà di dettagli, ma alla fine funzionano più o meno allo stesso modo. Grazie a Jackpoz per aver fornito i passaggi specifici per Postman - https://www.postman.com/.
Postman è disponibile in due versioni: un'interfaccia web (oltre a un proxy che può essere installato per eseguire richieste localhost) e un'applicazione desktop client completa. Le istruzioni sono le stesse in entrambi i casi.
Nella sezione "Il mio spazio di lavoro", trova il pulsante "Importa". Utilizzerai l'opzione del testo originale.
Copia e incolla il seguente JSON nella casella di testo. Assicurati di aggiornare le credenziali in item.request.auth.basic per l'utente GM menzionato in precedenza.
- {
- "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": []
- }
- ]
- }
Dovresti pensare a TC SOAP come a una raccolta da importare. Fare clic su Importa.
Ciò popolerà la nuova raccolta con il metodo HTTP corretto (POST) e i dettagli nelle schede Autorizzazione e Corpo.
Nella scheda Corpo, nota il payload XML e i comandi relativi alle informazioni sul server che sono precompilati per te.
Facendo clic sul pulsante "Invia" verrà inviata la richiesta e verrà fornita una risposta XML.
Sul lato destro dell'interfaccia di Postman, a</> Il simbolo aprirà uno snippet di codice in grado di convertire la richiesta nella lingua di tua scelta.
¶Utilizzo di PHP
Per interagire con TrinityCore utilizzando PHP, devi assicurarti di avere installata l'estensione PHP-soap. Assicurati inoltre di utilizzare una versione di PHP che sia ancora supportata attivamente. Gli esempi di codice sono stati testati da PHP7.4 a PHP8.1.
In tutti questi esempi, l'URI urn:TC è un parametro obbligatorio perché non abbiamo fornito un documento WSDL.
SoapClient-https://www.php.net/manual/en/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;
Si noti che stiamo passando un'intestazione di autorizzazione di base HTTP con nome utente e password codificati in base64 (separati da due punti). In alternativa, è possibile omettere ilstream_context
parametro e includi invece un nome utente (di accesso) e una password nella configurazione di 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;
Entrambi gli approcci sono validi, ma non fatevi ingannare! La codifica Base 64 non la rende intrinsecamente più sicura.
Ricorda che il client SOAP può riconoscere solo errori di connessione o configurazioni errate.Non saprà se hai fornito un comando non valido. Quindi spetta a te analizzare i risultati e decidere se il risultato previsto è stato un successo o meno. L'output sarà esattamente come se avessi eseguito il comando sulla console.
Infine, se preferisci non affidarti all'estensione SOAP o al client, puoi formare il payload XML e analizzare tu stesso la risposta XML risultante. Avrai comunque bisogno diestensione cURL, ma solitamente è disponibile se non è abilitata per impostazione predefinita.
- <?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;