指南

如何用 Stripe 加入訂閱:計劃、試用期、Webhook 同付款失敗

用 Stripe 加入訂閱,首先喺 Stripe Dashboard 建立一個附有定期價格嘅產品,然後由你嘅伺服器將客戶帶去訂閱模式嘅 Stripe Checkout,並由 Webhook 通知你嘅 App 每次付款成功、失敗、更改或結束。將訂閱狀態儲存喺用戶或帳戶紀錄上,並根據該狀態開通存取權,唔好根據成功頁面決定。加入一個管理帳單按鈕,開啟 Stripe 託管嘅客戶入口網站,客戶就可以更換信用卡、轉換計劃同取消訂閱,而你唔需要自己建立呢啲畫面。

本指南建基於如何為你的 App 加入付款功能,該指南涵蓋一次性 Checkout、測試模式同正式上線。本文集中講定期收費嘅不同之處。Stripe 嘅詳細資料取自其 2026 年 9 月嘅官方文件。

點解訂閱比一次性付款難處理

一次性付款發生喺客戶仍然身處你嘅 App 時。訂閱則會喺客戶離開之後繼續發生:每月續期、信用卡到期、計費週期中途升級,以及於期末生效嘅取消。你嘅 App 只會透過 Webhook 得知呢啲事件。大部分訂閱相關嘅錯誤,都來自將首次付款當作全部故事。

你嘅選擇

做法你要建立嘅嘢適合
付款連結(定期價格)只需要一個連結測試需求;人手處理存取權
Checkout(訂閱模式)+ 客戶入口網站一個伺服器路由、一個 Webhook、一個帳單按鈕大部分 SaaS App 同會員制
Subscriptions API 加自訂付款表格工作量多好多:付款介面、驗證、重試有特殊帳單流程嘅 App
Merchant of Record 供應商與 Checkout 相近希望由供應商處理銷售稅嘅賣家

對大部分 App 來說,Checkout 加客戶入口網站係合適嘅取捨。如果你擔心稅務處理,可以比較 Stripe、Paddle 同 Lemon Squeezy。

先喺 Stripe 規劃定價

喺 Stripe 入面,產品係你賣嘅嘢(「Pro 計劃」),而價格係你收費嘅方式(「每月 $20」、「每年 $200」)。一個產品可以有多個價格。你需要決定:

  • 你提供邊幾個層級,以及每個層級喺你嘅 App 入面開通咩功能
  • 按月、按年,定兩者都提供
  • 會唔會提供試用期,以及需唔需要預先提供信用卡

先喺 Stripe 測試模式建立產品同價格,並記錄其價格 ID;你嘅 App 會引用呢啲 ID。如果你仲未決定定價,可以閱讀如何為 SaaS 產品定價同免費增值 vs 免費試用。

你必須處理嘅訂閱生命週期

Stripe 嘅訂閱概覽列出訂閱可以有嘅狀態。以下幾個同存取權最有關係:

狀態意思是否提供存取權?
trialing試用期中是
active狀態良好是
incomplete首次付款尚未完成;Stripe 會給客戶 23 小時否
incomplete_expired首次付款從未成功否
past_due最近一次付款失敗或未有嘗試付款;之後可能會重試由你決定;好多 App 會給一段短暫寬限期
unpaid重試已完成,發票保持未付,亦不會再嘗試否,Stripe 文件建議撤銷存取權
canceled已結束;無法重新開始否
paused試用期結束時冇付款方式,並已設定為暫停否

將狀態儲存喺你嘅用戶或帳戶紀錄上,並根據該狀態開通存取權。每次收到相關 Webhook 時都要更新。

要處理嘅 Webhook 事件

事件你嘅 App 要做咩
checkout.session.completed將新 Stripe 客戶同訂閱 ID 連結到你嘅用戶
invoice.paid將訂閱標示為 active,並記錄新嘅期間結束日期
invoice.payment_failed通知用戶信用卡失敗,並連結到入口網站
invoice.payment_action_required要求用戶完成信用卡驗證
customer.subscription.updated更新計劃、狀態,以及任何已排定嘅取消
customer.subscription.deleted移除付費存取權
customer.subscription.trial_will_end試用期結束前提醒用戶;Stripe 會喺三日前發送

Stripe Webhook 文件嘅處理規則仍然適用:使用原始內容驗證簽名,儘快回傳 2xx,處理重複同亂序嘅事件,並預期會有重試。什麼是 Webhook 解釋咗基本概念,而付款指南則列出詳細規則。

逐步做法

  1. 喺 Stripe 測試模式建立產品同價格。
  2. 加入機密:私密金鑰、價格 ID,之後再加入 Webhook 簽名金鑰。絕對唔可以放入前端程式碼。
  3. 定價頁面:每個計劃嘅按鈕呼叫你嘅伺服器,由伺服器為已登入用戶建立訂閱模式嘅 Checkout 會話。傳入你嘅用戶 ID,令 Webhook 可以將付款配對到該帳戶。
  4. Webhook 端點:驗證簽名並處理以上事件,每位用戶只更新一筆訂閱紀錄。
  5. 根據已儲存嘅狀態同計劃開通功能,並喺伺服器上為每個受保護操作檢查,唔可以只隱藏按鈕。
  6. 客戶入口網站:喺 Stripe Dashboard 設定(客戶可以轉到邊啲計劃、可唔可以取消),然後加入管理帳單按鈕,由伺服器建立入口網站會話並將客戶導向該處。
  7. 付款失敗:喺 Stripe 帳單設定中,選擇重試行為,以及最後一次重試之後會發生咩事。當狀態為 past_due 時,喺 App 內顯示提示橫幅。
  8. 測試整個生命週期,然後發布並登記正式 Webhook。

俾 AI 生成工具嘅提示詞

