2012-06-01 3 views
10

(1.1を使用して):だからSoapVar名前空間を定義する方法は?私は私のSOAPリクエストでこのノードを持っている必要があり

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

I持って、次の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); 

生成:

<?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> 

すべてのIをns1を使用してそれを防止し、ノード内に実際にxmlnsを定義する必要があります。

私はFirefox Posterでこれをテストし、問題が修正されたことを知っています。

答えて

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


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

このようにして、タイプXSD_ANYXMLのXMLを直接使用できます。

希望すると、これで問題が解決します。

+0

それほど美しいものではありませんが、機能しました!ありがとうございました – rickyduck

3

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

パラメータ "node_namespace" あなたは私が推測するために探していたものです。

+5

は、あなたが例を記述してもらえますか?私は年齢のために私の例に働いてそのパラメータを取得しようとしてきましたが、できません! – rickyduck

0

私は同じ問題を抱えていたし、あなたのWSDLから資格複合型にダミーのクラスをマッピングする場合、PHPのような何かを出力することが分かった:

<?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> 
      <ns1:EMail>[email protected]</ns1:EMail> 
      <ns1:Password>password</ns1:Password> 
     </ns1:CredentialsHeader> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <ns1:EchoAuthenticated/> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

これは、要求されたまさにではなく、もののより冗長で、同等です。

コードは次のようになります:

$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, 
     "classmap"  => array(
      'credential_complex_type' => 'CredentialObject', 
     ), 
    ) 
); 

class CredentialObject {} 

$credentialObject = new CredentialObject(); 
$credentialObject->Email = '[email protected]'; 
$credentialObject->Password = 'password'; 
関連する問題