2011-07-06 34 views
0

我希望使用支付寶臨託管解決方案來處理支付爲我的網站,而我想實現的是,直到貝寶確認我已收到用戶提交的數據不被插入到我的數據庫爲他們的入場付款。處理貝寶IPN與數據庫插入

從我讀過,我理解的IPN是實現這一目標的最佳途徑。

所以在目前,用戶用一種形式,對此我再預覽他們進入他們的數據,如果他們批准他們入境,我插入到數據庫(使用PHP/MySQL的)。目前的表單數據正在SESSION變量中傳遞並且正常工作。該文件的過程是:

  1. 用戶輸入數據
  2. 用戶呈現其輸入的數據在知道頁面,如果他們同意...
  3. 他們點擊一個按鈕,用於處理插入到數據庫中。

但是我希望做的是什麼,如果他們批准他們的預覽頁面上的條目,當他們點擊批准,而不是數據庫正在那裏,然後更新,將其發送給貝寶進行付款,只更新其入境數據庫,如果支付被批准,是這樣的:

  1. 用戶輸入數據
  2. 用戶呈現在他們輸入的數據就知道頁面,如果他們同意...
  3. 他們點擊一個將它們帶到付款頁面
  4. 0123的按鈕
  5. 如果收到付款,他們的數據將被添加到數據庫中。

有沒有人有任何這種類型的方法的經驗指向我在正確的方向或給我一些指導如何去做這個好嗎?

我已經看過PayPal的文件結束了,但因爲我是新來這個,我需要的東西在一個非常簡單的方式解釋。

我最初的想法只是存儲形式是Session變量,但我會通過重定向人支付頁面失去這個。我的另一個想法是創建一個相同的數據庫,我已經有了一個臨時的數據保存階段,然後如果IPN重新獲得批准,請將數據移動到最終的託管數據庫,但這似乎是過度設計問題。

我希望有人能幫忙。

感謝 丹

回答

1

關於IPN的一個問題是,它是來自PayPal的「異步」響應 - 它不在用戶的瀏覽器會話中,因此如果您僅依賴IPN,會話變量將不起作用(除非您收到IPN響應,然後將其與用戶會話進行匹配)。 PayPal還提供PDT(支付數據傳輸),這是一種「會話內」響應,可以將用戶返回到您的網站。

我不會完全依賴IPN進行付款通知(請參閱我在下面的SO主題中的回答)Can one rely on Paypal IPN solely to record purchases?

我們的系統使用IPN和PDT的組合,將'購物車'數據存儲在數據庫中(作爲您的'臨時'記錄),直到通過PDT或IPN完成付款通知 - 無論哪個先到達,該事務(您的'永久'數據庫插入)並刪除'臨時'記錄(因此後續IPN或PDT不會觸發重複事務)。

+0

非常感謝您的意見。我會檢查一下。擔 – Dan

2

使用貝寶IPN似乎是在這種情況下,最好的解決辦法。

在我看來,使用臨時表似乎是最好的解決方案。這將遵循KISS規則。

請考慮使用以下方案:

  • 用戶進入
  • 形式提交
  • 數據存儲在臨時表中的數據庫
  • ,同時重定向到PayPal網站,你可以添加數據當我們回到您的頁面時將用於識別用戶的自定義字段
  • 更新交易狀態
  • 在您需要的表格中插入數據

這似乎是最簡單的解決方案。

1

我最初的想法只是存儲表單是SESSION變量,但我將通過將用戶重定向到付款頁面而失去這一點。

不一定。只要當前瀏覽器(會話)處於打開狀態,會話通常就會持續存在。這是不一樣「只要當前頁面被查看」提供您正確設置會話cookie。你可以,如果你這樣做的權利有會議持續幾天,幾個月,幾年...

另一個我想過要創建一個相同的數據庫,我已經作爲數據暫時保持階段,然後如果IPN重新獲得批准,請將數據移動到最終的託管數據庫,但這看起來好像過度設計了這個問題。

不,這不是矯枉過正。

它處理交易未完成的情況。這可能是由於多種原因造成的,例如,您的用戶去吃午餐並忘記在會話超時之前完成流程(默認爲20分鐘)或Paypal結束時出現問題(不太可能,但您必須假定它可能發生),或者存在普遍的網絡問題(isp在交易中斷時),或者您的移動用戶不在網絡覆蓋範圍內。任何事情都會干擾交易,你需​​要有一個回退的位置。否則,它變得令人討厭(因爲你不知道什麼中斷了交易和什麼時候)以及你的用戶必須重新開始。

擁有一個臨時數據庫允許您監視未完成的事務,並在必要時提示用戶完成,如果他們在給定的時間內沒有這樣做。

+0

嗨T9b,有可能,而不是有一個重複的臨時數據庫,有一個,但添加一個真/假的列,如果IPN/PDT返回驗證標記爲真,否則假?謝謝Dan – Dan

+1

當然,任何事情都是可能的。但是,考慮清除未完成事務數據庫的性能以及(取決於您擁有的事務數量)表上流量的大小,您可能希望考慮這種分離。有一些快速規則並不難,後來在你開始看到你的數據和數據庫如何實際運行時,會出現這些設計問題。你可能根本不需要做任何分離。 – T9b

+0

感謝您的輸入,您當然是對的,我只需要潛入並看看有什麼適合。再次感謝,丹 – Dan