Как отправлять команды с помощью SOAP на консоль мирового сервера AzerothCore?

Как я могу выполнить команду после включения SOAP в консоль мирового сервера AzerothCore?

2 ответа

Решение

Прежде всего, вы должны надеть worldserver.conf эти параметры для включения SOAP:

SOAP.Enabled = 1
SOAP.IP = "127.0.0.1"
SOAP.Port = 7878

После этого запустите свой worldserver.

Вы можете использовать простой скрипт PHP для запуска команды на консоли AzerothCore, как показано ниже:

Если у вас нет php-soap, в Linux Ubuntu вы можете установить его, используя sudo apt install php-soap (или php7.2-soap).

<?php

$soap_connection_info = array(
  'soap_uri' => 'urn:AC',
  'soap_host' => '127.0.0.1',
  'soap_port' => '7878',
  'account_name' => 'USERNAME',
  'account_password' => 'PASSWORD'
);

function RemoteCommandWithSOAP($username, $password, $COMMAND)
{
    global $soap_connection_info;
    $result = '';

    try {
        $conn = new SoapClient(NULL, array(
            'location' => 'http://' . $soap_connection_info['soap_host'] . ':' . $soap_connection_info['soap_port'] . '/',
            'uri' => $soap_connection_info['soap_uri'],
            'style' => SOAP_RPC,
            'login' => $username,
            'password' => $password
        ));
        $result = $conn->executeCommand(new SoapParam($COMMAND, 'command'));
        unset($conn);
    } catch (Exception $e) {

        $result = "Have error on soap!\n";

        if (strpos($e, 'There is no such command') !== false) {
            $result = 'There is no such command!';
        }
    }
    return $result;
}

echo RemoteCommandWithSOAP($soap_connection_info['account_name'], $soap_connection_info['account_password'], ".server info");

?>

В последней строке вам нужно изменить "account_name", "account_password"используя аккаунт с gm level 3.

echo RemoteCommandWithSOAP($soap_connection_info['account_name'], $soap_connection_info['account_password'], ".server info");

Вы можете заменить .server info с любой командой.

Примечание: это работает с другими эмуляторами, просто заменяяurn:ACс:
-urn:MaNGOSдля CMaNGOS (и связанных вилок)
-urn:TCдля TrinityCore
-urn:SFдля SkyfireProject
-urn:Oregonдля OregonCore и
т. д.

Вот сценарий perl, который делает то же самое, он требует libsoap-lite-perl, устанавливается с apt-get install libsoap-lite-perl

Поместите приведенный ниже код в файл с именем soap.pl:

#!/usr/bin/perl

use strict;
use warnings;
use SOAP::Lite; # visit http://search.cpan.org/dist/SOAP-Lite/ or apt-get install libsoap-lite-perl

my ($user, $pass) = ('gm_account', '1234');
my $host          = 'http://127.0.0.1:7878/';
my $cmd           = '.server info';

BEGIN {
    sub SOAP::Transport::HTTP::Client::get_basic_credentials {
        return $user => $pass,
    }
}

my $soap = SOAP::Lite
    ->proxy($host)
    ->uri('urn:AC');

my $rc = $soap->call('executeCommand',
            SOAP::Data->name('command')->value($cmd));

die $rc->faultstring if ($rc->fault);

print
    $rc->result;

Затем запустите свой мировой сервер и запустите его perl soap.pl.

Он должен вернуть результат команды ".server info"

Другие вопросы по тегам