2011-09-08 3 views
1

PHP와 SOAP을 사용하여 UPS Freight Rating Web Service를 만들려고합니다. UPS는 SOAP 클라이언트 용 WSDL을 제공합니다 (중요한 부분은 아래에 붙여 넣었습니다).PHP에서 SOAP을 사용하여 XML 요청 보내기

제 질문은 SOAP 클라이언트를 사용하여 보낼 XML 문서를 어떻게 구성합니까? 내 요청을 PHP 배열 또는 거대한 문자열로 형식화할지 여부에 대한 상충되는 보고서를 보았습니다. 이 문서가 작성되면 PHP에서 작성한 SOAP 클라이언트를 통해 요청을 어떻게 처리해야합니까? WSDL에의

부분 : 내 XML 문서의

<wsdl:binding name="FreightRateBinding" type="tns:FreightRatePortType"> 
     <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> 
     <wsdl:operation name="ProcessFreightRate"> 
      <soap:operation soapAction="http://onlinetools.ups.com/webservices/FreightRateBinding/v1.0" style="document"/> 
      <wsdl:input name="RateRequest"> 
       <soap:body parts="Body" use="literal"/> 
       <soap:header message="tns:RateRequestMessage" part="UPSSecurity" use="literal"> 
        <soap:headerfault message="tns:RateErrorMessage" part="RateError" use="literal"/> 
       </soap:header> 
      </wsdl:input> 
      <wsdl:output name="RateResponse"> 
       <soap:body parts="Body" use="literal"/> 
      </wsdl:output> 
      <wsdl:fault name="RateError"> 
       <soap:fault name="RateError" use="literal"/> 
      </wsdl:fault> 
     </wsdl:operation> 
    </wsdl:binding> 

부분, 지금까지 :

<?xml version="1.0" ?> 
<FreightRateRequest> 
    <Request> 
     <RequestOption>1</RequestOption> 
    </Request> 
    <ShipFrom> 
     <Address> 
      <Name>Test</Name> 
      <AddressLine1>17 MacDade Blvd</AddressLine1> 
      <City>Collingdale</City> 
      <PostalCode>19023</PostalCode> 
      <CountryCode>US</CountryCode> 
      <Phone> 
       <Number>1-800-249-0011</Number> 
      </Phone> 
     </Address> 
    </ShipFrom> 
    <ShipperNumber>21W17V</ShipperNumber> 
    <ShipTo> 
     <Name>Test</Name> 
     <AddressLine1>14908 Sandy Lane</AddressLine1> 
     <City>San Jose</City> 
     <PostalCode>95124</PostalCode> 
     <CountryCode>US</CountryCode> 
    </ShipTo> 

PHP, 지금까지 :

$mySOAP = new SoapClient("FreightRate.wsdl", $myOptionsArray); 

이 어떤 도움을 크게 감상 할 수있다 . 또한 필요한 경우 추가 정보로 회신 할 것입니다.

+0

wsdl에서 실행할 수 있으며 여기에서 ProcessFreightRate에 관한 부분을 게시 할 수 있습니까? $ client = 새로운 SoapClient ('http : // yourwsdl'); var_dump ($ client -> __ getTypes()); – Charlie

+0

이것은 XML 스키마를 반환할까요? 마크 업이 var_dump()가 내뱉는 것보다 훨씬 깔끔한 톤이므로, 원하는 경우 부분을 게시 할 수 있습니다. –

답변

2

XML은 DOM 작업을 사용하여 생성하기에 심각한 고통입니다.

$xml = <<<EOL 
<?xml blah blah blah 
<root> 
    <tag>$some_value</tag> 
    <othertag>$different_value</othertag> 
</root> 
EOL; 

을만큼 당신이 변수의 내용이 유효한 XML 있도록 않도록 예방 조치를 취해야로 : 당신은 자신에게 단지 거대한 문자열로 치료와 직접 관련 값을 삽입하여 당겨 머리의 톤을 절약 할 수 , 이것은 훨씬 쉬운 방법입니다. 즉, 5 XML 인수 (<>"'&)가 아닌 모든 HTML 문자 엔티티를 원시 문자 형식으로 변환하고이 5자를 엔티티 환산 문자로 이스케이프해야합니다.

+0

좋습니다. 고맙습니다. 또한 SOAP을 사용하여 XML 문서를 보았던 예에서 XML 요소의 이름 앞에 "soap :"이 붙었으며 문서에 대한 정보를 요약 한 머리글 섹션이있었습니다. 이러한 추가 작업이 필요합니까? 이것은 SOAP을 사용한 나의 첫 경험이고 나는 매우 길다! –

+0

모르겠어. 나는 비누를 결코 사용하지 않았다. –