2013-04-13 91 views
1

我目前正在開發一個使用PayPals快速結賬系統的E-Comm網站。快速結賬系統工作正常,我發送付款金額,用戶登錄確認送貨細節,並返回到我的頁面,我確認並付款完成。我遇到的主要問題是我的用戶名(電子郵件)保存在會話中。一旦用戶點擊使用paypal結帳並確認他/她的PayPal帳戶,我的會話就會被清除。因此,我無法記錄誰購買了哪些商品(除非我使用的用戶paypal電子郵件地址可能與用戶在我的網站上使用的地址不同)。PayPal快速結帳期間正在清除的會話

所以我的問題是,有什麼辦法可以在整個確認操作中保留會話狀態?或者有另一種方法來保持用戶信息?這是一個記錄的問題(我沒有看到它在任何地方)?

如果需要更多的細節請告訴我。

謝謝你的時間。

回答

1

不,一旦用戶離開您的域,會話將終止。

相反,您可以在用戶離開您的網站之前將電子郵件地址存儲在表格中,並將插入的記錄的ID傳遞給paypal。由於此ID是自定義字段,因此一旦用戶完成付款,它將在回叫網址中返回。您可以從URL獲取ID並從數據庫中檢索相應的電子郵件。

+0

在您的網站上創建a.session,轉到另一個不在您的域上的網站,在那裏停留幾分鐘,然後通過在地址欄中輸入地址並按回車鍵返回頁面。 –

+0

它表現不同對我來說......但我在真實環境中測試了這個... –

0

即使您的PHP會話沒有終止(關閉它可能有不同的原因),仍然不是一個好主意,依賴於用戶離開PayPal和返回之間的未修改會話。考慮一個擁有多個標籤頁的用戶,在完成快速結賬之前,您可以在另一個標籤頁中查看您的網站。

取而代之的是,將對於結帳完成而言重要的所有內容存儲在數據庫中,並通過快速結帳流程通過CUSTOMINVNUM參數傳遞唯一標識符。這些將通過結帳流程進行處理。一旦回調返回到您的網站,您可以很容易地識別它所指的數據庫中的哪個「不完整」訂單,並將其標記爲「已付款」。

+0

我試圖設置CUSTOM屬性和INVNUM屬性,但是當我到達我的確認頁面時,它說索引不存在。爲了訪問它,我需要做些什麼嗎? – RMT

+0

您是否嘗試使用var_dump()轉儲PayPal響應來驗證它是否不在類似名稱的回覆中?如果在SetExpressCheckout調用中正確傳遞,它應該在那裏。看起來從EC v63開始,CUSTOM和INVNUM不贊成使用PAYMENTREQUEST_n_CUSTOM和PAYMENTREQUEST_n_INVNUM。 https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_SetExpressCheckout – jimp

+0

我用print_r來顯示返回給我的數組內部的所有值,沒有INVNUM的實例或CUSTOM那裏。 – RMT