我正在使用SoapClient连接到第三方服务。大部分时间它工作正常,但每隔一段时间,也许每100-150次呼叫一次,我得到错误
肥皂失败:SOAP-ERROR:解析架构:complexType中的意外
我的代码在try / catch中重试,它将在下一轮中运行。但是我想检查一下WSDL以找出失败的原因,部分是因为我自己的好奇心,以及我需要将它传递给我正在连接的公司。我可以从SoapFault获取该信息吗?或者我是否必须调用URL来获取字符串?我担心如果我事后得到WSDL,它可能已经修复了。
$pass = FALSE;
$this->soap = NULL;
$this->session = NULL;
do {
try {
Doc::i("Starting session");
$this->soap = new SoapClient($this->wsdl_url, ['trace' => 1]);
$pass = TRUE;
} catch (\SoapFault $e) {
Doc::e('Soap Failed: ' . $e->getMessage());
if(str_contains($e->getMessage(),'Parsing Schema') && !empty($e->detail)) {
Doc::e($e->detail); // Something new I'm trying to see if it helps
}
} catch (FatalErrorException $e) {
Doc::e("Soap failed really bad: " . $e->getMessage());
} catch (\Exception $e) {
Doc::e("Soap failed bad: " . $e->getMessage());
}
} while (!$pass);
答案 0 :(得分:0)
您应该可以使用$this->soap->__getLastResponse()
,因为您将'trace' => 1
选项传递给SoapClient
。
您可能还会考虑记录$this->soap->__getLastRequest
以及这两者的标头版本,以确保您在运行时捕获尽可能多的信息。
有关可能的选项,请参阅SoapClient
方法列表。请记住这里的诀窍是trace
选项:没有它,这些都不会返回任何有用的东西!