2012-01-30 2 views
0

나는 PHP에서 페이팔 통합을위한 SOAP 응답을 구문 분석하려고, 나는 다음과 같은 게시물을 통해 읽고 :PHP를 사용하여 PayPal API에서 SOAP 응답을 구문 분석하는 방법은 무엇입니까?

parse an XML with SimpleXML which has multiple namespaces

큰 통찰력을 제공하지만, 난 아직 방법을 알아낼 수 없습니까 올바르게해라. 이 SOAP 것은 복잡합니다. 여기

내가 구문 분석하는 데 필요한 SOAP 응답입니다 :

$xml = simplexml_load_string($res, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/"); 
$xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/'); 
$xml->registerXPathNamespace('xsi', 'http://www.w3.org/1999/XMLSchema-instance'); 
$xml->registerXPathNamespace('wsse', 'http://schemas.xmlsoap.org/ws/2002/12/secext'); 

foreach($xml->xpath('//getexpresscheckoutdetailsresponse') as $header) 
{ 
    var_export($header->xpath('//timestamp')); // Should output 'something'. 
} 

$의 고해상도 :

<?xml version="1.0" encoding="UTF-8"?> 
<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ed="urn:ebay:apis:EnhancedDataTypes" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:ns="urn:ebay:api:PayPalAPI"> 
<soap-env:header> 
    <security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext" xsi:type="wsse:SecurityType"> 
</security> 
<requestercredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType"> 
    <credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType"> 
     <username xsi:type="xs:string"/> 
     <password xsi:type="xs:string"/> 
     <signature xsi:type="xs:string"/> 
     <subject xsi:type="xs:string"/> 
    </credentials> 
</requestercredentials> 
</soap-env:header> 
<soap-env:body id="_0"> 
    <getexpresscheckoutdetailsresponse xmlns="urn:ebay:api:PayPalAPI"> 
     <timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2012-01-30T16:27:02Z</timestamp> 
     <ack xmlns="urn:ebay:apis:eBLBaseComponents">Success</ack> 
     <correlationid xmlns="urn:ebay:apis:eBLBaseComponents">24f704da11e31</correlationid> 
     <version xmlns="urn:ebay:apis:eBLBaseComponents">85.0</version> 
     <build xmlns="urn:ebay:apis:eBLBaseComponents">2515991</build> 
     <getexpresscheckoutdetailsresponsedetails xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:GetExpressCheckoutDetailsResponseDetailsType"> 
      <token xsi:type="ebl:ExpressCheckoutTokenType">EC-4AP53152LD9</token> 
      <payerinfo xsi:type="ebl:PayerInfoType"> 
       <payer xsi:type="ebl:EmailAddressType">[email protected]</payer> 
       <payerid xsi:type="ebl:UserIDType">QWE5QWE4EW</payerid> 
       <payerstatus xsi:type="ebl:PayPalUserStatusCodeType">verified</payerstatus> 
       <payername xsi:type="ebl:PersonNameType"> 
        <salutation xmlns="urn:ebay:apis:eBLBaseComponents"/> 
        <firstname xmlns="urn:ebay:apis:eBLBaseComponents">FirstName</firstname> 
        <middlename xmlns="urn:ebay:apis:eBLBaseComponents"/> 
        <lastname xmlns="urn:ebay:apis:eBLBaseComponents">LastName</lastname> 
        <suffix xmlns="urn:ebay:apis:eBLBaseComponents"/> 
       </payername> 
       <payercountry xsi:type="ebl:CountryCodeType">US</payercountry> 
       <payerbusiness xsi:type="xs:string"/> 
       <address xsi:type="ebl:AddressType"> 
        <name xsi:type="xs:string"/> 
        <street1 xsi:type="xs:string"/> 
        <street2 xsi:type="xs:string"/> 
        <cityname xsi:type="xs:string"/> 
        <stateorprovince xsi:type="xs:string"/> 
        <countryname/> 
        <postalcode xsi:type="xs:string"/> 
        <addressowner xsi:type="ebl:AddressOwnerCodeType">PayPal</addressowner> 
        <addressstatus xsi:type="ebl:AddressStatusCodeType">None</addressstatus> 
       </address> 
      </payerinfo> 
      <custom xsi:type="xs:string">cutom_value</custom> 
      <invoiceid xsi:type="xs:string">PPMP-1393305760</invoiceid> 
      <billingagreementacceptedstatus>true</billingagreementacceptedstatus> 
      <paymentdetails xsi:type="ebl:PaymentDetailsType"> 
       <ordertotal xsi:type="cc:BasicAmountType" currencyid="USD">0.02</ordertotal> 
       <shippingtotal xsi:type="cc:BasicAmountType" currencyid="USD">0.00</shippingtotal> 
       <handlingtotal xsi:type="cc:BasicAmountType" currencyid="USD">0.00</handlingtotal> 
       <taxtotal xsi:type="cc:BasicAmountType" currencyid="USD">0.00</taxtotal> 
       <orderdescription xsi:type="xs:string">Special Item</orderdescription> 
       <custom xsi:type="xs:string">cutom_value</custom> 
       <invoiceid xsi:type="xs:string">PPMP-1393305760</invoiceid> 
       <shiptoaddress xsi:type="ebl:AddressType"> 
        <name xsi:type="xs:string"/> 
        <street1 xsi:type="xs:string"/> 
        <street2 xsi:type="xs:string"/> 
        <cityname xsi:type="xs:string"/> 
        <stateorprovince xsi:type="xs:string"/> 
        <countryname/> 
        <phone xsi:type="xs:string"/> 
        <postalcode xsi:type="xs:string"/> 
        <addressid xsi:type="xs:string"/> 
        <addressowner xsi:type="ebl:AddressOwnerCodeType">PayPal</addressowner> 
        <externaladdressid xsi:type="xs:string"/> 
        <addressstatus xsi:type="ebl:AddressStatusCodeType">None</addressstatus> 
       </shiptoaddress> 
       <insurancetotal xsi:type="cc:BasicAmountType" currencyid="USD">0.00</insurancetotal> 
       <shippingdiscount xsi:type="cc:BasicAmountType" currencyid="USD">0.00</shippingdiscount> 
       <insuranceoptionoffered xsi:type="xs:string">false</insuranceoptionoffered> 
       <sellerdetails xsi:type="ebl:SellerDetailsType"/> 
       <paymentrequestid xsi:type="xs:string"/> 
       <orderurl xsi:type="xs:string"/> 
       <softdescriptor xsi:type="xs:string"/> 
      </paymentdetails> 
      <checkoutstatus xsi:type="xs:string">PaymentActionNotInitiated</checkoutstatus> 
      <paymentrequestinfo xsi:type="ebl:PaymentRequestInfoType"/> 
     </getexpresscheckoutdetailsresponsedetails> 
    </getexpresscheckoutdetailsresponse> 
</soap-env:body> 
</soap-env:envelope> 

을 그리고 여기 내가 지금까지 작업 된 PHP 코드입니다,하지만 결과 완전한 SOAP 응답을 포함합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떤 도움이라도 정말 고맙습니다!

미리 감사드립니다.

최고,

Fab.

+1

아마도 분명한 질문입니다. http://php.net/manual/en/book.soap.php와 같은 것이 해결되지 않는다면 무엇이 필요합니까? –

답변

1

기대하는 각 응답마다 사용자 정의 XML 서식 대신 Zend_Soap_Client과 같은 라이브러리를 사용하는 것이 좋습니다. SOAP-XML을 처리합니다.

+0

제안 해 주셔서 감사합니다. 그러나 Zend_Soap_Client가 제대로 작동하지 않는 것 같아요. 나를위한 더 쉬운 해결책은 무엇입니까? 다시 감사합니다. – user1178527

관련 문제