2010-07-14 49 views
0

我將使用其中一個支付網關,因此來自我網站的用戶將被重定向到網關託管頁面以提供所有CC詳細信息。網關將返回結果到我指定的頁面(讓我們稱之爲paymentProcessed.php)。但現在我的擔心是:將數據發送到支付網關並返回 - 可能出現的問題

  1. 有人可能會僞造它。我的意思是,有人可能會被重定向到支付網關,然後付款,而不是付款,將返回結果到我的網站paymentProcessed.php頁面,並確認所有支付。該確認將由用戶通過正常POST發送,然後我的網站將向用戶交付產品,儘管實際上沒有付款。避免這種情況的常見做法是什麼?

  2. 有人被重定向到網關託管頁面,支付,重定向回我的網站和他登錄的會話已過期。通常我依靠會話來查看是否允許用戶訪問網站的某些部分,但是現在是否需要執行其他類型的確認頁面檢查?現在我正考慮在數據庫中存儲訂單ID和隨機生成的值,當用戶重定向將其傳遞到網關時(與總數一起,總數將傳遞到網關,然後返回,以便我可以確認已支付適當的數額)。然後,當確認與訂單ID一起出現時,我的隨機生成的值(和總計)不是像我一樣依賴會話通常用於正常的購物車頁面,我應該使用匹配的訂單ID檢查此值並根據需要更改訂單狀態。處理這類問題的常見做法是什麼?

  3. 我應該考慮哪些其他可能的問題?

我試圖儘可能清楚地解釋,我希望以上所有內容都有意義。請讓我知道我是否需要澄清一些事情。順便說一句我在php/mysql中的代碼

回答

1

然後你意識到它實際上更容易,更安全。當使用託管支付頁面(如Authorize.Net's SIM API)時,僅包括您和處理器所知道的某種類型的散列。這是不可能的,因爲生成它只需要你和處理器的私人信息。因此,您只需確認付款處理器發送給您的退貨頁面的散列與您交易的散列相匹配即可。如果是這樣,你可以100%確定交易沒有被欺騙。

會話往往會持續更長的時間,然後通常需要完成一次遠程結賬表單才能完成,並且即使用戶離開您的網站,會話也會持續。但是,如果您擔心會話在他們返回到您的網站之前即將過期,只需將會話信息存儲在數據庫中並使用cookie來跟蹤用戶。然後,他們回來時使用cookie來識別它們並從數據庫中檢索其會話信息。

UPDATE:

這裏是你如何讓你的會話cookie持續更長的時間與PHP:

// Makes the cookie last two hours. Make it a higher number to last longer. 
session_set_cookie_params(7200); 
session_start(); 
+0

或者你可以只配置PHP有一個較長的會話cookie(可在運行完成-time using session_set_cookie_params())。 – 2010-07-15 14:04:10

+0

@Lèsemajesté非常好的一點。修正答案以顯示示例。 – 2010-07-15 14:18:55

+0

從託管付款頁面返回的哈希值將會很高,但我付費的網關似乎不會返回任何類似的內容。我完全搞砸了,如果沒有自己託管表單頁面,並且同時遇到與PCI合規性有關的問題,我是無法實現它的? – spirytus 2010-07-28 00:52:57

1

我已經實現了一些支付網關,與它們的一個共同點是卡處理器將始終爲您返回事務狀態,其中一些使用弱重定向中繼用戶完成,其他人可以使用他們的web服務來驗證交易。無論哪種方式,您都需要獲得處理器文檔,以瞭解如何在您身邊驗證交易。

現在談談避免會話過期的其他可能性,您可能希望將所有事務數據存儲在表中,還可以通過會話來加速過程,但不需要進一步查看問題僅在會話中繼:

  • 如果用戶在進程中斷連接會怎麼樣?
  • 某些CC處理器強制您打開彈出窗口來處理,如果用戶關閉它,該怎麼辦?
  • 如果服務器崩潰怎麼辦?
  • 如果付款方式失敗並且用戶想要以其他類型的付款重試,該怎麼辦?

現在關於支付網關執行一些隨機的想法:

  • 有些處理器延遲驗證購房,他們將返回到您的網站的付款已接受,但你將不得不使用自己的web服務檢查最終狀態;
  • 某些處理器要求您捕獲購買,即意味着即使它已被批准,您可以稍後退出或終止它,這可以避免漫步者從您的網站購買東西,您可以檢查用戶的信息以確保它是全部好的他們捕獲或無效的購買避免退款。
  • 如果您的信用卡處理器允許您訪問Web服務或他們做服務器到服務器購買認證,這將需要一個有效的SSL證書,所以要注意。

這就是我現在所能記得的。