Creem

Nuxt 模板的 Creem 结账与 Webhook 提供商。

Creem默认提供商。它在 server/payment/providers/creem-provider.ts 中实现 PaymentProvider 接口,并在 NUXT_CREEM_API_KEY 设置时 由工厂注册。

配置

变量用途
NUXT_PUBLIC_PAYMENT_PROVIDER设为 creem(默认)以选择该提供商。
NUXT_CREEM_API_KEY创建结账的服务端密钥(同时决定是否注册)。
NUXT_CREEM_SERVER_IDX选择 Creem 服务器:0 = 正式,1 = 测试。
NUXT_CREEM_WEBHOOK_SECRET校验 webhook 签名的 HMAC 密钥。
NUXT_PUBLIC_CREEM_PRODUCT_PRO_MONTHLY / _PRO_YEARLY / _LIFETIME三个方案的公开 Creem 产品 ID。

环境变量

结账

createPayment 为请求的 productId 构建 Creem 结账,返回 { orderNo, thirdOrderNo, checkoutUrl }。创建路由将浏览器导向 checkoutUrl, 支付后返回 /pay-success?orderId=<orderNo>

Webhook

  • 路径: POST /api/payment/notify/creem
  • 签名: 使用 NUXT_CREEM_WEBHOOK_SECRET 对原始请求体做 HMAC-SHA256,与 creem-signature 请求头比较。无效签名返回 401
  • 已处理事件:
    • checkout.completed —— 将匹配的 payment 行标记为 success
    • 订阅生命周期 —— subscription.activesubscription.paidsubscription.updatesubscription.trialingsubscription.pausedsubscription.past_duesubscription.scheduled_cancelsubscription.canceledsubscription.expired 会将用户的 subscription 行 upsert 到对应的状态、周期与取消时间戳。
    • refund.created —— 将匹配的 payment 行标记为 refunded

本地测试

  • 使用 Creem 测试服务器(NUXT_CREEM_SERVER_IDX=1)与测试产品 ID。
  • 用隧道工具暴露本地 webhook,并在 Creem 中注册 https://<tunnel>/api/payment/notify/creem
  • 有效签名将订单翻转为 success;无效签名返回 401

生产注意事项

  • 设置正式产品 ID 与 NUXT_CREEM_SERVER_IDX=0
  • 增加幂等 —— webhook 可能被多次投递。
  • 在向真实用户收费前于服务端对账金额。

验证

  • 已登录用户可从定价页发起结账;创建一条 payment 行。
  • GET /api/payment/query?orderId=… 返回订单状态。
  • 带有效签名的 Creem webhook 将订单翻转为 success
  • 游客(未登录)结账返回 401 而非 500

On this page