2010-05-03 4 views
1

나는 비누 요청을하고 어려움을 겪고 있습니다. ?SOAP 요청 PHP5

<?php 
$option=array('trace'=>1); 
$soapClient = new SoapClient('http://www.domain.com/ws/AccountManagement.wsdl', $option); 

$headers = array('LOGIN_ID' => '[email protected]', 'LOGIN_PASSWORD' => 'mypassword'); 

$header = new SoapHeader('https://www.domain.com', 'AuthenticationDTO', $headers, false); 

$soapClient->__setSoapHeaders($header); //or array($header) 

$params = array(
'bureauName' => '', 
'businessInformation' => array('address' => array('city' => 'SomeCity'), array('country' => 'US'), array('state' => 'MN'), array('street' => 'Some Address'), array('zipCode' => '33212')), array('businessName' => 'SomeBusinessName'), 
'entityType' => '', 
'listOfSimilars' => 'true', 
); 


try { 
    $result = $soapClient->__call("matchCompany", $params); 
    print_r($result); 
} catch (SoapFault $fault) { 
    echo $fault->faultcode . "-" . $fault->faultstring; 
    echo "REQUEST:\n" . htmlentities($soapClient->__getLastRequest()) . "\n"; 
} 

>

그것은 $ soapClient__call에 실패

여기 내 PHP입니다.

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://com.dnbi.eai.service.AccountSEI" xmlns:ns2="http://dto.eai.dnbi.com"> 
    <SOAP-ENV:Header> 
    <ns2:AuthenticationDTO> 
     <ns2:LOGIN_ID>[email protected]</ns2:LOGIN_ID> 
     <ns2:LOGIN_PASSWORD>mypassword</ns2:LOGIN_PASSWORD> 
    </ns2:AuthenticationDTO> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
    <ns1:matchCompany/> 
    <param1><item> 
     <key>address</key> 
     <value><item> 
     <key>city</key> 
     <value>SomeCity</value> 
     </item></value> 
     </item><item> 
     <key>0</key> 
     <value><item> 
     <key>country</key> 
     <value>US</value> 
     </item></value> 
     </item><item> 
     <key>1</key> 
     <value><item> 
     <key>state</key> 
     <value>MN</value> 
     </item></value> 
     </item><item> 
     <key>2</key> 
     <value><item> 
     <key>street</key> 
     <value>Some Address</value> 
     </item></value> 
     </item><item> 
     <key>3</key> 
     <value><item> 
     <key>zipCode</key> 
     <value>33212</value> 
     </item></value> 
     </item></param1> 
    <param2><item> 
     <key>businessName</key> 
     <value>SomeBusinessName</value> 
     </item></param2> 
    <param3></param3> 
    <param4>true</param4> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

이 올바른 XML 출력되지 않습니다 :

getLastRequest()이 XML을 생성합니다. 나는 틀린 일을해야만합니다.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dto="http://dto.eai.dnbi.com" xmlns:com="http://com.dnbi.eai.service.AccountSEI"> 
    <soapenv:Header> 
     <dto:AuthenticationDTO> 
     <dto:LOGIN_ID>[email protected]</dto:LOGIN_ID> 
     <dto:LOGIN_PASSWORD>mypassword</dto:LOGIN_PASSWORD> 
     </dto:AuthenticationDTO> 
    </soapenv:Header> 
    <soapenv:Body> 
     <com:matchCompany> 
     <com:in0> 
      <!--Optional:--> 
      <dto:bureauName></dto:bureauName> 
      <!--Optional:--> 
      <dto:businessInformation> 
       <dto:address> 
     <!--Optional:--> 
        <dto:city>SomeCity</dto:city> 
        <dto:country>US</dto:country> 
        <dto:state>MN</dto:state> 
        <dto:street>Some Address</dto:street> 
        <!--Optional:--> 
        <dto:zipCode></dto:zipCode> 
       </dto:address> 
       <!--Optional:--> 
       <dto:businessName>SomeBusinessName</dto:businessName> 
      </dto:businessInformation> 
      <!--Optional:--> 
      <dto:entityNumber></dto:entityNumber> 
      <!--Optional:--> 
      <dto:entityType></dto:entityType> 
      <!--Optional:--> 
      <dto:listOfSimilars>true</dto:listOfSimilars> 
     </com:in0> 
     </com:matchCompany> 
    </soapenv:Body> 
</soapenv:Envelope> 

아무도 나를 soapUI 나를 위해 생산 같은 XML을 생성 할 수 있지만 PHP5의 기본 비누 클라이언트를 사용하여 : soapUI 사용하여 나는이 올바른 XML 것으로 나타났습니다?

감사합니다.

답변

4

대신이 코드를 사용해보세요. 익명 개체를 사용하여 필수 계층을 만드는 방법에 유의하십시오.

$options = array(
    'trace' => 1 
); 

$soapClient = new SoapClient('http://www.domain.com/ws/AccountManagement.wsdl', $option); 

$headers = array(
    'LOGIN_ID' => '[email protected]', 
    'LOGIN_PASSWORD' => 'mypassword' 
); 

$header = new SoapHeader('dto', 'AuthenticationDTO', $headers, false); 

$soapClient->__setSoapHeaders($header); 

$matchCompany->in0->bureauName = ''; 
$matchCompany->in0->businessInformation->address->city = 'SomeCity'; 
$matchCompany->in0->businessInformation->address->country = 'US'; 
$matchCompany->in0->businessInformation->address->state = 'MN'; 
$matchCompany->in0->businessInformation->address->street = 'Some Address'; 
$matchCompany->in0->businessInformation->address->zipCode = '33212'; 
$matchCompany->in0->businessInformation->businessName = 'SomeBusinessName'; 
$matchCompany->in0->entityType = ''; 
$matchCompany->in0->listOfSimilars = true; 

try 
{ 
    $result = $soapClient->matchCompany($matchCompany);  
    print_r($result); 
} 
catch(SoapFault $fault) 
{ 
    echo $fault->faultcode . "-" . $fault->faultstring; 
    echo "REQUEST:\n" . htmlentities($soapClient->__getLastRequest()) . "\n"; 
} 
+0

존, 시간을내어 도와 주셔서 감사합니다. 당신은 더 잘 작동하고있는 것 같지만, 저는 여전히 몇 가지 문제를 연결하고 있습니다. "HTTP - 호스트에 연결할 수 없습니다". –

+0

LOGIN_ID와 LOGIN_PASSWORD를 "항목"과 "키"로 나누는 것 같습니다. login_ID에 [email protected] LOGIN_PASSWORD pepper01

+0

확인 내가 그들을 위해 객체를 사용하여 해결되는, login_ID에와 PASSWORD 문제를 얻었다. 하지만 여전히 "호스트에 연결할 수 없습니다"오류가 표시됩니다. 이상한 점은 생성 된 XML을 복사하여 soapUI에 붙여 넣을 수 있다는 것입니다. 결과가 나타납니다. –