feat: integrate Stripe payment with subscription plans

Add Stripe payment integration across the project:

- Add @stripe/stripe-js dependency
- Configure Stripe environment variables (secret key, publishable key, webhook secret) for dev, local, and production environments
- Add Product/Price IDs for monthly, quarterly, and annual subscription tiers
- Extend subscription plan data with voiceMinutesPerDay quotas (30/45/60 minutes per tier)
- Update .gitignore to exclude implementation_plan.md
This commit is contained in:
2026-06-16 10:21:02 +08:00
parent 17741320ff
commit 0548a08cbb
25 changed files with 1220 additions and 26 deletions
+19
View File
@@ -28,3 +28,22 @@ AUTH_FACEBOOK_SECRET=004b1a9384b3433e153992e5edcef4ad
# Cloudflare CDNtest / production 部署后刷缓存用)
CF_ZONE_ID=b1b6bfb7795667609c8e7f418af0156b
CF_API_TOKEN=cfut_xyHb70XCw0j8f5Wz5fg5PemUQ2ZHnSpWvmrBvVeK94d3b00f
# ─────────────────────────────
# Stripe 支付(dev 环境 test keys —— **查** https://dashboard.stripe.com/test/apikeys 拿**到**
# ─────────────────────────────
# 服务**端** secret key**仅** Next.js API route **用****不**要**曝**露**给**前**端**
STRIPE_SECRET_KEY=sk_test_replace_with_your_dev_secret_key
# 前**端** publishable keyNEXT_PUBLIC_ 前**缀**才**能**在**前**端**用**
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_replace_with_your_dev_publishable_key
# webhook 签**名**密**钥****从** `stripe listen` 输**出**拿**到****本**地**开**发**用**
STRIPE_WEBHOOK_SECRET=whsec_replace_with_your_stripe_cli_output
# 3 **个**订**阅**套餐**的** Product / Price ID**从** Stripe dashboard **创**建** 3 **个** Product + 3 **个** Price **后**填**
STRIPE_PRODUCT_MONTHLY=prod_replace_monthly
STRIPE_PRICE_MONTHLY=price_replace_monthly
STRIPE_PRODUCT_QUARTERLY=prod_replace_quarterly
STRIPE_PRICE_QUARTERLY=price_replace_quarterly
STRIPE_PRODUCT_ANNUAL=prod_replace_annual
STRIPE_PRICE_ANNUAL=price_replace_annual
+15
View File
@@ -22,3 +22,18 @@ AUTH_FACEBOOK_SECRET=004b1a9384b3433e153992e5edcef4ad
# Cloudflare CDNtest / production 部署后刷缓存用)
CF_ZONE_ID=b1b6bfb7795667609c8e7f418af0156b
CF_API_TOKEN=cfut_xyHb70XCw0j8f5Wz5fg5PemUQ2ZHnSpWvmrBvVeK94d3b00f
# ─────────────────────────────
# Stripe 支付(test 环境 test keys
# ─────────────────────────────
STRIPE_SECRET_KEY=sk_test_replace_with_your_test_secret_key
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_replace_with_your_test_publishable_key
STRIPE_WEBHOOK_SECRET=whsec_replace_with_your_stripe_cli_output
STRIPE_PRODUCT_MONTHLY=prod_replace_monthly
STRIPE_PRICE_MONTHLY=price_replace_monthly
STRIPE_PRODUCT_QUARTERLY=prod_replace_quarterly
STRIPE_PRICE_QUARTERLY=price_replace_quarterly
STRIPE_PRODUCT_ANNUAL=prod_replace_annual
STRIPE_PRICE_ANNUAL=price_replace_annual
+17
View File
@@ -29,3 +29,20 @@ AUTH_FACEBOOK_SECRET=004b1a9384b3433e153992e5edcef4ad
# Cloudflare CDNtest / production 部署后刷缓存用)
CF_ZONE_ID=b1b6bfb7795667609c8e7f418af0156b
CF_API_TOKEN=cfut_xyHb70XCw0j8f5Wz5fg5PemUQ2ZHnSpWvmrBvVeK94d3b00f
# ─────────────────────────────
# Stripe 支付(**生**产**环**境** live keys —— **从** https://dashboard.stripe.com/apikeys 拿**到**
# **不**要** commit 真**实** key 到**版**本**控**制**
# ─────────────────────────────
STRIPE_SECRET_KEY=sk_live_replace_with_your_live_secret_key
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_replace_with_your_live_publishable_key
# webhook 签**名**密**钥****从** Stripe dashboard / Webhooks **端**点**的** "Signing secret" **拿**到**
STRIPE_WEBHOOK_SECRET=whsec_replace_with_your_live_webhook_signing_secret
STRIPE_PRODUCT_MONTHLY=prod_replace_monthly
STRIPE_PRICE_MONTHLY=price_replace_monthly
STRIPE_PRODUCT_QUARTERLY=prod_replace_quarterly
STRIPE_PRICE_QUARTERLY=price_replace_quarterly
STRIPE_PRODUCT_ANNUAL=prod_replace_annual
STRIPE_PRICE_ANNUAL=price_replace_annual