php - 由于 RETURN 和 CANCEL URL 无效,PayPal setExpressCheckout 调用失败

标签 php paypal paypal-sandbox

我目前正在将 PayPal Express Checkout 集成到我们的网站中。我们正在使用 osCommerce (PHP) 的安装和 setExpressCheckout 的 SOAP 实现。令人费解的是,我的 Express Checkouts 代码在我的本地环境中正常工作。

但是;在委托(delegate)给我们的开发服务器后,Express Checkout 的相同代码不再有效。

下面是我的本地开发环境向 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&amp;site=xxxxx</ReturnURL>
        <CancelURL>http://localhost/checkout_shipping.php?ec_cancel=1&amp;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 
            ) 
        ) 
)

检查 PayPal API 文档后 setExpressCheckout就 API 端点在有效 URL 中查找的内容而言,我找不到任何特定的指南。

我还检查了SO1SO2但没有看到与我的特定问题有关的任何内容。

如果有人知道 RETURN 和 CANCEL URL 可能有什么问题,或者更详细地解释 setExpressCheckout API 的正确格式的 URL,那将是最有帮助的。

最佳答案

似乎 PayPal API 端点不喜欢域/url 中的下划线,因此:

http://localhost/checkout_shipping.php?action=express_checkout&amp;site=xxxxx

有效但是这个

http://wpp_mod.testosc.storename.com/checkout_shipping.php?action=express_checkout&site=xxxxx

不是;因为我们开发服务器的域名中有一个下划线。这是不方便但可以纠正的。

关于php - 由于 RETURN 和 CANCEL URL 无效,PayPal setExpressCheckout 调用失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15767718/

相关文章:

php - Wordpress - 侧边栏中有 3 个小部件,将 "last"类应用于第三个小部件

php - 如何建立一个使用 MySQL 数据库的问答网站?

php - Paypal :在收到 IPN 之前获取买家 ID(快速结帐,PHP)

paypal - PayPal Preapproval 是否保证资金可用?

paypal - 使用 Braintree Dropin UI 时使用 Paypal 余额支付

javascript - Angular 的 $scope 在 PayPal 方法 promise 中不起作用

php - 我如何使用 php 在选择框中突出显示选项值

php - 当我尝试从我的主文件夹中获取文件内容时权限被拒绝

paypal - 我应该使用哪个 PayPal API 向关联公司发送付款

paypal - 使用自适应支付问题的延迟链式支​​付