指南

如何為你的 App 加入付款功能:結帳、訂閱同 Webhook

喺你嘅 App 加入付款功能,最簡單嘅方法係用 Stripe:如果你只需要一個「購買」按鈕,並且可以人手處理訂單,就用付款連結;如果你嘅 App 需要知道邊個付咗款,並自動作出反應,就用 Stripe Checkout;如果係定期收費,就用訂閱模式嘅 Checkout 加 Stripe 客戶入口網站。除咗最簡單嘅情況之外,你都需要 Webhook,即係付款成功時 Stripe 會呼叫嘅伺服器端點。喺改用正式金鑰之前,應該用 Stripe 嘅測試金鑰同測試卡號,把所有功能完整測試一次。

本指南會解釋每個選項、大部分教學都會略過嘅 Webhook 部分,以及正式收錢之前要檢查嘅事項。Stripe 嘅資料取自其 2026 年 9 月嘅官方文件。

點解要用付款供應商

唔好喺你自己嘅表格入面收集卡號。處理原始卡資料會令你要符合 PCI DSS(信用卡行業嘅安全標準),而且風險好高。Stripe 之類嘅付款供應商會託管付款表格、儲存卡資料、處理銀行驗證,並將結果通知你嘅 App。你嘅 App 只會知道「客戶 X 已為 Y 付款」。

本指南採用 Stripe,因為佢被廣泛使用、文件完善,亦得到大部分 AI App 生成工具支援。市面上亦有其他供應商,有啲以「Merchant of Record」身份運作,會代你處理銷售稅;如果稅務合規令你擔心,呢種模式值得比較。

用 Stripe 收款嘅三種方式

選項需要寫程式你嘅 App 會知道邊個付咗款?最適合
付款連結唔需要只有加咗 Webhook 先會知道銷售少量固定產品、收取捐款、測試市場需求
Checkout(一次性)需要伺服器程式碼建立會話會,透過 Webhook商店、付費下載、一次性購買
Checkout(訂閱)需要伺服器程式碼加 Webhook 處理會,透過 WebhookSaaS、會員制、任何定期收費嘅服務

付款連結

付款連結係 Stripe 託管嘅付款頁面,你可以喺 Stripe 後台建立,唔需要寫程式。你會得到一個網址,可以放喺 App 嘅按鈕後面、用電郵分享,或者顯示做 QR code。Stripe 文件指出,付款連結可以銷售產品、訂閱,或者收取捐款;你可以讓客戶自行選擇付款金額,或者限制購買數量。

不過有一個限制:你嘅 App 唔會自動知道某位已登入嘅用戶付過款。對於捐款頁面,或者人手根據 Stripe 電郵通知處理訂單嘅小型商店,呢樣就足夠。但如果要做「付款解鎖 Pro 功能」,就唔夠。

Stripe Checkout

Checkout 係你嘅伺服器按需要為某次特定購買而建立嘅付款頁面。你嘅伺服器告訴 Stripe 買緊乜嘢(以及可選擇指定邊位客戶購買),Stripe 會回傳一個網址,然後你將客戶帶去嗰度。Stripe 文件表示,Checkout 同時支援一次性付款同訂閱付款,可以係完全由 Stripe 託管嘅頁面、嵌入你網站嘅頁面,或者嵌入式表格。

流程如下:

  1. 客戶喺你嘅 App 撳「購買」。
  2. 你嘅伺服器使用私密金鑰建立 Checkout 會話,並包含一個 ID,將該會話連結到你嘅用戶或訂單。
  3. 客戶被轉去 Stripe 並完成付款。
  4. Stripe 將客戶帶返回你嘅成功頁面。
  5. Stripe 向你嘅 Webhook 發送 checkout.session.completed 事件,然後你嘅伺服器將訂單標示為已付款,或者開通存取權。

第 2 步必須喺伺服器進行,因為它要用到你嘅私密金鑰。呢個就係 Checkout 需要後端嘅主要原因。

訂閱

訂閱會使用訂閱模式嘅 Checkout,配合你喺 Stripe 設定好嘅定期價格。首次付款嘅流程與上述相同。之後嘅續期、信用卡失敗、升級同取消,都會隨時間發生,而且好多時客戶根本唔喺你嘅 App 入面,所以你嘅 App 只會透過 Webhook 得知呢啲事件。

如果要讓客戶自行管理訂閱,Stripe 提供一個託管嘅客戶入口網站。根據 Stripe 文件,客戶可以喺度更新付款方式同帳單資料、更改或取消訂閱,以及查看同下載發票。你喺 Stripe 後台設定好,然後加入一個「管理帳單」按鈕,將客戶帶去該入口網站。咁樣你就唔需要自己開發呢啲畫面。

