前置条件
- 一个 Creem 账号(creem.io)。生产模式需要中国公司主体 (营业执照)和 KYC。Sandbox / test 模式不要求。
- 绑定的支付宝和/或微信支付商户号。Creem 注册流程会带你走绑定步骤。
- Postgres 跑起来,schema 已 push。
1. 选定当前 Provider
src/config/site.ts:
currency: 'cny',因为这两条通道天然是
人民币。混其他币种就得加一层换汇。
2. 在 Creem 建商品
Creem dashboard,Products → New product。每个商品有个 ID,下单时作为priceId 传入。Creem 不像 Stripe 把 product 和 price 拆开 —— 一个 product
就是一个价格。
vibestrap 本体需要建一个 promo 商品和一个 standard 商品。
3. 配环境变量
.env.local(变量名严格对齐 src/env.ts):
CREEM_PRICE_* 命名上跟其他 Provider 对齐叫 PRICE,但底层装的是 Creem 的
product ID。
4. 配 webhook
Creem dashboard,Developers → Webhooks → New endpoint:- URL:
https://your-domain.com/api/webhooks/creem - Events(至少订阅):
checkout.completed、payment.succeeded、subscription.created、subscription.updated、subscription.canceled。 - 签名密钥:自己挑一个长随机串,同时贴到这里和环境变量
CREEM_WEBHOOK_SECRET。Creem 用 HMAC-SHA256 签原始 body。
localhost:3000 暴露出去(在国内 cloudflared
通常比 ngrok 快)。
验证
- 在 dashboard 里切到 test 模式。
pnpm dev,打开/pricing,点结账 —— Creem 托管页打开。- 用 Creem 给的测试方式(sandbox 支付宝或微信)支付。
- 看终端 webhook 日志。
- 查数据库:
常见坑
- 生产必须 KYC —— Creem 上线生产商户号需要中国公司主体和 ICP 备案。 Sandbox 不需要,但正式上线得先过 KYC,留几周时间。
- 支付宝 / 微信必须 CNY —— 支付宝和微信支付是人民币原生通道。如果你设
currency: 'usd'又走这两条,Creem 要么直接拒,要么换汇并加价。把siteConfig.payment.currency设成'cny',价格按分计(1 元 = 100 分), 跟 cents 一样的逻辑。 - Customer portal 不接受 returnUrl ——
creem.customers.generateBillingLinks不收returnUrl,用户得通过你 app 的导航条回去。 - Webhook 密钥是你自己填的 —— 跟 Lemon Squeezy 一样,Creem 不替你生成
签名密钥,自己
openssl rand -hex 32。 - 海外基建对国内出口 —— 如果你部署在 Vercel / Cloudflare 但客户在国内,
支付跳转没问题,但服务端那条调
creem.checkouts.create的路径从西方边缘 节点出去会比较慢。考虑把这几条路由部署到亚洲节点。
官方文档
- Creem 文档:creem.io/docs
- API 参考:creem.io/docs/api
- Webhooks 指南:creem.io/docs/webhooks
- 支付宝(上游):docs.open.alipay.com
- 微信支付(上游):pay.weixin.qq.com/docs