Berbagi teknologi

Berinteraksi dengan TrinityCore menggunakan SOAP (TBD)

2024-07-12

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

asli:SOAP dengan TrinityCore | Wiki Proyek MMo TrinityCore

 

Cara berinteraksi dengan TC menggunakan SOAP

SOAP adalah singkatan dari Simple Object Access Protocol dan merupakan bentuk lama dari protokol akses layanan web berbasis standar yang mirip dengan REST. Selama konfigurasi yang diperlukan ada, Anda dapat memanfaatkan SOAP untuk mengirim perintah ke server TrinityCore.
Cara yang baik untuk memahami SOAP adalah dengan membandingkannya dengan REST kontemporer. Artikel berikut menjelaskan hal ini dengan sangat baik – https://smartbear.com/blog/soap-vs-rest-whats-the-difference/.
Perbedaan utama antara keduanya adalah SOAP bergantung sepenuhnya pada XML untuk memberikan respons dan menerima payload. PHP menyediakan beberapa metode untuk membuat proses ini lebih mudah, namun bergantung pada kasus penggunaan Anda, Anda mungkin perlu memahami XML.

Konfigurasi


serverdunia.conf
Pastikan pengaturan pada file konfigurasi sudah diatur dengan benar.

  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

Mengingat konfigurasi akses RBAC spesifik Anda, Anda juga memerlukan akun pengguna dengan izin untuk menggunakan perintah GM. Sebaiknya buat akun dengan akses terbatas khusus untuk tujuan ini, daripada akun yang digunakan oleh satu orang.

CATATAN: Pada saat penulisan, TC 335a hanya mendukung HTTP, jadi berhati-hatilah untuk tidak mengirimkan rahasia (kata sandi, dll.) dengan cara ini. Diasumsikan bahwa apa pun yang disampaikan adalah teks yang jelas dan dapat dibaca oleh siapa saja.
Jika Anda berencana untuk terhubung dari jarak jauh melalui SOAP, Anda harus mengambil langkah-langkah untuk memastikan koneksi yang aman. Salah satu pendekatan potensial adalah melalui proxy SSL terbalik melalui Apache atau nginx. Namun, hal ini berada di luar cakupan panduan ini dan tidak akan disertakan.

Klien HTTP untuk pembuatan prototipe


Ada klien untuk membuat koneksi dengan cepat dan menguji perintah konsol:
tukang pos: https://www.postman.com/ (jaringan, agen desktop/klien)
susah tidur:https://insomnia.rest/
Burung bulbul: https://nightingale.rest/
Semuanya menawarkan beragam detail, tetapi pada akhirnya cara kerjanya kurang lebih sama. Terima kasih kepada Jackpoz yang telah memberikan langkah spesifik untuk Tukang Pos - https://www.postman.com/.
Tukang pos hadir dalam dua bentuk: antarmuka web (serta proxy yang dapat diinstal untuk melakukan permintaan localhost) dan aplikasi desktop klien lengkap. Instruksinya sama dalam kedua kasus.
Di bawah "Ruang Kerja Saya", temukan tombol "Impor". Anda akan menggunakan opsi teks asli.
Salin dan tempel JSON berikut ke dalam kotak teks. Harap pastikan untuk memperbarui kredensial di bawah item.request.auth.basic ke pengguna GM yang disebutkan sebelumnya.

  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. }

Anda harus menganggap TC SOAP sebagai koleksi yang akan diimpor. Klik Impor.
Ini akan mengisi koleksi baru dengan metode HTTP (POST) yang benar dan detailnya di bawah tab Otorisasi dan Isi.
Di bawah tab Isi, perhatikan perintah XML payload dan informasi server yang telah diisi sebelumnya untuk Anda.
Mengklik tombol "Kirim" akan mengirimkan permintaan dan memberikan respons XML.
Di sisi kanan antarmuka Tukang Pos, a</> simbol akan membuka cuplikan kode yang dapat mengubah permintaan ke bahasa pilihan Anda.
¶Menggunakan PHP
Untuk berinteraksi dengan TrinityCore menggunakan PHP, Anda perlu memastikan Anda telah menginstal ekstensi PHP-soap. Pastikan juga Anda menggunakan versi PHP yang masih didukung secara aktif. Contoh kode diuji pada PHP7.4 hingga PHP8.1.
Dalam semua contoh ini, urn:TC URI adalah parameter yang diperlukan karena kami tidak menyediakan dokumen WSDL.
SoapClient-https://www.php.net/manual/id/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;

Perhatikan bahwa kami meneruskan header otorisasi dasar HTTP dengan nama pengguna dan kata sandi yang dikodekan base64 (dipisahkan oleh titik dua). Atau, Anda dapat menghilangkanstream_contextparameter, dan sebagai gantinya menyertakan nama pengguna dan kata sandi (login) dalam konfigurasi SoapClient Anda.

  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;

Kedua pendekatan itu bagus - tetapi jangan terkecoh! Pengodean basis 64 tidak serta-merta membuatnya lebih aman.

Ingatlah bahwa klien SOAP hanya dapat mengenali kegagalan koneksi atau kesalahan konfigurasi.Ia tidak akan tahu jika Anda memberikan perintah yang tidak validJadi, terserah Anda untuk mengurai hasilnya dan memutuskan apakah hasil yang diinginkan berhasil atau tidak. Output akan sama seperti jika Anda menjalankan perintah di konsol.

Terakhir, jika Anda lebih suka tidak bergantung pada ekstensi atau klien SOAP, Anda dapat membentuk payload XML dan mengurai sendiri respons XML yang dihasilkan. Anda tetap memerlukanekstensi cURL, tetapi ini biasanya tersedia jika tidak diaktifkan secara default.

  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;