Teknologian jakaminen

Vuorovaikutus TrinityCoren kanssa SOAPin (TBD) avulla

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

alkuperäinen: SOAP TrinityCore | TrinityCore MMo Project Wiki

 

Kuinka olla vuorovaikutuksessa TC:n kanssa SOAPin avulla

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.

Kokoonpano


worldserver.conf
Varmista, että määritystiedoston asetukset on asetettu oikein.

  1. # SOAP.Enable
  2. # Description: Enable soap service.
  3. # Default: 0 - (Disabled)
  4. # 1 - (Enabled)
  5. SOAP.Enabled = 1
  6. # SOAP.IP
  7. # Description: Bind SOAP service to IP/hostname.
  8. # Default: "127.0.0.1" - (Bind to localhost)
  9. SOAP.IP = "127.0.0.1"
  10. # SOAP.Port
  11. # Description: TCP port to reach the SOAP service.
  12. # Default: 7878
  13. 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.

HTTP-asiakas prototyyppien tekemiseen


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.

  1. {
  2. "info": {
  3. "name": "TC SOAP",
  4. "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
  5. },
  6. "item": [
  7. {
  8. "name": "server info",
  9. "request": {
  10. "auth": {
  11. "type": "basic",
  12. "basic": {
  13. "username": "CHANGEME",
  14. "password": "CHANGEME",
  15. "showPassword": false
  16. }
  17. },
  18. "method": "POST",
  19. "header": [],
  20. "body": {
  21. "mode": "raw",
  22. "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>",
  23. "options": {
  24. "raw": {
  25. "language": "xml"
  26. }
  27. }
  28. },
  29. "url": "http://127.0.0.1:7878"
  30. },
  31. "response": []
  32. }
  33. ]
  34. }

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

  1. $command = 'server info';
  2. $opts = [
  3. 'http' => [
  4. 'header' => "Authorization: Basic " . base64_encode("USERNAME:PASSWORD")
  5. ]];
  6. $client = new SoapClient($wsdl = null, [
  7. 'stream_context' => stream_context_create($opts),
  8. 'location' => 'http://127.0.0.1:7878',
  9. 'uri' => 'urn:TC',
  10. ]);
  11. try {
  12. $result = $client->executeCommand(new SoapParam($command, 'command'));
  13. } catch (Exception $e) {
  14. die($e->getMessage());
  15. }
  16. 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_contextparametri, ja sisällytä sen sijaan (kirjautumis) käyttäjätunnus ja salasana SoapClient-kokoonpanoon.

  1. $command = 'server info';
  2. $client = new SoapClient($wsdl = null, [
  3. 'location' => 'http://127.0.0.1:7878',
  4. 'uri' => 'urn:TC',
  5. 'login' => 'USERNAME',
  6. 'password' => 'PASSWORD',
  7. ]);
  8. try {
  9. $result = $client->executeCommand(new SoapParam($command, 'command'));
  10. } catch (Exception $e) {
  11. die($e->getMessage());
  12. }
  13. 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ä.

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <SOAP-ENV:Envelope
  3. xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  4. xmlns:ns1="urn:TC">
  5. <SOAP-ENV:Body>
  6. <ns1:executeCommand>
  7. <command>server info</command>
  8. </ns1:executeCommand>
  9. </SOAP-ENV:Body>
  10. </SOAP-ENV:Envelope>
  1. $curl = curl_init();
  2. curl_setopt_array($curl, [
  3. CURLOPT_POSTFIELDS => $payload, // $payload is the XML provided above
  4. CURLOPT_URL => 'http://127.0.0.1:7878',
  5. CURLOPT_TIMEOUT => 0,
  6. CURLOPT_CUSTOMREQUEST => 'POST',
  7. CURLOPT_HTTPHEADER => [
  8. "Authorization: Basic " . base64_encode("{$user}:{$pass}"),
  9. 'Content-Type: application/xml',
  10. ],
  11. ]);
  12. $response = curl_exec($curl);
  13. curl_close($curl);
  14. echo $response;