支付系统文档索引
NEXTY.DEV 的支付系统同时支持 Stripe、Creem、PayPal 三家渠道,覆盖订阅、一次性购买、积分账本、团队共享池、退款与对账。
本章按「由面到点」组织:先看懂整体,再深入各个模块。
文档结构
-
- 一条链路看懂全貌
- 五条设计原则
- 数据库表与代码地图
- 个人与团队两种计费主体
- 三家渠道的能力差异
-
- 为什么定价写在代码里
- 订阅 / 积分包 / 团队套餐怎么写
- 字段参考与渠道侧引用
- 三语文案、促销码、上下架铁律
-
- 从点击到积分到账的完整链路
- 结账守卫的顺序与理由
- 成功页与 webhook 的双保险
- 拦截码速查
-
- 三层结构与签名校验
- 三家渠道的事件映射
- 幂等性、状态归一化、错误处理
- 重复订阅结算与丢失 webhook 的补救
-
- 双桶模型与只追加账本
- 年付订阅的月度定投
- 把业务功能接进积分系统
- 团队共享池、注册赠送、管理员操作
-
- 订单数据结构与查询
- 退款:为什么只调 API 不写本地状态
- 自助门户与优惠券控制台
- 用户端与管理端页面一览
-
- Stripe Coupon + Promotion Code 数据模型
- 码创建后不可改,以及由此塑造的 UI
- 创建表单、适用范围的翻译路径
- 自动应用与列表扫描上限
-
- 配置 Stripe 变更入口
- 周期内变更的积分差额算法
- 防刷设计与跨周期重锚
快速开始
第一次接入
- 读支付系统概述,建立整体认知
- 按 Stripe 集成(或 PayPal 集成)在渠道侧建好产品
- 按定价配置编辑
config/pricing.ts,或直接跑pnpm stripe:bootstrap --write - 配好 webhook 地址和
CRON_SECRET(见定时任务) - 用测试卡跑通一笔,按支付流程末尾的清单验证
按需求查找
| 我想…… | 看这里 |
|---|---|
| 改价格、加套餐、做促销 | 定价配置 |
| 让某个功能扣积分 | 积分系统 |
| 排查支付没到账 | Webhook 处理 |
| 给用户退款 | 订单与订阅管理 |
| 做优惠券、促销码 | 优惠券控制台 |
| 支持用户升降级套餐 | 订阅变更 |
| 理解整体架构 | 支付系统概述 |
环境变量
完整清单见环境变量。支付相关的部分:
Stripe
STRIPE_SECRET_KEY=sk_...
STRIPE_PUBLISHABLE_KEY=pk_...
STRIPE_WEBHOOK_SECRET=whsec_...
# 可选:refund,email | refund | email | 留空
STRIPE_RADAR_EARLY_FRAUD_WARNING_TYPE=refund,emailCreem
CREEM_API_KEY=your_api_key
CREEM_WEBHOOK_SECRET=your_webhook_secret
CREEM_API_BASE_URL=https://api.creem.io/v1 # 可选PayPal
NEXT_PUBLIC_ENABLE_PAYPAL=true
NEXT_PUBLIC_PAYPAL_CLIENT_ID=your_client_id
NEXT_PUBLIC_PAYPAL_ENVIRONMENT=sandbox # sandbox | live
PAYPAL_CLIENT_SECRET=your_client_secret
PAYPAL_WEBHOOK_ID=your_webhook_id定时任务
# /api/cron/credits 的鉴权密钥。启用订阅或积分功能时必须配置
CRON_SECRET=your_cron_secret其他
NEXT_PUBLIC_DEFAULT_CURRENCY=USD
NEXT_PUBLIC_SITE_URL=https://yourdomain.com
[email protected]常见问题
Q: 支持哪些支付渠道?
Stripe、Creem、PayPal 三家。每个套餐由 config/pricing.ts 里的 provider 字段决定走哪家,三家可以同时启用。
Q: 怎么改定价?后台在哪?
v4.0.0 起没有后台定价管理页面了。定价写在 config/pricing.ts,改完部署即可。见定价配置。
Q: 定时任务是必须的吗?
只要卖订阅或用积分,就是必须的。年付套餐的月度定投、丢失 webhook 的对账、PayPal 挂起捕获的推进都靠它。见定时任务。
Q: 积分系统怎么工作?
两个桶:订阅积分(每次发放重置、订阅结束清零)和购买积分(永不过期),消费优先扣订阅桶。所有变动经账本,只追加不修改。见积分系统。
Q: 用户能自己管理订阅吗?
能。/dashboard/billing 的「管理订阅」按钮会按订阅的渠道跳转到对应的自助门户。PayPal 没有托管门户,跳转到 PayPal 的自动付款页。
Q: 怎么测试?
三家都用测试/沙盒模式,本地转发 webhook。详见支付流程的测试一节。
支付系统
NEXTY.DEV 支付系统的整体架构和核心概念介绍
定价配置
如何在 config/pricing.ts 里定义套餐、接入三家支付渠道、编写三语文案与配置促销
支付流程
从用户点击购买到积分到账的完整流程,包括结账守卫、三家渠道的分发、双保险履约与拦截码处理
Webhook 处理机制
Stripe、Creem、PayPal 三家 Webhook 的签名校验、事件映射、履约核心与错误处理
积分系统
双桶模型、只追加账本、年付定投、消费与退回,以及如何把业务功能接进积分系统
订单和订阅管理
订单查询、退款、订阅自助门户、优惠券控制台,以及用户端与管理端的各个页面
优惠券
基于 Stripe Coupon + Promotion Code 的优惠券管理:数据模型、不可改约束、创建表单、自动应用与列表扫描上限
订阅变更
配置 Stripe 变更订阅入口,以及模板内置的周期内套餐变更如何计算积分差额、如何防止刷积分、跨周期变更如何重锚年付定投