用 Stripe 加入訂閱付款。計劃:Starter(價格 ID 放喺 STRIPE_PRICE_STARTER)同 Pro(STRIPE_PRICE_PRO)。定價頁面由伺服器使用 STRIPE_SECRET_KEY 建立訂閱模式嘅 Checkout 會話,並附上已登入用戶嘅 ID。將 Stripe 客戶 ID、訂閱 ID、計劃同狀態儲存喺用戶紀錄上。絕對唔可以將私密金鑰暴露俾瀏覽器。

加入 POST /api/stripe/webhook。使用 STRIPE_WEBHOOK_SECRET 並以原始請求內容驗證簽名。處理 checkout.session.completed、invoice.paid、invoice.payment_failed、customer.subscription.updated、customer.subscription.deleted 同 customer.subscription.trial_will_end。記錄已處理嘅事件 ID,令重複事件會被忽略。用戶狀態要根據 subscription 物件更新,而唔係根據事件送達嘅次序。

喺伺服器上限制 Pro 功能:只有當狀態為 active 或 trialing,而且計劃為 Pro 時先允許使用。當狀態為 past_due 時,顯示「付款失敗,請更新信用卡」橫幅。加入一個管理帳單按鈕,為該用戶開啟 Stripe 客戶入口網站。

升級、降級同按比例計費

客戶轉換計劃時,Stripe 文件指出,更改通常會產生按比例計費(proration):新價格會套用到目前帳單期間嘅剩餘時間。你可以預覽按比例計費,或者將其關閉。如果兩個計劃嘅週期相同,帳單日期會保持不變;由按月轉為按年,帳單日期會改為轉換當日。讓客戶喺入口網站自行更改計劃可以省去你自行編寫呢啲邏輯,但你需要喺入口網站設定中決定容許邊啲轉換。

測試清單

使用 Stripe 測試模式同測試卡,並逐一測試每個狀態:

  • 新訂閱將正確計劃開通俾正確用戶
  • 付款後立即關閉分頁,仍然可以開通存取權(證明 Webhook 有效)
  • 註冊時信用卡被拒,唔會開通任何嘢
  • 續期失敗會令帳戶進入 past_due,並顯示橫幅
  • 喺入口網站更新信用卡後,狀態恢復為 active
  • 升級同降級後,功能正確更改
  • 於期末取消後,存取權會保留到結束日期,然後移除
  • 試用用戶可以使用功能、收到提醒,並正確轉為付費或失去存取權
  • 同一個 Webhook 事件發送兩次,結果冇改變

Stripe 嘅測試時鐘可以模擬時間流逝,令你唔使等一個月就可以測試續期。請查閱 Stripe 目前嘅測試文件,了解如何使用。

常見錯誤

  • **喺成功頁面開通存取權。**客戶可能付咗款,但從來冇到達該頁面。應該使用 Webhook。
  • **只處理首次付款。**續期、失敗同取消之後都會以事件形式到達。
  • **只喺前端檢查計劃狀態。**任何人都可以直接呼叫你嘅 API。
  • **意外令一位用戶擁有多個訂閱。**建立新 Checkout 會話之前,先檢查是否已有訂閱,或者將現有客戶導向入口網站。
  • **首次續期失敗就撤銷存取權。**信用卡失敗通常只是小問題。一段短暫寬限期加上清楚嘅提示,可以保留客戶。
  • **忘記正式環境嘅 Webhook。**測試同正式端點有唔同嘅簽名金鑰。
  • **忽略稅務同退款。**上線之前要決定退款政策,並向會計師查詢你嘅稅務責任。

Mythex 中嘅訂閱

你喺 Mythex 建立嘅 App 會使用你自己嘅 Stripe 帳戶同金鑰;你嘅 App 冇一鍵連接 Stripe 功能。將測試金鑰同價格 ID 加入專案機密,用上面類似嘅提示詞,並喺 Preview 中用 Stripe 測試卡測試。Webhook 需要 App 嘅公開網址,所以要先發布,然後才喺 Stripe 登記端點;轉用正式金鑰之後,亦要再發布一次,令正式版 App 讀取新金鑰。參閱使用 Stripe 收款同喺後端處理 Webhook。至於整個產品中圍繞帳單嘅其他部分,可以參閱如何建立 SaaS MVP。

常見問題

用 Stripe 加入訂閱最簡單嘅方法係咩?

喺 Stripe 後台建立一個附有定期價格嘅產品,將客戶帶去訂閱模式嘅 Stripe Checkout,用 Webhook 處理訂閱事件,並將「管理帳單」按鈕連結到 Stripe 託管嘅客戶入口網站。咁樣你就唔需要自己建立信用卡表格同更改計劃嘅畫面。

訂閱需要用到邊啲 Stripe Webhook 事件?

最少需要:checkout.session.completed,用嚟將新訂閱連結到你嘅用戶;invoice.paid,用嚟確認每次付款成功;invoice.payment_failed,用嚟警告續期失敗;customer.subscription.updated 同 customer.subscription.deleted,用嚟追蹤計劃更改同取消。

訂閱付款失敗時會發生咩事?

根據 Stripe 截至 2026 年 9 月嘅文件,訂閱通常會變成 past_due,而 Stripe 可以根據你嘅設定重試付款。經過最後一次重試之後,你嘅 Dashboard 設定會決定佢係被取消、標示為 unpaid,定係保持 past_due。

我可唔可以提供免費試用,而唔需要客戶先提供信用卡?

可以。Stripe 支援免費試用,其文件亦說明,如果設定咗相關選項,試用期結束時仍然冇付款方式,狀態可以係 paused。預先收集信用卡通常會令註冊人數減少,但付費客戶會較多;你應該按產品需要測試邊種方式最適合。

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 简体中文 繁體中文(台灣)