Webhook:唔可以跳過嘅部分

Webhook 係 Stripe 喺某件事發生時發送去你伺服器嘅 HTTP 請求。(一般概念可參閱什麼是 Webhook。)Stripe 嘅訂單履行指南講得好清楚:你唔可以只依賴成功頁面去履行訂單,因為客戶可能付咗款,但喺該頁面載入之前已經斷線。對於訂閱同延遲付款方式,Webhook 係必需嘅。

值得處理嘅事件

事件代表咩意思你嘅 App 要做咩
checkout.session.completedCheckout 已完成將訂單標示為已付款,或者開始提供存取權
checkout.session.async_payment_succeeded延遲付款方式(例如銀行扣款)之後成功即時履行訂單
checkout.session.async_payment_failed該延遲付款失敗通知客戶;唔好履行訂單
invoice.paid訂閱付款成功,包括續期延長存取權
invoice.payment_failed續期失敗警告用戶;Stripe 可能會重試
customer.subscription.updated計劃已更改,或已排定取消更新用戶嘅計劃
customer.subscription.deleted訂閱已結束移除付費存取權

正確 Webhook 處理程式嘅規則

以下內容直接來自 Stripe 嘅 Webhook 文件,而 AI 生成嘅處理程式有時會漏掉其中一項:

  • 驗證簽名。 每個事件都包含一個 Stripe-Signature 標頭。你嘅處理程式會用端點嘅簽名金鑰(以 whsec_ 開頭)檢查它。冇咗呢一步,任何人都可以向你嘅伺服器發送假冒嘅「付款成功」訊息。
  • 使用原始請求內容。 如果你嘅框架喺此之前解析或修改咗內容,簽名檢查就會失敗。
  • 快速回傳 2xx 回應,然後再做較慢嘅工作。逾時會被視為失敗。
  • 處理重複事件。 Stripe 可能會多次送達同一事件。記錄已處理嘅事件 ID,或者令履行訂單即使執行兩次都安全。
  • 唔好假設次序。 Stripe 唔保證事件會按發生次序送達。
  • 預期會有重試。 正式模式下,Stripe 會最多重試失敗嘅送達三日,所以短暫嘅服務中斷唔會令付款遺失,但你嘅處理程式必須應付遲到嘅事件。

Webhook 需要一個公開嘅 HTTPS 地址,所以通常只有你嘅 App 發布之後才會運作(Stripe CLI 可以將事件轉送到開發者嘅本機)。

涵蓋整個流程嘅提示詞

用 Stripe Checkout 為「Pro 套件」加入一次性購買(價格 ID 放喺 STRIPE_PRICE_ID)。喺伺服器上使用機密中嘅 STRIPE_SECRET_KEY 建立 Checkout 會話,並將已登入用戶嘅 ID 放入會話。加入 POST /api/stripe/webhook 端點,使用 STRIPE_WEBHOOK_SECRET 並以原始請求內容驗證 Stripe 簽名,處理 checkout.session.completed,並將該用戶標示為已擁有 Pro 套件。如果同一事件被送達兩次,都要保持安全。加入成功及取消頁面。私密金鑰絕對唔可以暴露俾瀏覽器。

如果需要訂閱,再加上:「使用 STRIPE_PRICE_ID 嘅訂閱模式。處理 invoice.paid、invoice.payment_failed、customer.subscription.updated 同 customer.subscription.deleted。加入一個「管理帳單」按鈕,開啟 Stripe 客戶入口網站。」

測試模式

Stripe 有獨立嘅沙盒(測試)同正式環境,各自有獨立金鑰。沙盒金鑰以 pk_test_、sk_test_ 或 rk_test_ 開頭;正式金鑰以 pk_live_、sk_live_ 或 rk_live_ 開頭。測試交易唔會轉移金錢。

Stripe 測試文件中有用嘅測試卡(有效日期可以填任何未來日期,CVC 填任何三位數字):

卡號結果
4242 4242 4242 4242付款成功
4000 0000 0000 0002卡被拒絕
4000 0000 0000 3220需要 3D Secure 驗證,然後成功

至少要測試以下項目:

  • 成功付款後,正確用戶獲得正確嘅功能
  • 卡被拒絕時,顯示清楚嘅訊息,而且唔會解鎖任何嘢
  • 付款後即時關閉瀏覽器分頁,仍然會獲得存取權(呢個證明 Webhook 有效,而唔只係成功頁面)
  • 喺 Stripe 頁面取消付款,會返回你嘅 App,並且冇收取任何費用
  • 訂閱方面:喺客戶入口網站取消,並確認存取權會喺應該結束嘅時候結束

