SOAP设置适当的xmlns标头

时间:2013-06-14 17:56:50

标签: php xml soap

设置SOAP标头时有两个问题。首先,我以前从未做过两次,我似乎无法在这里找到一个好的解决方案。如果有确切的重复,我道歉,如果有的话,请指出正确的方向。

我需要在soap:Envelope上设置以下xmlns:xsi和xmlns:xsd数据集。我还需要在XML中的第一个标记上设置一个xmlns属性(粗略示例)。

需要添加第一部分,当我执行__getLastRequest()时,第二部分已经存在。第三部分需要添加(只是SendPurchases xmlns属性)。

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">


<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/
xmlns:ns1="urn:[taken out for security purposes]">


<soap:Body>
    <SendPurchases xmlns="urn:...">
    </SendPurchases>
</soap:Body>

我需要使用header()吗? 我正在使用PHP的SOAP客户端。任何帮助都非常感谢!

编辑:

我选择了另一条路线,谢谢你的所有答案!

2 个答案:

答案 0 :(得分:5)

我的信封有一个类似的问题,我为此做了一个修复。我将使用您提供的数据发布修复,您必须检查是否所有内容都是oke:

编辑请求的自定义类:

class CustomSoapClient extends SoapClient {

                            function __doRequest($request, $location, $action, $version) {

                                $request = str_replace('<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">', '', $request);
                                // parent call
                                return parent::__doRequest($request, $location, $action, $version);
                            }

                        }

设置soap客户端:

$client = new CustomSoapClient($wsdl, array(
                                'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
                                'exceptions' => true,
                                'trace' => 1,
                                'soap_version' => SOAP_1_2,
                                ));

请求:

//notice that the envelope is in the request! also you need to change the urn
$request = '
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/xmlns:ns1="urn:[taken out for security purposes]">


<soap:Body>
   <SendPurchases xmlns="urn:...">
   </SendPurchases>
</soap:Body>
</SOAP-ENV:Envelope>';

$xmlvar = new SoapVar($request, XSD_ANYXML);

$result = $client->Controleer($xmlvar);

print_r($result); // finally check the result

我希望这会对你有所帮助:)。

答案 1 :(得分:1)

可以在此处找到使用PHP的SoapClient进行正确实现的详细示例:http://www.php.net/manual/en/soapclient.soapclient.php#97273