表單到收款:做出能接單的網站 · 第 06 章

收到可信的通知才算已付款

付款頁跳回網站不代表款項已確認。後端要驗證服務商通知、核對交易與金額,重複通知也只能處理一次。

貓老闆的簡報

不能客人把網址改成成功,我就寄出一個碗。我要的是核對過的付款結果。

——貓掌櫃官網的老闆「掌櫃」下需求時的原話

這章做什麼

依選定服務商的官方規則驗證付款通知,核對訂單、金額與幣別,以可重複安全執行的方式更新訂單。

動手做

  1. 依服務商文件建立 Webhook 或付款結果通知端點,使用官方 SDK 或規定的簽章驗證方式;驗證錯誤不得更新訂單。
  2. 從已驗證通知或向服務商查詢的結果,核對交易識別、訂單、金額、幣別與真正的付款狀態;建立付款請求成功不等於付款完成。
  3. 記錄已處理的事件或交易,將事件紀錄與訂單更新放在同一個資料庫交易中,搭配唯一限制;通知重送或同時到達都不能重複處理。
  4. 通知可能延遲或順序不同;不能讓較舊的錯誤通知把已確認付款改回未付款。已取消訂單卻收到成功付款時,記錄例外並交管理者查核。
  5. 確認頁只向後端讀取結果。若還沒收到可信通知,顯示「付款結果確認中」,不要從網址參數判定成功。

親手試試

模擬:網址帶著 success=true,但後端尚無可信付款結果。維持等待確認。

模擬:簽章有效、交易與金額吻合且確認已付款。後端保存紀錄並更新一次。

模擬:交易已處理。回覆已收到,不再寄信或新增出貨工作。

這是判斷流程示意,不進行真實簽章驗證;實作要依服務商規則在後端完成。

圖 C3-06 同樣看到「成功」二字,可信度取決於後端是否驗證與核對。

這樣對 AI 說

中文就可以
請依選定服務商的官方文件建立付款通知端點,引用使用的文件連結。用官方方式驗證簽章,核對交易識別、訂單、金額、幣別與付款狀態後才更新。以唯一限制和資料庫交易確保重送或同時到達的通知不會重複更新、寄信或出貨;較舊通知不能倒退已確認付款。取消訂單收到成功付款時列為人工處理,不自動忽略或出貨。結果頁向後端查詢,網址參數不能改變狀態。請列出偽造通知、金額不符、重送、延遲、順序不同與付款成功後關閉分頁的檢查方式。

本章驗收清單

不要只驗成功的一次,還要驗沒有權限與重複的一次。

  • 未通過驗證的通知不能更動訂單
  • 金額或幣別不符時不標記已付款
  • 相同通知重送不會重複處理
  • 關閉付款成功頁仍能由後端更新狀態
  • 改網址參數不能把未付款變已付款

這章的相關詞條

詞條頁都有可以動的示範——卡住的時候,去把名詞弄清楚,回來繼續做。

官方參考資料

進度只存在這台瀏覽器,不上傳、不追蹤。