0

I am trying to parse a SOAP response for a PayPal integration in PHP, and I have read through the following posting:

parse an XML with SimpleXML which has multiple namespaces

which gives great insights, but I am still unable to figure out how to do it correctly. This SOAP thing is damn complicated!

Here is the SOAP response I need to parse:

<?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-4AP53152LD0032109</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> 

And here is the PHP code I have been working on so far, but with no results:

$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'. } 

Where $res includes the complete SOAP response. What am I doing wrong? Any help is really appreciated!

Thank you in advance.

All the best,

Fab.

1

1 Answer 1

0

You should consider using a library like Zend_Soap_Client - which will handle the SOAP-XML for you - instead of custom xml formatting for each response you expect.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you for your suggestion, but Zend_Soap_Client looks it is not working properly... any more "easy" solutions for me? Thank you again.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.