2

在重定向到外部 url 期间是否可以保持对话?我开始使用 CDI 对话 bean 进行贝宝交易,接下来当我登录并进行付款时,面孔重定向到贝宝页面,下一个贝宝返回我的页面,我希望使用我的支持 bean 的相同实例来记住我发送到的详细信息贝宝。

当贝宝重定向回我的页面时,他会附加到 url 交易令牌和付款人 ID,但我没有关于用户购买的产品数量的任何信息。所以我想记住重定向之前的数量。现在,在贝宝返回我的网站后,我调用方法 doExpressCheckout 并且我想传递数量和其他交易详细信息,因为我可以设置与交易前完全不同的详细信息,并且当客户在贝宝页面上接受购买某些产品时可能会出现奇怪的情况10 美元,但我在贝宝再次重定向到我的页面后设置了 100 美元,客户将不知道他支付了多少。我不知道为什么会这样。

我使用 SOAP api。

4

2 回答 2

4

是的,您可以从外部重定向恢复对话。只需cid=nnn在您传递给 PayPal 的返回 URL 中包含 。例如:

returnUrl = "http://myip/myapp/return.seam?cid=" + Conversation.instance().getId();
details.setReturnURL(returnUrl);
...

由于会话超时的 2 分钟默认值相当有限,您最终会希望在调用 PayPal 之前增加会话超时:

Conversation.instance().setTimeout(900000); // 15 minutes

但是,这样做不一定是一个好主意,因为它可能会长时间保留数据,并且您还需要保留会话 cookie 才能使该方案正常工作(因此,如果需要,您还必须增加会话超时)。

更好的策略是永久保存交易数据(数据库或磁盘),将随机生成的 ID 与数据相关联,并在从 PayPal 返回时检索它。这样您就不需要将对话保存在内存中。

于 2013-04-05T22:15:23.367 回答
0

当贝宝重定向回我的页面时,他会附加到 url 交易令牌和付款人 ID,但我没有关于用户购买的产品数量的任何信息。

您可以将预对话 id 附加到您传递给 Paypal 作为返回 url 的 url。这样,对话 id 将与上述参数一起传回,并且seam将知道使用所有数据恢复预付款对话。

于 2013-04-05T21:52:35.053 回答