跳轉到內容
supastack
瀏覽檔案

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /zh-tw/docs/web/stripe-payments.md (or send Accept: text/markdown).

新增 Stripe 支付

建立免費的 Stripe 賬戶、帶週期價格的產品、金鑰,以及結賬後發放權益的簽名 webhook。

詢問本指南
開啟方式

初學者演練

前提條件:應用在本地執行(5 分鐘啟動)以及已遷移、能存真實賬戶的資料庫(設定資料庫)。你需要一個郵箱來註冊 Stripe 賬戶——不需要卡,也不會扣款。本指南的一切都在測試模式下進行:假錢、測試卡號、上線前無限重試。

快速術語:測試模式是 Stripe 的沙盒——儀錶板上的 Test mode 開關在你關掉之前讓每個金鑰、產品和付款都保持假的。金鑰(sk_test_…)是伺服器對 Stripe 的密碼。帶價格的產品是客戶購買的東西;price id(price_…)在程式碼中指名它。Webhook 是付款成功或訂閱變更時 Stripe 對伺服器的回撥;簽名金鑰(whsec_…)證明呼叫確實來自 Stripe。

你要建立的:一個 Stripe 賬戶、一個帶週期價格的產品、一個 API 金鑰和一個 webhook 端點——大約二十分鐘。Stripe 自己託管結賬頁;套件在服務端建立會話並跳轉,所以不需要可公開的瀏覽器金鑰。

記住邊界:本指南只銷售 Web 訂閱。iOS/Android 應用內購買必須走 Apple 和 Google 的計費——絕不能走 Stripe Checkout——這就是移動端用 RevenueCat 的原因。

建立 Stripe 賬戶

1. 開啟 stripe.com → Start now,用你的郵箱註冊。

2. 引導流程會問你的業務情況——測試模式下每個問題都可以跳過,照樣使用完整沙盒;只在準備收真實付款前完成啟用。

預期結果:進入儀錶板,頂欄可見 Test mode 開關。下面的一切都保持它開啟——正式金鑰稍後放進生產金鑰儲存,絕不放進筆記本上的 env 檔案。

複製 API 金鑰

1. 在儀錶板開啟 Developers → API keys。

2. 你會看到兩個測試金鑰:Publishable key pk_test_… 和被打碼的 Secret key。點選金鑰旁的 Reveal test key,複製 sk_test_… 值。

套件只需要金鑰:結賬會話在服務端建立,使用者被跳轉到 Stripe 託管的頁面,所以可公開金鑰不會進 env 變數。你以後做的產品若引入 Stripe.js,才會在客戶端用到可公開金鑰;套件的計費流程不用它。

sk_test_… 是沙盒賬戶的完整憑據:它放在 apps/web/.env.local 或金鑰儲存中,絕不進 NEXT_PUBLIC_/EXPO_PUBLIC_ 變數,也絕不進 Git。

建立產品和價格

1. 開啟 Product catalog → Add product。

2. 用你的方案命名——Pro 與套件自帶的方案一致——給出價格並選擇 Recurring(如每月):套件的結賬建立訂閱模式會話,需要週期價格而不是一次性價格。

3. 儲存,開啟產品,複製 price id——以 price_… 開頭(不是 prod_…,那是產品 ID)。

自帶的 pro 方案已經顯示 Monthly/Yearly 切換:月付用 STRIPE_PRICE_ID 結賬,年付選項需要 STRIPE_PRICE_ID_PRO_YEARLY 中的第二個週期價格——沒有它年付結賬會以 price-unconfigured 失敗。方案名、金額以及購買授予什麼,都在 apps/web/src/product-plans.ts 中修改——Stripe 管錢的一側,方案檔案管權益的一側。

新增 webhook 端點

webhook 才是真正授予訪問權的東西:套件只在簽名的 Stripe 事件到達後才翻轉權益,所以僅靠結賬跳轉什麼也證明不了。

1. 開啟 Developers → Webhooks → Add endpoint。

2. Endpoint URL:你的公開 URL 加 /api/billing/webhook——如 https://yourdomain.com/api/billing/webhook。其他計費提供商在該目錄下各有自己的路徑;Stripe 的接收器在根部。

3. 在 Select events 中選擇套件處理的事件:checkout.session.completed、checkout.session.async_payment_succeeded、checkout.session.async_payment_failed、invoice.paid、invoice.payment_failed、customer.subscription.created、customer.subscription.updated 和 customer.subscription.deleted。

4. 建立端點,開啟它的頁面,在 Signing secret 下點選 Reveal,複製 whsec_… 值——每個端點有自己的金鑰。

本地開發收不到 Stripe 的伺服器,所以改用 Stripe CLI:先 stripe login 一次,然後在第二個終端執行 stripe listen --forward-to localhost:3000/api/billing/webhook。它會列印一個臨時 whsec_…——stripe listen 執行期間,.env.local 裡放的是這個值,而不是儀錶板上的值。

把值加入應用

在 apps/web/.env.local 中設定下面幾行。BILLING_PROVIDER=stripe 選擇介面卡;其餘三個分別是金鑰、價格和簽名金鑰。缺少任何一個就啟用提供商會讓啟動失敗並指出變數名。

