我目前正将PayPal Express Checkout整合到我们的网站中。我们正在使用osCommerce(PHP)的安装和setExpressCheckout的SOAP实现。令人费解的是,我的Express Checkouts代码在我的本地环境中正常运行。
然而;委托我们的开发服务器后,Express Checkout的相同代码不再有效。
以下是我的本地开发环境向PayPal Sandbox端点发起的成功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文档之后,就API端点在有效网址中查找的内容而言,我无法找到任何特定指南。
我还检查了SO1和SO2,但没有看到任何与我的特定问题有关的内容。
如果任何人有任何有关RETURN和CANCEL URL可能出错的信息,或者更好地了解setExpressCheckout API正确形成的URL的更详细说明,那将是最有帮助的。
答案 0 :(得分:3)
似乎PayPal API端点不喜欢域/网址中的下划线所以这样:
http://localhost/checkout_shipping.php?action=express_checkout&site=xxxxx
有效但是
http://wpp_mod.testosc.storename.com/checkout_shipping.php?action=express_checkout&site=xxxxx
不是;因为我们的开发服务器的域名中有一个下划线。这不方便但可以纠正。