現在、PayPal Express Checkout を当社の Web サイトに統合しています。osCommerce (PHP) のインストールと setExpressCheckout の SOAP 実装を使用しています。不可解なことは、エクスプレス チェックアウトのコードがローカル環境で適切に動作していることです。
でも; 私たちの開発サーバーに依頼すると、エクスプレス チェックアウトの同じコードは機能しなくなります。
以下は、私のローカル開発環境によって開始され、エクスプレス チェックアウトのために PayPal サンドボックス エンドポイントに対して成功した SOAP 要求です。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<RequesterCredentials xmlns="urn:ebay:api:PayPalAPI">
<Credentials xmlns="urn:ebay:apis:eBLBaseComponents">
<Username>xxxxxxxxxxxxxxxxxxxxxxxxxxx</Username>
<Password>xxxxxxxxxxxxxxxx</Password>
</Credentials>
</RequesterCredentials>
</soap:Header>
<soap:Body>
<SetExpressCheckoutReq xmlns="urn:ebay:api:PayPalAPI">
<SetExpressCheckoutRequest>
<Version xmlns="urn:ebay:apis:eBLBaseComponents">98.0</Version>
<SetExpressCheckoutRequestDetails xmlns="urn:ebay:apis:eBLBaseComponents">
<ReturnURL>http://localhost/checkout_shipping.php?action=express_checkout&site=xxxxx</ReturnURL>
<CancelURL>http://localhost/checkout_shipping.php?ec_cancel=1&site=xxxxx</CancelURL>
<ReqConfirmShipping>1</ReqConfirmShipping>
<NoShipping>0</NoShipping>
<AddressOverride>0</AddressOverride>
<LocaleCode>US</LocaleCode>
<PageStyle></PageStyle>
<cpp-header-image></cpp-header-image>
<cpp-header-border-color></cpp-header-border-color>
<cpp-header-back-color></cpp-header-back-color>
<cpp-payflow-color></cpp-payflow-color>
<PaymentAction>Sale</PaymentAction>
<PaymentDetails>
<OrderTotal currencyID="USD">6.47</OrderTotal>
<ItemTotal currencyID="USD">2.48</ItemTotal>
<ShippingTotal currencyID="USD">3.99</ShippingTotal>
<HandlingTotal currencyID="USD"></HandlingTotal>
<TaxTotal currencyID="USD">0</TaxTotal>
<Custom>Phone: xxxxxxxxxx -- Email: xxxx.xxxxx@gmail.com</Custom>
<InvoiceID></InvoiceID>
<NotifyURL></NotifyURL>
<ButtonSource>PAYPAL_BUTTON_SOURCE</ButtonSource>
<ShipToAddress>
<Name></Name>
<Street1>xxxx Park Forest Circle</Street1>
<Street2></Street2>
<CityName>Clermont</CityName>
<StateOrProvince>OH</StateOrProvince>
<PostalCode>xxx03</PostalCode>
<Country>US</Country>
</ShipToAddress>
<PaymentDetailsItem><Name>Product XYZ</Name><Amount currencyID="USD">2.48</Amount><Number>-</Number><Quantity>1</Quantity></PaymentDetailsItem>
</PaymentDetails>
</SetExpressCheckoutRequestDetails>
</SetExpressCheckoutRequest>
</SetExpressCheckoutReq>
</soap:Body>
</soap:Envelope>
以下は、API エンドポイントから取得した応答です。
<?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/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/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"></Username>
<Password xsi:type="xs:string"></Password>
<Signature xsi:type="xs:string"></Signature>
<Subject xsi:type="xs:string"></Subject>
</Credentials>
</RequesterCredentials>
</SOAP-ENV:Header>
<SOAP-ENV:Body id="_0">
<SetExpressCheckoutResponse xmlns="urn:ebay:api:PayPalAPI">
<Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2013-03-27T18:46:35Z</Timestamp>
<Ack xmlns="urn:ebay:apis:eBLBaseComponents">Success</Ack>
<CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">cca293672cf33</CorrelationID>
<Version xmlns="urn:ebay:apis:eBLBaseComponents">98.0</Version>
<Build xmlns="urn:ebay:apis:eBLBaseComponents">5551055</Build>
<Token xsi:type="ebl:ExpressCheckoutTokenType">EC-2CM343011B950025M</Token>
</SetExpressCheckoutResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
ただし、DEV サーバーから同じタイプのトランザクションを開始すると、失敗の原因になります。開発サーバーから開始されたリクエストの var_dump() の下を見つけます
Array (
[PAYPAL_ORDER_TOTAL] => 7.84
[PAYPAL_ORDER_DESCRIPTION] => Order placed on April 2, 2013, 9:30 am by xxxx xxxxx (ID: xxxxx)
[PAYPAL_CUSTOM] => Phone: xxxxxxxxxx -- Email: xxxx.xxxxx@gmail.com
[PAYPAL_SHIPPING_TOTAL] => 0
[PAYPAL_HANDLING_TOTAL] =>
[PAYPAL_TAX_TOTAL] => 0
[PAYPAL_ITEM_TOTAL] => 7.84
[PAYMENT_DETAILS_ITEM] => Product XYZ
[PAYPAL_SHIPPING_NAME] =>
[PAYPAL_SHIPPING_ADDRESS1] => xxxx Rainbow Springs Ct
[PAYPAL_SHIPPING_ADDRESS2] =>
[PAYPAL_SHIPPING_CITY] => Louisville
[PAYPAL_SHIPPING_STATE] => KY
[PAYPAL_SHIPPING_ZIP] => 40213
[PAYPAL_SHIPPING_COUNTRY] => US
[PAYPAL_NOTIFY_URL] =>
[PAYPAL_INVOICE_ID] =>
[PAYPAL_PAGE_STYLE] =>
[PAYPAL_CPP_HEADER_IMAGE] =>
[PAYPAL_CPP_HEADER_BORDER_COLOR] =>
[PAYPAL_CPP_HEADER_BACK_COLOR] =>
[PAYPAL_CPP_PAYFLOW_COLOR] =>
[PAYPAL_RETURN_URL] => http://wpp_mod.testosc.storename.com/checkout_shipping.php?action=express_checkout&site=xxxxx
[PAYPAL_CANCEL_URL] => http://wpp_mod.testosc.storename.com/checkout_shipping.php?ec_cancel=1&site=xxxxx
[PAYPAL_REQUIRE_CONFIRM_SHIPPING] => 1
[PAYPAL_LOCALE_CODE] => US
[PAYPAL_NO_SHIPPING] => 0
[PAYPAL_ADDRESS_OVERRIDE] => 0
)
このリクエストの結果、次のレスポンスが返されます (ここでも var_dump() が返されます)。
Array (
[Security] =>
[RequesterCredentials] =>
Array ( [0] =>
Array (
[Credentials] =>
Array ( [0] =>
Array (
[Username] =>
[Password] =>
[Signature] =>
[Subject] =>
)
)
)
)
[SetExpressCheckoutResponse] =>
Array ( [0] =>
Array (
[Timestamp] => 2013-04-02T14:30:46Z
[Ack] => Failure
[CorrelationID] => 44f876829f4cb
[Errors] =>
Array ( [0] => Array (
[ShortMessage] => Transaction refused because of an invalid argument. See additional error messages for details.
[LongMessage] => ReturnURL is invalid.
[ErrorCode] => 10471
[SeverityCode] => Error )
[1] => Array (
[ShortMessage] => Transaction refused because of an invalid argument. See additional error messages for details.
[LongMessage] => CancelURL is invalid.
[ErrorCode] => 10472
[SeverityCode] => Error )
)
[Version] => 98.0
[Build] => 5613839
)
)
)
setExpressCheckoutの PayPal API ドキュメントを確認した後、有効な URL で API エンドポイントが検索するものに関する特定のガイドラインを見つけることができませんでした。
SO1とSO2も確認しましたが、特定の問題に関連するものは何も見つかりませんでした。
RETURN および CANCEL URL の何が問題なのか、または setExpressCheckout API の適切な形式の URL のより詳細な説明が最も役立つ情報を誰かが持っている場合。