支付
支付系统概览
使用 Creem 的订阅计费和一次性购买。
概述
Wearlo 使用 Creem 进行支付处理,支持周期性订阅和一次性积分包购买。
订阅计划
在 constants/billing.ts 中配置:
| 计划 | 价格 | 积分 |
|---|---|---|
| Starter 月付 | $29/月 | 1,000/月 |
| Starter 年付 | $290/年 | 12,000/年(每月发放 1,000) |
| Pro 月付 | $99/月 | 10,000/月 |
| Pro 年付 | $990/年 | 120,000/年(每月发放 10,000) |
一次性积分包
| 积分包 | 价格 | 积分 |
|---|---|---|
| 200 积分 | $5 | 200 |
支付流程
- 用户点击购买 → 前端调用
/api/payments/creem/checkout - 持久化订单意图 → 服务端先冻结产品、价格和积分,再调用 Creem。200 响应包含支付链接;202 响应需轮询
/api/payments/creem/checkouts/{checkoutId}。 - 用户完成支付 → Creem 发送 webhook 到
/api/payments/creem/webhook - Webhook 收件 → 对原始字节验证 HMAC-SHA256 签名,将加密事件与处理任务提交数据库后再确认收到。
- 资金 Worker → 核对供应商当前对象与规范订单,再同事务提交支付、积分账本、余额、订阅与分期变更。重复投递不会重复授予;通知单独执行。
浏览器成功返回参数不代表已入账。创建结果未知的订单保留供对账,不重复创建。退款、争议和无法证明的历史订单进入审核。
年付订阅分期发放
年付计划不会一次性发放所有积分,而是按月分期:
- 购买年付计划 → 立即发放第一个月积分
- 剩余 11 个月 → 计划存储在
subscriptionCreditSchedule表中 - 定时任务(
/api/cron/subscription-grants)每小时运行,处理到期的积分发放
测试
使用 CREEM_MODE="test"、对应测试产品与 CREEM_API_BASE="https://test-api.creem.io",配置独立的 WARDROBE_PAYMENT_INBOX_KEY(64 位 hex)和 HTTPS 应用 origin。CREEM_SIMULATE=true 会被拒绝。合成供应商测试覆盖故障且不请求真实商户;真实测试模式支付仍需单独完成发布验证。
数据库迁移和配置审核完成后再启动资金 Worker。Webhook 收件本身不会执行积分授予或发送通知。