我目前正在处理一个古老的支付处理器,它尽可能地连接到他们的服务(包括自定义客户端SSL证书,密码,以及之后的基本HTTP身份验证)。长话短说,我不能使用SoapClient来发出请求,但我已经能够用cURL来做。
我现在在字符串中有响应,我可以使用SoapClient
来解析它吗?我宁愿不必手动解析它作为常规XML,因为我必须复制许多功能,例如在找到<SOAP:Fault>
时抛出合理的异常。
答案 0 :(得分:1)
不,你不能。
(只是为后人回答这个问题。基于缺乏相反的证据,你显然不能使用SoapClient来解析你已经拥有的SOAP响应)
答案 1 :(得分:0)
您可以使用SoapClient
的context
选项定义上下文,告诉SoapClient使用SSL证书等。可以使用stream_context_create
使用lots of options创建上下文
答案 2 :(得分:0)
让我们再次想象你已经调用了SoapClient :: __ doRequest(),并将XML SOAP响应返回到一个名为 $ response 的变量中。
<?php
//LOAD RESPONSE INTO SIMPLEXML
$xml = simplexml_load_string($response);
//REGISTER NAMESPACES
$xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('somenamespace', 'http://www.somenamespace/schema/');
//...REGISTER OTHER NAMESPACES HERE...
//LOOP THROUGH AND GRAB DATA FROM A NAMESPACE
foreach($xml->xpath('//somenamespace:MessageHeader') as $header)
{
echo($header->xpath('//somenamespace:MyData'));
}
//...ETC...
?>
这只是一些示例/伪代码(未经过测试,不会按原样运行)。我的观点是你手动获取了SOAP响应,所以现在你所要做的就是解析它。 SimpleXML是您可以使用的一个解决方案。