τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Το SOAP σημαίνει πρωτόκολλο πρόσβασης απλού αντικειμένου και είναι μια παλαιότερη μορφή πρωτοκόλλου πρόσβασης υπηρεσιών web που βασίζεται σε πρότυπα παρόμοιο με το REST. Εφόσον υπάρχει η απαραίτητη διαμόρφωση, μπορείτε να αξιοποιήσετε το SOAP για να στείλετε εντολές στον διακομιστή TrinityCore.
Ένας καλός τρόπος για να κατανοήσετε το SOAP είναι να το συγκρίνετε με το σύγχρονο REST. Το παρακάτω άρθρο το εξηγεί πολύ καλά – https://smartbear.com/blog/soap-vs-rest-whats-the-difference/.
Η κύρια διαφορά μεταξύ των δύο είναι ότι το SOAP βασίζεται εξ ολοκλήρου στην XML για να παρέχει απαντήσεις και να δέχεται ωφέλιμα φορτία. Η PHP παρέχει ορισμένες μεθόδους για να διευκολύνει αυτή τη διαδικασία, αλλά ανάλογα με την περίπτωση χρήσης σας, ίσως χρειαστεί να είστε εξοικειωμένοι με την XML.
worldserver.conf
Βεβαιωθείτε ότι οι ρυθμίσεις στο αρχείο διαμόρφωσης έχουν οριστεί σωστά.
- # 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
Δεδομένης της συγκεκριμένης διαμόρφωσης πρόσβασης RBAC, θα χρειαστείτε επίσης έναν λογαριασμό χρήστη με δικαιώματα χρήσης εντολών GM. Ίσως θα ήταν καλή ιδέα να δημιουργήσετε έναν λογαριασμό περιορισμένης πρόσβασης ειδικά για αυτόν τον σκοπό, αντί για έναν λογαριασμό που χρησιμοποιείται από ένα άτομο.
ΣΗΜΕΙΩΣΗ: Κατά τη στιγμή της σύνταξης, το TC 335a υποστηρίζει μόνο HTTP, επομένως προσέξτε να μην στέλνετε μυστικά (κωδικούς πρόσβασης, κ.λπ.) με αυτόν τον τρόπο. Υποτίθεται ότι ό,τι περάσει είναι σε σαφές κείμενο και μπορεί να διαβαστεί από οποιονδήποτε.
Εάν σκοπεύετε να συνδεθείτε εξ αποστάσεως μέσω SOAP, θα πρέπει οπωσδήποτε να λάβετε μέτρα για να εξασφαλίσετε μια ασφαλή σύνδεση. Μια πιθανή προσέγγιση είναι μέσω ενός αντίστροφου διακομιστή μεσολάβησης SSL μέσω του apache ή του nginx. Ωστόσο, αυτό είναι εκτός του πεδίου εφαρμογής αυτού του οδηγού και δεν θα συμπεριληφθεί.
Υπάρχουν πελάτες για γρήγορη δημιουργία σύνδεσης και δοκιμή εντολών κονσόλας:
ταχυδρόμος: https://www.postman.com/ (δίκτυο, επιτραπέζιος πράκτορας/πελάτης)
αϋπνία:https://insomnia.rest/
Αηδόνι αηδόνι: https://nightingale.rest/
Όλα προσφέρουν μια ποικιλία λεπτομερειών, αλλά τελικά λειτουργούν περίπου το ίδιο. Ευχαριστούμε την Jackpoz για την παροχή των συγκεκριμένων βημάτων για τον Postman - https://www.postman.com/.
Το Postman διατίθεται σε δύο εκδόσεις: μια διεπαφή ιστού (καθώς και ένα διακομιστή μεσολάβησης που μπορεί να εγκατασταθεί για την εκτέλεση αιτημάτων localhost) και μια πλήρη εφαρμογή υπολογιστή-πελάτη για υπολογιστές. Οι οδηγίες είναι ίδιες και στις δύο περιπτώσεις.
Στην ενότητα "Ο χώρος εργασίας μου", βρείτε το κουμπί "Εισαγωγή". Θα χρησιμοποιήσετε την επιλογή αρχικού κειμένου.
Αντιγράψτε και επικολλήστε το ακόλουθο JSON στο πλαίσιο κειμένου. Βεβαιωθείτε ότι έχετε ενημερώσει τα διαπιστευτήρια στο στοιχείο item.request.auth.basic στον χρήστη της GM που αναφέρθηκε προηγουμένως.
- {
- "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": []
- }
- ]
- }
Θα πρέπει να σκεφτείτε το TC SOAP ως μια συλλογή για εισαγωγή. Κάντε κλικ στην Εισαγωγή.
Αυτό θα συμπληρώσει τη νέα συλλογή με τη σωστή μέθοδο HTTP (POST) και τις λεπτομέρειες στις καρτέλες Εξουσιοδότηση και Σώμα.
Στην καρτέλα Body, παρατηρήστε τις εντολές ωφέλιμου φορτίου XML και πληροφοριών διακομιστή που είναι προσυμπληρωμένες για εσάς.
Κάνοντας κλικ στο κουμπί "Αποστολή" θα υποβληθεί το αίτημα και θα δοθεί μια απάντηση XML.
Στη δεξιά πλευρά της διεπαφής Postman, a</> Το σύμβολο θα ανοίξει ένα απόσπασμα κώδικα που μπορεί να μετατρέψει το αίτημα στη γλώσσα της επιλογής σας.
¶Χρησιμοποιώντας PHP
Για να αλληλεπιδράσετε με το TrinityCore χρησιμοποιώντας PHP, πρέπει να βεβαιωθείτε ότι έχετε εγκαταστήσει την επέκταση σαπουνιού PHP. Βεβαιωθείτε επίσης ότι χρησιμοποιείτε μια έκδοση της PHP που εξακολουθεί να υποστηρίζεται ενεργά. Παραδείγματα κώδικα δοκιμάστηκαν σε PHP7.4 έως PHP8.1.
Σε όλα αυτά τα παραδείγματα, το urn:TC URI είναι μια απαιτούμενη παράμετρος επειδή δεν παρέχουμε έγγραφο 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;
Σημειώστε ότι διαβιβάζουμε μια βασική κεφαλίδα εξουσιοδότησης HTTP με κωδικοποιημένο όνομα χρήστη και κωδικό πρόσβασης στο base64 (χωρισμένα με άνω και κάτω τελεία). Εναλλακτικά, μπορείτε να παραλείψετε τοstream_context
παράμετρο και, αντί αυτού, συμπεριλάβετε ένα όνομα χρήστη (σύνδεση) και έναν κωδικό πρόσβασης στη διαμόρφωση του 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;
Κάθε προσέγγιση είναι καλή - αλλά μην ξεγελιέστε! Η κωδικοποίηση βάσης 64 δεν την καθιστά εγγενώς πιο ασφαλή.
Να θυμάστε ότι ο πελάτης SOAP μπορεί να αναγνωρίσει μόνο αποτυχίες σύνδεσης ή εσφαλμένες διαμορφώσεις.Δεν θα γνωρίζει εάν έχετε δώσει μια μη έγκυρη εντολή . Επομένως, εξαρτάται από εσάς να αναλύσετε τα αποτελέσματα και να αποφασίσετε εάν το επιδιωκόμενο αποτέλεσμα ήταν επιτυχές ή όχι. Η έξοδος θα είναι ακριβώς σαν να εκτελούσατε την εντολή στην κονσόλα.
Τέλος, εάν προτιμάτε να μην βασίζεστε στην επέκταση SOAP ή στον πελάτη, μπορείτε να σχηματίσετε το ωφέλιμο φορτίο XML και να αναλύσετε μόνοι σας την απόκριση XML που προκύπτει. Θα χρειαστείτε ακόμα τοεπέκταση cURL, αλλά αυτό είναι συνήθως διαθέσιμο εάν δεν είναι ενεργοποιημένο από προεπιλογή.
- <?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;