2014-07-23 60 views
2

我們的基於opencart的商店正在使用paypal快速結帳,約25%的paypal快遞訂單正在出現問題。PayPal快速結賬後缺少會話數據

問題似乎是,當他們返回到網站後貝寶,他們的會議數據丟失,所以他們的購物車的所有細節已經消失。

要嘗試看看可能是什麼導致它返回到網站(通常通過payment/pp_express/expressReturn)並且會話數據沒有貝寶/購物車詳細信息我已經記錄了大部分超全局變量。 他們會永遠是:

Array 
(
    [category] => desktop 
    [language] => en 
    [currency] => GBP 
    [cart] => Array 
     (
     ) 

) 

有時,當他們回到自己的cookies是空的,其他時間,語言,貨幣&跟蹤在那裏。

進一步調查之後,它看起來像會被丟失,因爲它被重定向方式:

header('Location: https://www.paypal.com/cgi‑bin/webscr?cmd=_express-checkout&token=' . $result['TOKEN'].'&useraction=commit'); 

所以每頭重定向之前,我加入

session_write_close(); 

的問題似乎真的有所緩解,但仍然在發生。

服務器使用memcache,我最後的想法是可能內存不足,他們的會話丟失 - 但我想我們會在整個我們的網站看到頻繁的註銷問題,如果是這樣的話。

+0

難道這些登錄的用戶,你在某些時候使用'在session_start()'用?如果是這樣,你說他們的會話沒有被檢測到,當用戶被彈回到你的服務器? (只是試圖更詳細地瞭解你在做什麼和麪臨的問題) – Abela

+0

是的 - 會話啓動得早得多,但是當我在paypal express checkout中登錄sessiondata/post/get/cookies/server時,沒有提及會話ID – Matthew

+0

您是否使用默認的OpenCart安裝或某些第三方附帶的默認PayPal Express Checkout付款擴展?默認付款選項應該沒有問題。我已經設立了許多使用這一個的商店,並且從未體驗過這種行爲。如果是第三方擴展,請聯繫其開發人員尋求支持。 – shadyyx

回答

1

在我的經驗中,從支付網關返回後,使用會話顯示訂單數據是不好的做法。

大多數支付網關(包括PayPal)允許您傳遞訂單ID或其他自定義變量,這些變量將在成功/失敗時傳回。您一般可遵循以下步驟:

  1. 保存爲數據庫,檢索單編號
  2. 重定向到支付網關。將orderID傳遞給支付網關。
  3. 在成功/失敗讀取使用將訂單數據庫順序發送回來的支付網關
+0

我不想重寫貝寶快遞模塊,但會序列化購物車並將其存儲在數據庫中,然後如果會話是缺少從存儲的版本工作中可以接受地重新創建購物車? – Matthew

+0

這基本上是我建議要做的。但是您需要一個ID來標識數據庫中的序列化購物車。您可以將該ID發送給PayPal,它將在成功或錯誤頁面上返回。有關更多詳細信息,請參閱http://stackoverflow.com/questions/3349151/paypal-ipn-returning-a-shopping-cart-or-order-id-for-post-processing。在這種情況下,你不再需要會話。 –

+1

OpenCart已經可以像這樣工作了。如果客戶開始結帳流程並在提交前走到「確認」步驟 - 訂單已經創建並存儲在數據庫中(在OC世界中,我們稱之爲虛擬訂單*,因爲它沒有任何狀態,因此不是即使在管理中也可見)。在提交支付網關後 - 在這種情況下,用戶將使用此虛擬訂單的ID和提供給PayPal的其他信息重定向到PayPal。在他被重定向回支付的網關'callback'方法被調用後,確保訂單更新狀態正確。 – shadyyx