收到SetExpressCheckout令牌,但Sandbox声明事务已过期

时间:2015-12-11 03:49:45

标签: c# api paypal paypal-sandbox

我一直在尝试使用C#Paypal API处理非常简单的快速结账沙盒交易,但在重定向后,Paypal网站上的会话超时错误仍然存​​在。

我应该强调一下,我从SetExpressCheckout获得了一个成功的ACK响应以及一个令牌字符串。

以下是我尝试重定向到的结帐网址的示例:

https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-9RY2628262462061J

我的回复地址是localhost,但我无法看到这在Sandbox中存在任何问题。

在尝试重定向到沙盒时,我不会到达结帐网址,而是在此地址:

https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_flow&SESSION=CzvBHQErPEHw5gOt51FV88G_4L9HUCLypeGkwVZLW6mkWsZOofIpFR2K6Aa&dispatch=50a222a57771920b6a3d7b606239e4d529b525e0b7e69bf0224adecfb0124e9b61f737ba21b081984719ecfa9a8ffe80733a1a700ced90ae

并看到以下错误消息:

"此交易已过期。请返回收件人的网站,使用他们的常规结帐流程完成您的交易。"

当[1]我有一个成功的API响应和一个令牌时,如何才能超时; [2]我在获得令牌后立即重定向到那里。

有没有人知道这里发生了什么?

如果它有帮助,那么我写的是用来访问API的C#。如上所述,我获得了成功的ACK响应和一个令牌。

try
        {
            var details = ToPaymentDetails(data);

            var request = new SetExpressCheckoutReq();
            request.SetExpressCheckoutRequest = new SetExpressCheckoutRequestType
            {
                SetExpressCheckoutRequestDetails = details,
                Version = Version
            };
            var result = await client.SetExpressCheckoutAsync(credentials, request);
            var response = result.SetExpressCheckoutResponse1;

            FailOnError(response);

            return Result.Success(response.Token);
        }
        catch (Exception ex)
        {
            return Result.Error<string>("Received an error from Paypal.SetExpressCheckout.", exception: ex);
        }

2 个答案:

答案 0 :(得分:0)

EC令牌仅持续3个小时。您必须回忆SetEC API以获取新的EC令牌并继续结帐流程。

答案 1 :(得分:0)

我不太了解为什么SOAP API调用会生成被Paypal拒绝的令牌,但我发现如果我使用SDK生成付款,我就可以访问Sandbox付款页面。

这并不具备启发性或教育性的经验......