MuseMVP 文档
支付

Creem

配置 Creem 网关。

MuseMVP 集成了 Creem 作为支付网关之一,面向独立开发者提供无需美国实体的支付方案。通过统一的 Muse Billing 模块,与 Stripe 共用同一套业务逻辑与数据库表。本文介绍如何配置 Creem 网关并了解其工作原理。

获取 MUSE_CREEM_GATEWAY_API_KEY 密钥

在部署或本地开发前,你需要配置相关密钥。

# Creem API 密钥(以 `creem_` 开头)
MUSE_CREEM_GATEWAY_API_KEY="creem_test_xxx1"
# 环境:sandbox(测试)或 production(生产)
MUSE_CREEM_GATEWAY_ENV="sandbox"

Creem Dashboard 获取 API 密钥。

Creem

密钥安全

MUSE_CREEM_GATEWAY_API_KEY 仅用于服务端,切勿暴露到前端或版本库。

获取 MUSE_CREEM_GATEWAY_WEBHOOK_SECRET 密钥

# Webhook 签名校验密钥(以 `whsec_` 开头)
MUSE_CREEM_GATEWAY_WEBHOOK_SECRET="whsec_xxx2"

Creem

Creem

在 Creem Dashboard 创建 Webhook,将回调地址设为:

https://example.com/api/muse-billing/notify/muse_creem

选择需要监听的事件类型(或全部):

  • checkout.completed
  • subscription.active
  • subscription.canceled
  • subscription.updated

Creem

得到 Webhook 密钥后填入 MUSE_CREEM_GATEWAY_WEBHOOK_SECRET

密钥安全

MUSE_CREEM_GATEWAY_WEBHOOK_SECRET 仅用于服务端,切勿暴露到前端或版本库。

创建产品并得到产品 ID

产品与产品 ID 默认来自 src/config/index.tsconfig.payments.productCatalog.*.gatewayProductIds.muse_creem,也可通过以下环境变量覆盖:

# 订阅 月付价格 ID
NEXT_PUBLIC_MUSE_CREEM_PRICE_PRO_MONTHLY_ID="prod_xxx1"
# 订阅 年付价格 ID
NEXT_PUBLIC_MUSE_CREEM_PRICE_PRO_YEARLY_ID="prod_xxx2"
# 终身一次性价格 ID
NEXT_PUBLIC_MUSE_CREEM_PRICE_LIFETIME_ID="prod_xxx3"

Creem

在 Creem Dashboard 创建对应产品后,将产品 ID 填入上述环境变量或 src/config/index.ts 中。

本地开发测试

下载 Ngrok

Ngrok下载(https://dashboard.ngrok.com/get-started/setup/windows)是反向代理工具,用于将本地开发服务器暴露到公网。

Ngrok

运行

ngrok http 3000

Ngrok

回调域名

将上述终端域名填向上述 Webhook 中的回调地址

切换到沙盒环境

确保 MUSE_CREEM_GATEWAY_ENV 设为 sandbox,并使用 Creem 提供的测试模式在 Dashboard 中进行支付测试。

测试模式

Creem 沙盒环境下的支付不会产生真实扣款,可安全用于本地调试订阅及一次性购买流程。

工作原理解析

了解 Muse Billing 是如何将 Creem 融入系统中的。

集成文件分布

src/modules/muse-billing/lib/gateways/muse-creem-gateway.ts
src/modules/muse-billing/lib/orchestrator.ts
src/backend/api/routes/muse-billing/router.ts
文件职责
muse-creem-gateway.tsCreem 网关实现:launch、Webhook 解析、合约同步。
orchestrator.ts计费编排层:launch、customer-hub、Webhook 分发。
router.tsAPI 路由:暴露 /api/muse-billing/* 接口。

核心工作流

针对付款和获取 Customer Hub 的动作流程如下:

前端调用 POST /api/muse-billing/launch,传入 productIdgatewayId(可选,默认由 orchestrator 选择)等参数。

服务端从 config.payments.productCatalog 映射找到相关的 Creem 价格 ID。

Creem 返回 launchUrllaunchSessionId,前端跳转至 Creem 托管的结账页。

用户完成支付后,Creem 发送 Webhook,服务端校验签名并同步合约生命周期和访问区间到数据库。

当用户需要进入平台后,通过调用 POST /api/muse-billing/customer-hub 取得跳转 Creem 客户门户的链接来管理订阅或下载收据等。

相关文档