PayPal Express Checkout始终显示用户"此交易已过期。"页面,但没有API错误

时间:2014-01-20 10:17:48

标签: php redirect curl paypal

我正在尝试使用PayPal的快速​​结账设置简单的付款顺序。我的SetExpressCheckout调用似乎工作正常,我得到ACK=Success和一个令牌。但是,当我使用该令牌将用户重定向到PayPal时,它总是向他们显示一个屏幕:

  

此交易已过期。请返回收件人的网站   使用定期结帐流程完成交易。

     

您的会话已结束

     

很抱歉,您的会话已经结束。你的帐户还没有   带电。请返回商家网站并再次退房   使用PayPal。

为了澄清,我没有从SetExpressCheckout API调用中获取任何错误代码,但令牌似乎总是过期。我已经尝试重定向到无意义的令牌,但这会生成一个不同的页面。看来我正在接收一个有效的令牌并正确地重定向到它,但它总是在1-2秒内过期。

示例请求的详细信息:

我在初始的SetExpressCheckout请求中发送的内容:

Array
(
    [PAYMENTACTION] => Sale
    [useraction] => commit
    [RETURNURL] => xxxx
    [CANCELURL] => xxxxx
    [PAYMENTREQUEST_0_AMT] => 49.00
    [PAYMENTREQUEST_0_SHIPPINGAMT] => 0
    [PAYMENTREQUEST_0_CURRENCYCODE] => USD
    [PAYMENTREQUEST_0_ITEMAMT] => 49.00
    [L_PAYMENTREQUEST_0_NAME0] => xxxxx
    [L_PAYMENTREQUEST_0_DESC0] => xxxxx
    [L_PAYMENTREQUEST_0_NUMBER0] => xxxxx
    [L_PAYMENTREQUEST_0_AMT0] => 49
    [L_PAYMENTREQUEST_0_QTY0] => 1
    [METHOD] => SetExpressCheckout
    [VERSION] => 74.0
    [USER] => xxxxx
    [PWD] => xxxxx
    [SIGNATURE] => xxxxx
)

关于请求的Curl_getinfo:

Array
(
    [url] => https://api-3t.sandbox.paypal.com/nvp
    [content_type] => text/plain; charset=utf-8
    [http_code] => 200
    [header_size] => 255
    [request_size] => 798
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 1.139
    [namelookup_time] => 0
    [connect_time] => 0.187
    [pretransfer_time] => 0.64
    [size_upload] => 660
    [size_download] => 136
    [speed_download] => 119
    [speed_upload] => 579
    [download_content_length] => 136
    [upload_content_length] => 660
    [starttransfer_time] => 1.139
    [redirect_time] => 0
    [certinfo] => Array
        (
        )

    [primary_ip] => 23.4.59.42
    [primary_port] => 443
    [local_ip] => 192.168.0.102
    [local_port] => 63049
    [redirect_url] => 
)

我通过curl从PayPal返回的内容:

Array
(
    [TOKEN] => EC-59031295261754641
    [TIMESTAMP] => 2014-01-20T10:12:27Z
    [CORRELATIONID] => 84d3d68cbd574
    [ACK] => Success
    [VERSION] => 74.0
    [BUILD] => 9285531
)

然后,我将用户重定向到该令牌的相关网址(使用令牌urlencode d),在这种情况下:

https://www.paypal.com/webscr?cmd=_express-checkout&useraction=commit&token=EC-59031295261754641

对我来说这一切似乎都很好,但是当我重定向到该网址时,它始终显示“交易已过期的屏幕”。

有谁可以指出我做错了什么?

3 个答案:

答案 0 :(得分:32)

问题是它处于沙箱模式,重定向应该是

https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&useraction=commit&token=

而不是上面显示的网址。

这显示在Express Checkout integration guide的第36页。

答案 1 :(得分:1)

我还解决了删除paypal cookie的类似问题。问题在于在同一浏览器中更改沙盒帐户clientId / secret。

答案 2 :(得分:0)

我解决了删除贝宝饼干的问题