会话作用域和jsf重定向

时间:2013-04-05 20:41:18

标签: java jsf paypal seam cdi

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

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

我使用SOAP api。

2 个答案:

答案 0 :(得分:4)

是的,您可以通过外部重定向恢复对话。只需在传递给PayPal的返回网址中加入cid=nnn即可。例如:

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

由于对话超时的2分钟默认值相当有限,因此您最终希望在将呼叫转移到PayPal之前增加对话超时:

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

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

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

答案 1 :(得分:0)

  

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

您可以将前会话ID附加到您传递给Paypal的网址作为返回网址。通过这种方式,会话ID将与上述参数一起传回,seam将知道使用所有数据恢复预付款会话。