2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
SOAP on lyhenne sanoista Simple Object Access Protocol, ja se on vanhempi standardipohjainen verkkopalveluprotokolla, joka on samanlainen kuin REST. Niin kauan kuin tarvittavat asetukset ovat paikoillaan, voit hyödyntää SOAP:ia lähettääksesi komentoja TrinityCore-palvelimelle.
Hyvä tapa ymmärtää SOAPia on verrata sitä nykyaikaiseen RESTiin. Seuraava artikkeli selittää tämän erittäin hyvin - https://smartbear.com/blog/soap-vs-rest-whats-the-difference/.
Suurin ero näiden kahden välillä on, että SOAP luottaa täysin XML:ään vastausten antamiseen ja hyötykuormien hyväksymiseen. PHP tarjoaa joitain menetelmiä tämän prosessin helpottamiseksi, mutta käyttötapauksestasi riippuen sinun on ehkä tunnettava XML.
worldserver.conf
Varmista, että määritystiedoston asetukset on asetettu oikein.
- # 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
Erityiset RBAC-käyttöasetukset huomioon ottaen tarvitset myös käyttäjätilin, jolla on GM-komentojen käyttöoikeudet. Voi olla hyvä idea luoda rajoitetun pääsyn omaava tili nimenomaan tätä tarkoitusta varten yhden henkilön käyttämän tilin sijaan.
HUOMAA: Tätä kirjoittaessa TC 335a tukee vain HTTP:tä, joten ole varovainen, ettet lähetä salaisuuksia (salasanoja jne.) tällä tavalla. Oletetaan, että kaikki, mikä on hyväksytty, on selkeää tekstiä ja sen voi lukea kuka tahansa.
Jos aiot muodostaa etäyhteyden SOAP:n kautta, kannattaa ehdottomasti varmistaa suojattu yhteys. Yksi mahdollinen lähestymistapa on käänteinen SSL-välityspalvelin apachen tai nginxin kautta. Tämä ei kuitenkaan kuulu tämän oppaan piiriin, eikä sitä sisällytetä siihen.
On olemassa asiakkaita, joilla voi nopeasti muodostaa yhteyden ja testata konsolin komentoja:
postimies: https://www.postman.com/ (verkko, työpöytäagentti/asiakas)
unettomuus: https://insomnia.rest/
Satakieli satakieli: https://nightingale.rest/
Ne kaikki tarjoavat erilaisia yksityiskohtia, mutta toimivat lopulta suunnilleen samalla tavalla. Kiitos Jackpozille erityisten vaiheiden antamisesta Postmanille - https://www.postman.com/.
Postman on saatavana kahdessa eri muodossa: verkkokäyttöliittymä (sekä välityspalvelin, joka voidaan asentaa suorittamaan localhost-pyyntöjä) ja täydellinen asiakastyöpöytäsovellus. Ohjeet ovat samat molemmissa tapauksissa.
Etsi Oma työtila -kohdasta Tuo-painike. Käytät alkuperäistä tekstivaihtoehtoa.
Kopioi ja liitä seuraava JSON tekstiruutuun. Muista päivittää tunnistetiedot kohdassa item.request.auth.basic aiemmin mainitulle GM-käyttäjälle.
- {
- "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": []
- }
- ]
- }
Sinun tulisi ajatella TC SOAPia tuotavana kokoelmana. Napsauta Tuo.
Tämä täyttää uuden kokoelman oikealla HTTP-menetelmällä (POST) ja Valtuutus- ja Teksti-välilehtien tiedoilla.
Huomaa Runko-välilehdellä XML-hyötykuorma- ja palvelintietokomennot, jotka on täytetty sinulle valmiiksi.
Napsauta "Lähetä" -painiketta lähettää pyynnön ja antaa XML-vastauksen.
Postimiehen käyttöliittymän oikealla puolella a</> symboli avaa koodinpätkän, joka voi muuntaa pyynnön valitsemallesi kielelle.
¶ PHP:n käyttö
Jotta voit olla vuorovaikutuksessa TrinityCoren kanssa PHP:n avulla, sinun on varmistettava, että PHP-saippualaajennus on asennettu. Varmista myös, että käytät PHP-versiota, jota tuetaan edelleen aktiivisesti. Koodiesimerkkejä testattiin PHP7.4:stä PHP8.1:een.
Kaikissa näissä esimerkeissä urn:TC URI on pakollinen parametri, koska emme toimittaneet WSDL-asiakirjaa.
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;
Huomaa, että välitämme HTTP-perusvaltuutusotsikon, jossa on base64-koodattu käyttäjätunnus ja salasana (erotettuna kaksoispisteellä). Vaihtoehtoisesti voit jättää väliinstream_context
parametri, ja sisällytä sen sijaan (kirjautumis) käyttäjätunnus ja salasana SoapClient-kokoonpanoon.
- $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;
Kumpi tahansa lähestymistapa on hyvä - mutta älä mene lankaan! Base 64 -koodaus ei luonnostaan tee siitä turvallisempaa.
Muista, että SOAP-asiakasohjelma tunnistaa vain yhteyden muodostamisen epäonnistumiset tai virheelliset määritykset.Se ei tiedä, oletko antanut virheellisen komennon . Sinun tehtäväsi on siis jäsentää tulokset ja päättää, onnistuiko aiottu tulos vai ei. Tulostus on aivan kuin jos olisit suorittanut komennon konsolissa.
Lopuksi, jos et halua luottaa SOAP-laajennukseen tai asiakasohjelmaan, voit muodostaa XML-hyötykuorman ja jäsentää tuloksena olevan XML-vastauksen itse. Tarvitset vieläcURL-laajennus, mutta tämä on yleensä käytettävissä, jos se ei ole oletusarvoisesti käytössä.
- <?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;