簡體   English   中英

如何使用PHP解析來自PayPal API的SOAP響應?

[英]How to parse SOAP response from PayPal API with PHP?

我正在嘗試為PHP中的PayPal集成解析SOAP響應,並且閱讀了以下內容:

使用具有多個名稱空間的SimpleXML解析XML

這提供了很好的見解,但我仍然無法弄清楚如何正確地做到這一點。 這個SOAP事情太復雜了!

這是我需要解析的SOAP響應:

<?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">user@domain.com</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代碼,但沒有結果:

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

其中$ res包括完整的SOAP響應。 我究竟做錯了什么? 任何幫助都非常感謝!

先感謝您。

祝一切順利,

晶圓廠

您應該考慮使用Zend_Soap_Client之類的庫-該庫將為您處理SOAP-XML-而不是為您期望的每個響應自定義xml格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM