PHP | SOAP TrinityCore 3.3.5a

im0rg

New member
Команда форума
Премиум
Регистрация
02.05.2022
Сообщения
10
Реакции
9
Баллы
0
Местоположение
Cheb
Сайт
boobywow.ru
p.s. Посмотрел по форуму, вроде подобной инструкции не присутствует.

Начнем с самого начала что же такое SOAP ?
SOAP
— протокол обмена структурированными сообщениями в распределённой вычислительной среде. (википедия)

И что же это нам дает?
Ответ прост: удаленно отправлять какие либо консольные команды на сервер

Что же нужно для этого сделать?
Открываем worldserver.conf и находим строку SOAP.Enabled
Чтоб включить SOAP нужно поставить SOAP.Enabled = 1

Для указания IP адреса через который будет доступен SOAP используем как не сложно догадаться SOAP.IP

Можно указать localhost то есть 127.0.0.1
Либо же 0.0.0.0 для того чтоб открыть доступ по всем доступным IP адресам.
Либо же взять один из внешних IP адресов и указать его, пример 2.112.80.20


Для указания порта для обращения используется SOAP.Port
1651584443801.png



После изменений перезагрузите сервер


Перейдем непосредственно к PHP
Для создания подключения к SOAP будем использовать SoapClient

  1. Выполните в скрипте phpinfo();
  2. Если не можете найти Soap Client enabled как на скриншоте
  3. 1651585225872.png

Для исправления

  1. Откройте файл php.ini в смоем Apache пример Apache/bin/php.ini
  2. Удалите ; перед extension=php_soap.dll (если у вас Windows, или же extension=php_soap.so если у вас linux, может встречаться вариант extension=soap.so)
  3. Перезагрузите сервер apache


Пример кода подключения к SOAP
PHP:
 $client = new \SoapClient(null, [
            'location'      =>  'http://127.0.0.1:7878/', //Адрес подключения IP:PORT
            'uri'           =>  'urn:TC', //Оставьте без изменений для TrinityCore
            'login'         =>  ' ', // Указывайте логин GM аккаунта
            'password'      =>  ' ', //Указывайте пароль GM аккаунта
            'style'         =>  SOAP_RPC,  //Оставьте без изменений
            'keep_alive'    =>  false  //Оставьте без изменений
        ]);

Теперь выполним произвольную команду к примеру help
PHP:
$result = $client->executeCommand(
    new \SoapParam('help', "command")
);
Разберем что тут написано используя экземпляр SoapClient вызываем метод executeCommand что принимает у себя в параметрах экземпляр SoapParam у которого первый аргумент сама команда (данные для передачи на сервер), второй оставляем без изменений "command" (это имя параметра)


PHP:
        $client = new \SoapClient(null, [
            'location'      =>  'http://127.0.0.1:7878/',
            'uri'           =>  'urn:TC',
            'login'         =>  'someLogin',
            'password'      =>  'somePassword',
            'style'         =>  SOAP_RPC,
            'keep_alive'    =>  false
        ]);
        try {
            $result = $client->executeCommand(new \SoapParam('help', "command"));
            print_r($result);
        }catch (\Exception $e){
            print_r($e);
        }

1651585962099.png

Переименование гильдии
$client->executeCommand(new \SoapParam('guild rename "Старое Название" "Новое название"', "command"));

Смена фракции
$client->executeCommand(new \SoapParam('character changefaction ИмяПерсонажа', "command"));

Отправка товара по почте

$client->executeCommand(new \SoapParam('send items ИмяПерсонажа "Заголовок" "Текст Сообщения" itemID:Count', "command"));

Либо же использовать
эту библиотеку
 

WinWoolF

New member
Команда форума
Администратор
Регистрация
13.10.2013
Сообщения
5 354
Реакции
451
Баллы
0
Тема конечно интересна для развития. Но, пользуются подобным уже устоявшиеся сервера в онлайне. И ты правильно написал, что нужно это для управления сервером через консоль. Или для удаленного администрирования или для доната и магазина. И в общем ты красавчик, и с тобой я уверен найдется о чем поговорить, но на этом форуме в большинстве своем обитают просто узеры, которым и сервер то готовый запустить на домашнем ПК сложно.
Но ты все равно молодец! Обнял, приподнял!
 
Верх Низ