Мне нужно проанализировать SOAP-запрос в автономном режиме.
Все, что мне нужно, это получить method_name запроса и аргументы, чтобы передать их контроллеру, не генерируя никакого мыльного ответа на запрос.
У меня есть 2 способа:
1) создайте XML-ридер для SOAP-запроса и проанализируйте его вручную, или
2) использовать soapServer и перехватить его вывод с помощью обработчика буфера
Мне не нравится ничего из вышеперечисленного. Потому что первый не будет хорошим парсером, как PHP-мыльный сервер. В то время как второй использует вместо оригинального класса soapServer, но также использует обработчик OB, который является уродливым способом взломать библиотеку вместо чистого парсера.
Вот фактический код для второго способа:
class SoapServerOffline {
public function handle($soapRequest) {
$wsdl = "provider.wsdl";
$options =[
'features' => 1,
'trace' => 1,
'cache_wsdl' => WSDL_CACHE_NONE,
'exceptions' => true,
];
$soapServer = new SoapServer($wsdl,$options);
$soapHandler = new SoapServerHandler($this);
$soapServer->setObject($soapHandler);
ob_start();
$soapServer->handle($dataraw);
ob_end_clean();
$soapServer->postExecute($);
}
public function execute($method_name, $args) {
//run logic here
}
public function postExecute() {
//run post execute logic here
}
}
class SoapServerHandler {
private $soapServerOffline;
public function __construct(soapServerOffline $soapServerOffline) {
$this->soapServerOffline = $soapServerOffline;
}
public function WSCorIDSOAPHeader() {
//do nothing
}
public function __call ($method_name , $arguments) {
$this->soapServerOffline->execute(
$method_name,
json_decode(json_encode($arguments[0]),true)
];
}
}
Вместо этого метода я хотел бы просто получить method_name
и arguments
, чтобы передать их контроллеру. Никто не знает, как родной PHP SoapServer извлекает эти данные и как получить эти данные, не запуская всю функцию handle
?