已收到 SetExpressCheckout 令牌,但沙盒声称交易已过期
Posted
技术标签:
【中文标题】已收到 SetExpressCheckout 令牌,但沙盒声称交易已过期【英文标题】:SetExpressCheckout token received but Sandbox claims transaction has expired 【发布时间】:2016-03-16 21:50:13 【问题描述】:我一直在尝试使用 C# Paypal API 处理一个非常简单的快速结帐沙盒交易,但在重定向后,Paypal 网站上不断出现会话超时错误。
我要强调的是,我从 SetExpressCheckout 获得了成功的 ACK 响应以及 Token 字符串。
这是我一直尝试重定向到的结帐 URL 示例:
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-9RY2628262462061J
我的返回地址是 localhost,但我在 Sandbox 中看不到任何地方会出现问题。
在尝试重定向到沙盒时,我到达的不是结帐 URL,而是这个地址:
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);
【问题讨论】:
【参考方案1】:EC 令牌仅持续 3 小时。您必须调用 SetEC API 以获取新的 EC 令牌并继续结帐流程。
【讨论】:
不过,如上所述,在调用 SetExpressCheckout 并获得令牌后,我立即将用户重定向到 Paypal。你知道为什么在这种情况下我会收到会话超时错误吗?【参考方案2】:我不太明白为什么 SOAP API 调用会生成一个被 Paypal 拒绝的令牌,但我发现如果我使用 SDK 生成付款,我能够到达沙盒付款页面。
这并不是一次启发性或教育性的经历......
【讨论】:
以上是关于已收到 SetExpressCheckout 令牌,但沙盒声称交易已过期的主要内容,如果未能解决你的问题,请参考以下文章
Paypal“SetExpressCheckout”API 方法已停止使用沙盒卖家账户
Paypal SetExpressCheckout 数字商品
Paypal SANDBOX SetExpressCheckout 停止工作