0

我正在將巴克萊ePDQ CPI付款整合到我們的應用程序中。雞和雞蛋:在進入支付網關之前保存模型? (Rails)

到目前爲止,我已經編碼的方法是:

1.用戶進入細節 2型號被保存到會話(未DB) 3.用戶轉發到支付頁面。 4.用戶輸入付款詳情。 5. eDPQ服務器執行回發,由控制器提取。這應該保存訂單詳細信息並保存用戶模型。 6.用戶通過CPI重定向到結果頁面。

我不想在發送到付款頁面之前保存用戶詳細信息的原因是,如果用戶輸入了錯誤的詳細信息,用戶可以按下瀏覽器並重新提交表單。

但是我現在意識到,由於eDPQ服務器直接調用回發,所以不會有會話。可以將order_id發送到作爲參考發回的付款頁面。所以現在我想回去保存用戶,然後將它們發送到付款頁面,因此我在order_id中發送了一個參考。這可以通過post_back方法找到,它會找到用戶並完成註冊過程。

但是,如果他們點擊並嘗試重新提交,則會出現用戶已存在的錯誤。

其中一種方法是確保用戶的「新」頁面不會被緩存。所以當他們點擊後,他們實際上會顯示一個「編輯」頁面,它看起來像一個「新」頁面。然而,這看起來會增加一些編碼複雜性。

我希望有人提出了類似的問題,也許能夠在這裏給出一些建議。

感謝您的閱讀!

回答

1

一般而言,我認爲最好先完成保存模型。如果你想跟蹤進度,你可以通過進度欄來完成。例如,在您的訂單中,您可以執行以下操作:

class Order 
    def processed? 
    status == 'processed' 
    end 

    def entered_details? 
    status == 'details entered' 
    end 

    def can_process? 
    entered_details? 
    end 
end 

然後您可以簡單地更新您的狀態。例如,在用戶輸入付款詳情後,您可以將狀態更新爲「輸入詳細信息」,並且在使用付款通道處理後,您可以將狀態更新爲「已處理」。這將允許您在模型中強制執行狀態,而無需臨時將其存儲在會話中。

至於後退按鈕,您無法控制用戶點擊後退按鈕時看到的內容。他們被帶到他們之前所在的頁面,並且您的服務器不會收到通知。這是後退按鈕的詛咒。解決這個問題的唯一方法是確保第二個表單提交會導致驗證錯誤,或者如果它來自同一會話,它會執行更新,但通常情況下,您不應該試圖容納它,因爲它不遵循你的應用程序的流程。這就是爲什麼許多付款網站在處理付款時經常寫'不要點擊後退按鈕'的原因。也就是說,您應該在頁面上提供自己的後退按鈕,但您可以調整該按鈕以重定向到編輯頁面而不是新頁面。