在PHP中将原始xml传递给SOAP

时间:2017-02-15 02:01:38

标签: php xml soap

如果我有一个需要在PHP中传递的原始XML消息,是否有一种简单的方法可以传递它?

这样的事情:

$xml = '
<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

  <soap:Header>
    ...
  </soap:Header>

  <soap:Body>
  ...
    <soap:Fault>
    ...
    </soap:Fault>
  </soap:Body>

</soap:Envelope>';

$url = 'http://www.myurl.com';

passXmlToSoap($xml,$url);

我不是要使用SOAP来掌握,我只需要使用它来做一个非常简单的事情,所以我希望我可以使用原始XML并尽可能简单地做,即使这可能不是“正确的” “做到这一点的方式。

2 个答案:

答案 0 :(得分:1)

检查这个答案: How to parse SOAP XML? 应该有用于解析XML的库,但是这个答案为您提供了一种直接的方法。祝好运 它有效:

$xml = '<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<Name>Yo</Name>
 </soap:Header>
  <soap:Body>
      <payment>
        <uniqueReference>ESDEUR11039872</uniqueReference>      
        <epacsReference>74348dc0-cbf0-df11-b725-001ec9e61285</epacsReference>
        <postingDate>2010-11-15T15:19:45</postingDate>
        <bankCurrency>EUR</bankCurrency>
        <bankAmount>1.00</bankAmount>
        <appliedCurrency>EUR</appliedCurrency>
        <appliedAmount>1.00</appliedAmount>
        <countryCode>ES</countryCode>
        <bankInformation>Sean Wood</bankInformation>
       <merchantReference>ESDEUR11039872</merchantReference>
   </payment>
  </soap:Body>
</soap:Envelope>';


$xml = simplexml_load_string($xml);
print_r( $xml) ;

$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
foreach ($xml->xpath('//payment') as $item)
{
    print_r($item);
}

答案 1 :(得分:-1)

在任何情况下,您都不应该解析XML响应,也不必传递XML请求来使用SOAP Web服务。

首先,如果您使用本机php SoapClient类,则发送一个对象或数组。然后你收到stdClass对象

其次,你应该使用WSDL到php生成器,它生成必须发送的参数的类。它还生成了与响应对象匹配的类。最后,它生成了发送请求的类。因此,您可以毫无疑问地发送请求并轻松接收响应,而无需处理XML。

尝试PackageGenerator项目。