Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to define a SoapVar namespace?

I need to have this node in my SOAP Request (using 1.1):

<CredentialsHeader xmlns="http://www.url.com/Services/P24ListingService11"
    <EMail>[email protected]</EMail>
    <Password>password</Password>
</CredentialsHeader>

So I have the following PHP:

$client = new SoapClient("https://exdev.www.example.com/Services/example.asmx?WSDL", 
    array(
        "trace"      => 1,
        "exceptions" => 0,
        "cache_wsdl" => 0,
        'soap_version' => SOAP_1_1
        )
);

$CredentialObject = new SoapVar(array('EMail' => '[email protected]', 'Password' => 'password'), SOAP_ENC_OBJECT);

Which generates:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.example.com/Services/Example">
    <SOAP-ENV:Header>
        <ns1:CredentialsHeader>
            <EMail>[email protected]</EMail>
            <Password>password</Password>
        </ns1:CredentialsHeader>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns1:EchoAuthenticated/>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

All I need to do is prevent it using ns1 and actually define the xmlns in the node like so:

<CredentialsHeader xmlns="http://www.example.com/Services/Example">
        <EMail>[email protected]</EMail>
        <Password>password</Password>
    </CredentialsHeader>

I have tested that in Firefox Poster and know for a fact that change fixes the problem.

like image 606
rickyduck Avatar asked Jun 01 '12 10:06

rickyduck


2 Answers

$CredentialObjectXML  = '<CredentialsHeader xmlns="http://www.example.com/Services/Example">
        <EMail>'.$UserName.'</EMail>
        <Password>'.$Password.'</Password>
    </CredentialsHeader>';


$CredentialObject  = new SoapVar($CredentialObjectXML,XSD_ANYXML);

This way you can directly use the XML with Type XSD_ANYXML.

Hope this will resolve your problem.

like image 111
Umesh Chavan Avatar answered Oct 19 '22 01:10

Umesh Chavan


http://www.php.net/manual/tr/soapvar.soapvar.php

Parameter "node_namespace" is what you've been looking for i guess.

like image 35
gokturk Avatar answered Oct 19 '22 00:10

gokturk