正式上線

  1. 啟用你嘅 Stripe 帳戶,填寫商業同銀行資料。
  2. 喺你嘅 App 機密入面換成正式金鑰。 Stripe 建議使用受限金鑰,只授予你整合所需嘅權限,而唔係使用無限制嘅私密金鑰。
  3. 建立正式 Webhook 端點,指向你已發布嘅 App。它有自己嘅簽名金鑰,唔同於測試金鑰,所以要更新。
  4. 喺正式模式重新建立產品同價格;測試模式嘅 ID 喺正式模式並不存在。
  5. 進行一次真實嘅小額購買,然後退款。

所有金鑰都要放喺專案機密入面,絕對唔可以放喺程式碼或聊天入面。我哋嘅安全檢查清單會更詳細講解金鑰同 Webhook 驗證。

稅務、退款同文件工作

收款會帶來一些程式碼解決唔到嘅責任。以下並非稅務意見,請向會計師查詢。

  • 銷售稅、增值稅同商品及服務稅。 視乎你同客戶所在地,你可能需要登記、收稅同申報。Stripe Tax 可以喺結帳時計算並收取稅款,監察你嘅銷售可能產生嘅責任,並協助登記同申報,但責任始終在你身上。Merchant of Record 供應商係另一個選擇,會代你承擔更多呢類工作。
  • 退款同爭議。 上線之前先決定退款政策,並放喺你嘅網站上。爭議(拒付)係會發生嘅,要保留購買同交付嘅紀錄。
  • 收據同發票。 Stripe 可以用電郵發送收據;商業用途可能需要正式發票。
  • 費用。 每間供應商都會按交易收費。請查閱供應商目前嘅定價頁面,而唔好只依賴文章中嘅數字。

邊種設定適合你嘅 App

  • **捐款或少量產品:**付款連結。參閱如何建立非牟利捐款網站。
  • **有購物車嘅商店:**附有購買項目嘅 Checkout 加 Webhook。參閱如何建立網上商店。
  • **SaaS 或會員制:**訂閱模式嘅 Checkout、Webhook 同客戶入口網站。參閱如何建立 SaaS MVP同如何為 SaaS 產品定價。
  • **向賣家付款嘅市集:**需要另一套受更多規管嘅設定(Stripe Connect 或類似方案)。要另外規劃。

喺 Mythex 加入付款功能

喺 Mythex 建立嘅 App 收款,使用的是你自己嘅 Stripe 帳戶同金鑰;你嘅 App 冇一鍵「連接 Stripe」功能。一般流程如下:

  1. 取得 Stripe 測試金鑰。
  2. 將 STRIPE_SECRET_KEY(以及之後嘅 Webhook 機密)加入專案機密,可透過 /secrets、專案設定,或者 Agent 需要金鑰時顯示嘅機密卡片。
  3. 用類似上面嘅提示詞,要求 Agent 加入 Checkout。
  4. 喺 Preview 用測試卡測試。登記 Webhook 之前要先發布,因為佢需要你嘅公開網址。
  5. 換成正式金鑰之後,再發布一次,令正式版 App 讀取新金鑰。

文件中可參閱使用 Stripe 收款同喺後端處理 Webhook。

常見問題

喺 App 入面收款最簡單嘅方法係咩?

Stripe 付款連結唔需要寫程式:你喺 Stripe 後台建立一個連結,然後由你嘅 App 連到佢就可以。如果你嘅 App 需要知道邊個付咗款,並自動解鎖某啲功能,就應該改用 Stripe Checkout 加 Webhook。

收款一定要用 Webhook 嗎?

如果你嘅 App 需要因應付款作出反應,例如解鎖帳戶、標示訂單已付款,或者處理續期,就一定要。Stripe 文件指出,你唔可以只依賴成功頁面,因為客戶可能付咗款,但從來冇到達該頁面。訂閱亦一定需要 Webhook。

點樣喺唔用真錢嘅情況下測試付款?

使用 Stripe 嘅沙盒(測試)API 金鑰同測試卡號,例如 4242 4242 4242 4242,有效日期可以填任何未來日期,CVC 填任何三位數字。測試交易唔會轉移真實金錢。

Stripe 會幫我處理銷售稅同增值稅嗎?

Stripe Tax 可以喺結帳時計算並收取稅款,亦會監察你可能需要喺邊度登記,但你仍然要對自己嘅稅務責任負責。請向會計師查詢你嘅情況。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)