2013-04-05 87 views
2

是否有可能在重定向到外部URL期間保持對話? 我開始使用CDI會話bean進行PayPal交易,接下來當我登錄並進行付款並將下一個PayPal返回到我的頁面時,會有臉部重定向到PayPal頁面,並且我想擁有相同的支持bean實例來記住我發送的詳細信息到paypal。會話範圍和jsf重定向

當貝寶重定向回我的頁面時,他附加到網址交易令牌和付款人ID,但我沒有任何關於用戶購買產品數量的信息。所以我想記住重定向之前的數量。現在,貝寶返回我的網站後,我打電話方法doExpressCheckout,我想通過數量和其他交易細節,因爲我可以設置完全不同的細節比交易之前,並有可能發生奇怪的情況時,客戶接受貝寶頁購買一些產品10美元,但我設置了100美元后貝寶重新導向到我的網頁,客戶將不知道他支付了多少。 我不知道爲什麼會發生這種情況。

我使用SOAP API。

+1

看起來應該從對話範圍改爲會話範圍。 – 2013-04-05 21:51:08

+0

@LuiggiMendoza,我不確定它是如何工作的,但是感覺Paypal可能沒有義務用JSESSION_ID返回進程。瀏覽器會自動將它重新添加到來自外部網站的重定向上嗎? – kolossus 2013-04-06 06:31:26

+0

@kolossus如果將會話保存在服務器中,爲什麼需要將JSESSION_ID作爲請求查詢字符串的一部分? – 2013-04-06 12:50:18

回答

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返回時檢索它。這樣你就不需要把對話留在記憶裏。

0

貝寶重定向回我的網頁,他追加到URL交易 令牌和計費用戶標識,但我沒有關於哪個用戶買 產品數量的任何信息。

您可以將預對話ID追加到您傳遞給PayPal的網址作爲返回網址。通過這種方式,對話ID將與上述參數一起傳回,並且seam將知道用所有數據恢復預付費對話。