1

我有一个复杂的 xml,需要通过 SoapClient 发送。

我试图通过发送带有请求的参数数组来以“正确”的方式做到这一点。

这是我当前数组的示例:

$params = array("TestRequest" => array("NodeOne" => "Value1", "NodeTwo" => "Value2"));

它使一个像这样的xml:

<TestRequest>
   <NodeOne>Value1</NodeOne>
   <NodeTwo>Value2</NodeTwo>
</TestRequest>

但是,我需要将 NS 添加到“TestRequest”部分。它需要看起来像这样:

<ord:TestRequest>
   <NodeOne>Value1</NodeOne>
   <NodeTwo>Value2</NodeTwo>
</ord:TestRequest>

我已经尝试了我能想到的一切,搜索谷歌和堆栈无济于事。是的,我尝试在数组中输入“ord:TestRequest”。

如果有人是 PHP 中的 SoapClient 大师并且可以提供帮助,我将永远感激不尽。

4

1 回答 1

0

好吧,在头疼之后......完成此任务的最简单方法不是我喜欢的方式。

我最终像这样手动编写了一个 XML:

$xml = '<ord:TestRequest>
   <NodeOne>Value1</NodeOne>
   <NodeTwo>Value2</NodeTwo>
</ord:TestRequest>';

PHP:

 $dom =new DOMDocument('1.0');
try {
    $dom->loadXML($xml);
    $request = $dom->saveXML();
    $this->xml = $request;
    return true;
} catch (DOMException $e) {
    $this->xml = $xml;
    $this->errors++;
    $this->error_msg = 'Error generating XML :' . $e;
        }

我的 XML 的结构就像它应该创建一个 SoapRequest 一样,然后我使用了 SoapClient __doRequest() 方法。

重要的是,当你走这条路时,你不能像你已经做的那样使用你的 wsdl 自动生成 xml,所以请确保在你的肥皂连接中并请求你的 wsdl 为空。

于 2013-08-20T18:35:12.567 回答