直接答案:Webhook 是對方系統「主動通知你」,輪詢是你「定時去問對方」,冪等性是「同一個請求做幾次,結果都只算一次」。付款成功卻顯示未付、或重複扣款,多半是這三件事沒做好;補做通常 NT$2–6 萬、1–2 週。
一家手搖飲品牌的老闆打電話來:「客人說付款成功,後台卻顯示未付款,店員只好叫客人再付一次,結果被扣兩次。」外包商回答:「Webhook 沒收到,我們沒做輪詢,也沒處理冪等。」老闆聽完更困惑。這三個詞總是一起出現,因為它們合起來決定「錢收了,系統知不知道、會不會算兩次」。
名詞 1:Webhook——外送平台主動推播「餐點已送達」
Webhook 就是對方系統在事情發生時,主動打電話通知你的系統。
類比:你在外送平台點餐,不用一直刷新頁面,平台會主動推播「外送員已取餐」「已送達」。
例子:補習班用線上刷卡收學費,客人付款成功的瞬間,金流商(如綠界或 Stripe 的 Webhook 機制)把「這筆已付款」送到補習班系統,系統自動把報名改成「已繳費」並發 LINE 通知。缺點是:如果你的網站剛好在維護或當機,這通「電話」可能漏接。
名詞 2:輪詢——自己每 10 分鐘打電話問一次
輪詢是你的系統定時主動去問對方「那筆狀態變了沒」。
類比:等包裹時每隔一段時間打給物流問「到了沒」,問太勤對方嫌煩,問太少消息又慢。
例子:餐廳的訂位系統每 10 分鐘向金流商查一次「還沒確認的訂金」,就算 Webhook 漏接,最多 10 分鐘也會補上。它是 Webhook 的保險,但不能取代 Webhook,因為問得太頻繁會被對方限制次數。
名詞 3:冪等性——電梯按鈕按五次,只會來一台
冪等性是「同一個請求不管送幾次,結果都只發生一次」。
類比:電梯按鈕按一次和按五次,電梯都只來一次;不會因為你按得急,來五台電梯。
例子:網路卡頓時,客人在結帳頁按了三次「付款」,或金流商重送同一個 Webhook 兩次。有做冪等的系統,會用唯一的訂單編號或冪等金鑰(Idempotency Key)辨認「這筆處理過了」,只扣一次款、只扣一次庫存、只發一張發票。
三者之間的關係
三者合起來是一套「收得到、補得到、不重複」的機制,缺一個都會出事。
概念圖可以這樣畫:左邊是金流商,右邊是你的訂單系統。上方一條實線箭頭從金流商指向你,標「Webhook:主動通知」;下方一條虛線箭頭從你指向金流商,標「輪詢:定時補查」。兩條箭頭都先進入你系統門口的一道閘門,閘門上寫「冪等檢查:這筆處理過了嗎?」,通過的才更新訂單,重複的直接略過。
對客戶決策的具體影響
這三件事在報價單上常被省略,但補做的成本遠低於出事的成本。
| 項目 | 沒做的後果 | 補做成本(參考) |
|---|---|---|
| Webhook 接收與驗證 | 付款成功但訂單未更新,靠人工對帳 | NT$1–2 萬 |
| 輪詢補查排程 | 漏接的通知永遠補不回來 | NT$0.5–1.5 萬 |
| 冪等處理 | 重複扣款、重複出貨、重複開發票 | NT$1–2.5 萬 |
以每月 3,000 筆訂單、0.5% 出錯來算,每月 15 筆要人工對帳與退款,一年人力與客訴成本常超過補做費用。
該問廠商的 5 個問題
驗收前直接拿這 5 題問外包商,答不出來就要求補做。
- 「金流的付款結果,是用 Webhook 接收嗎?有沒有驗證通知真的來自金流商?」
- 「如果網站當機漏接通知,系統多久會用輪詢補查?」
- 「同一筆 Webhook 送兩次,會不會重複出貨或重複開發票?」
- 「客人連按三次付款,會不會扣三次?用什麼辨識同一筆?」
- 「有沒有一個畫面讓我看到通知失敗、補查成功的紀錄?」
常見問題 FAQ
以下是讀者最常問的 4 個問題,每題第一句就是答案。
Webhook 和 API 有什麼不同?
API 是你去問對方,Webhook 是對方主動通知你。兩者常搭配使用,Webhook 負責即時通知,API 負責查詢與補資料。
有 Webhook 還需要輪詢嗎?
建議要有。Webhook 可能因網站維護或當機漏接,輪詢每 5–15 分鐘補查一次,確保沒有訂單卡在未付款。
重複扣款是金流商的問題嗎?
多半不是。常見原因是自家系統沒做冪等,重複處理同一筆請求;做好冪等後,同一筆只會成立一次。
補做這三項要多久?
通常 1–2 週、NT$2–6 萬,視金流商數量與現有程式結構而定,含測試重送與當機情境。
行動呼籲
擔心自家網站或 App 的付款流程有漏洞?ScriptWalker(台灣 Laravel/Flutter 客製化開發工作室)可以用 30 分鐘免費諮詢,幫你檢查 Webhook、輪詢與冪等是否到位:
- Email:[email protected]
- 電話:0916-224-047
- LINE:@ufv9089p