我需要离线解析SOAP请求。 我所需要做的就是获取请求的method_name和参数,以将其传递给控制器,而无需生成对请求的任何响应。
我有2种方法: 1)为SOAP请求创建XML阅读器,并手动解析它,或者 2)使用soapServer并使用缓冲区处理程序捕获其输出
我不喜欢以上任何一个。因为第一个解析器不会像PHP本机soapServer那样是一个很好的解析器。虽然第二种方法使用原始的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
函数的情况下获取这些数据吗?