三個 STRIPE_* 值都僅限服務端——絕不 NEXT_PUBLIC_/EXPO_PUBLIC_,絕不提交;生產環境通過託管方的金鑰管理器提供(部署指南介紹 Secret Manager)。編輯後重啟開發伺服器。

# apps/web/.env.local
BILLING_PROVIDER=stripe
STRIPE_SECRET_KEY=sk_test_…
STRIPE_PRICE_ID=price_…
STRIPE_WEBHOOK_SECRET=whsec_…   # `stripe listen` value locally; endpoint signing secret in production
# STRIPE_PRICE_ID_PRO_YEARLY=price_…   # required for the shipped Yearly toggle

驗證與排錯

啟動 stripe listen --forward-to localhost:3000/api/billing/webhook 並保持執行,重啟開發伺服器,然後開啟 /billing,選擇 Pro 方案,用測試卡 4242 4242 4242 4242、未來的有效期和任意 CVC 完成 Stripe 託管的結賬。

預期結果:應用回到 /billing?checkout=success,工作區權益翻轉為啟用——listen 終端記錄了送達的事件,儀錶板的 Developers → Webhooks → 你的端點顯示綠色送達。

想不點結賬就測試接收器,stripe trigger checkout.session.completed 會通過 listen 轉發器發一個合成事件。

常見失敗:每次送達都 400 表示簽名金鑰與該端點不匹配——為正確的端點重新複製 whsec_… 並更新 env;毫無動靜表示 BILLING_PROVIDER 仍是 local;測試配置裡混進 sk_live_ 金鑰表示複製了錯誤模式的金鑰——測試與正式嚴格分開。

套件也為 Lemon Squeezy、Creem、Polar、Whop、Paddle、Dodo 和 PayPal 提供同樣的單合同介面卡——流程相同,只是控制台和 env 名不同——而移動端購買始終走 RevenueCat,不走 Stripe。

常見問題

14 個問題

supastack 是什麼?

supastack 是用於構建 AI 驅動 SaaS 產品的模組化基礎。它把通用基礎設施整合在一起,讓你專注於產品專屬的功能。

它支援 Web 和移動端嗎?

支援。supastack 包含 Next.js 與 Expo 應用,作為 Web 與移動端體驗的起點。

包含哪些認證方式?

Better Auth 覆蓋郵箱/密碼、OTP 與社交登入。個人工作區隨賬戶一起開通,產品記錄從第一天起就有邊界。

AI 是如何支援的?

supastack 包含可配置的多供應商 AI、用量追蹤、預算,以及加密的自帶金鑰(BYOK)支援。

訂閱如何處理?

對於基於該套件構建的產品,Stripe 計費、訂閱與許可權構成付費訪問的基礎。供應商金鑰僅存於服務端。

我的產品專屬程式碼放在哪裡?

產品專屬功能保留在獨立的程式碼庫中,產品通過配置接入 supastack 的基礎模組。

supastack 如何定價?

套件為一次性購買、終身更新:單棧 249 美元(Next.js(Web)、Expo(iOS 與 Android)、Tauri(macOS 與 Windows 桌面)倉庫任選其一),雙棧 398 美元(任選兩個倉庫),或完整套裝 399 美元(全部三個倉庫與完整 monorepo),每個額外開發者席位 75 美元。套件本身沒有訂閱。本站結賬後通過郵件傳送許可證金鑰,倉庫訪問通過 GitHub 邀請授予。

工作區如何界定我的資料?

使用者記錄按 workspaceId 劃定邊界。身份、許可權、AI 用量、計費事件與審計條目都留在個人工作區邊界內。

後臺任務如何工作?

Trigger.dev 是明確的任務執行時。JobRunner 契約只承諾 enqueue、status 與 cancel——工作流語義保持 Trigger.dev 專有且顯式。

郵件與營銷觸達有何不同?

事務性郵件覆蓋產品工作流,如任務完成通知。冷觸達與營銷活動屬於產品自身的範疇,不在本套件的郵件模組內。

移動端購買如何運作?

移動端已支援 RevenueCat 原生購買和恢復購買,訪問許可權由服務端驗證。釋出前需配置商店賬戶並完成裝置測試。Web 計費保持獨立。

AI 供應商金鑰存放在哪裡?

自帶金鑰憑證經過加密且僅存於服務端。金鑰在日誌中被脫敏;用量與預算在工作區級別保持可見。

結賬支援哪些付款方式?

Stripe 託管結賬接受銀行卡,在 Stripe 賬戶啟用後還可提供支付寶與微信支付——方便中國買家。錢包授權為非同步確認,付款完成後許可證頁面會立即更新。

我能申請退款嗎?

獲得程式碼倉庫訪問許可權後,supastack 將永久歸你所有,因此無法退款。但請放心,你將獲得包含終身更新的完整原始碼,可為你自己或客戶構建併發布無限數量的產品。你只需注意不能轉賣程式碼,也不能將倉庫作為啟動模板二次分發。唯一的例外是上線返現——上線一款用 supastack 打造的真實產品並公開分享,在購買後 60 天內達到 5,000 次自然瀏覽或 50 個自然按讚,即可退還已付款項的 50%;詳見條款。

TW
主題