是否可以在重定向到外部url期间保持对话?我开始与CDI对话bean贝宝交易,接下来有脸重定向到贝宝页面,当我登录和做支付和下一个贝宝返回到我的页面,我想有我的支持bean的相同实例,以记住我发送给贝宝的细节。
当paypal重定向回我的页面时,他在url中添加了交易令牌和付款人ID,但我没有任何关于用户购买的产品数量的信息。我要记住重定向之前的量。现在,在paypal返回到我的网站后,我调用doExpressCheckout方法,我想传递数量和其他交易细节,因为我可以设置与交易前完全不同的细节,并且当客户在paypal页面上接受以10美元购买一些产品时,可能会出现奇怪的情况,但我设置了100美元后,paypal再次重定向到我的页面,客户将不知道他支付了多少。我不知道为什么会这样。
我使用SOAP api
是的,您可以从外部重定向恢复对话。只需将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以使此方案工作(因此您必须在必要时增加会话超时)。
更好的策略是持久地保存交易数据(db或磁盘),将随机生成的ID与数据关联,并在从PayPal返回时检索它。这样,您就不需要在内存中保存对话。
当paypal重定向回我的页面,他追加到url交易代币和付款人ID,但我没有任何关于数量的信息用户购买的产品
您可以将对话前的id附加到您传递给Paypal的url作为返回url。这样,会话id将与上述参数一起传回,并且seam
将知道恢复带有所有数据的预付费会话。