表單到收款:做出能接單的網站 · 第 06 章
收到可信的通知才算已付款
付款頁跳回網站不代表款項已確認。後端要驗證服務商通知、核對交易與金額,重複通知也只能處理一次。
貓老闆的簡報
不能客人把網址改成成功,我就寄出一個碗。我要的是核對過的付款結果。
——貓掌櫃官網的老闆「掌櫃」下需求時的原話
這章做什麼
依選定服務商的官方規則驗證付款通知,核對訂單、金額與幣別,以可重複安全執行的方式更新訂單。
動手做
- 依服務商文件建立 Webhook 或付款結果通知端點,使用官方 SDK 或規定的簽章驗證方式;驗證錯誤不得更新訂單。
- 從已驗證通知或向服務商查詢的結果,核對交易識別、訂單、金額、幣別與真正的付款狀態;建立付款請求成功不等於付款完成。
- 記錄已處理的事件或交易,將事件紀錄與訂單更新放在同一個資料庫交易中,搭配唯一限制;通知重送或同時到達都不能重複處理。
- 通知可能延遲或順序不同;不能讓較舊的錯誤通知把已確認付款改回未付款。已取消訂單卻收到成功付款時,記錄例外並交管理者查核。
- 確認頁只向後端讀取結果。若還沒收到可信通知,顯示「付款結果確認中」,不要從網址參數判定成功。
親手試試
模擬:網址帶著 success=true,但後端尚無可信付款結果。維持等待確認。
模擬:簽章有效、交易與金額吻合且確認已付款。後端保存紀錄並更新一次。
模擬:交易已處理。回覆已收到,不再寄信或新增出貨工作。
這是判斷流程示意,不進行真實簽章驗證;實作要依服務商規則在後端完成。
這樣對 AI 說
中文就可以
請依選定服務商的官方文件建立付款通知端點,引用使用的文件連結。用官方方式驗證簽章,核對交易識別、訂單、金額、幣別與付款狀態後才更新。以唯一限制和資料庫交易確保重送或同時到達的通知不會重複更新、寄信或出貨;較舊通知不能倒退已確認付款。取消訂單收到成功付款時列為人工處理,不自動忽略或出貨。結果頁向後端查詢,網址參數不能改變狀態。請列出偽造通知、金額不符、重送、延遲、順序不同與付款成功後關閉分頁的檢查方式。
本章驗收清單
不要只驗成功的一次,還要驗沒有權限與重複的一次。
- 未通過驗證的通知不能更動訂單
- 金額或幣別不符時不標記已付款
- 相同通知重送不會重複處理
- 關閉付款成功頁仍能由後端更新狀態
- 改網址參數不能把未付款變已付款
這章的相關詞條
詞條頁都有可以動的示範——卡住的時候,去把名詞弄清楚,回來繼續做。
官方參考資料
進度只存在這台瀏覽器,不上傳、不追蹤。