Waffo 与 Anyway 订阅计费
Dashloom Cloud 使用支付渠道托管的结账页,银行卡数据不会经过 Dashloom。浏览器返回成功页面不会发放权益;只有通过验签并完成幂等记录的 Webhook 才能变更 Workspace 套餐。
Cloud Free 是免费套餐且不赠送托管 AI 积分,Agent 默认使用 BYOK。Solo、Studio 和 Agency 不提供试用,每个账期分别发放 5,000、15,000 和 45,000 积分;每次付费结账都按服务端完整月价校验。
服务端价格目录
服务端固定目录为 Solo 9 美元/月、Studio 29 美元/月、Agency 79 美元/月。一次性积分包为 5,000 积分 12 美元、10,000 积分 22 美元、50,000 积分 89 美元。Product ID、付款链接、价格和积分数量均由服务端目录决定,浏览器不能指定。
Waffo 配置项为 WAFFO_MODE、WAFFO_MERCHANT_ID、WAFFO_PRIVATE_KEY、WAFFO_PRODUCT_SOLO/STUDIO/AGENCY,以及三个一次性产品 WAFFO_PRODUCT_CREDITS_5000/10000/50000;Webhook 地址为 /api/billing/webhook/waffo。
Anyway 订阅配置项为 ANYWAY_PAYMENT_LINK_SOLO/STUDIO/AGENCY 和对应的 ANYWAY_PRODUCT_SOLO/STUDIO/AGENCY。积分包另外需要一个已发布产品 ID ANYWAY_PRODUCT_CREDITS,以及三个固定金额、一次性付款链接 ANYWAY_PAYMENT_LINK_CREDITS_5000/10000/50000。所有流程共用仅服务端使用的 ANYWAY_MERCHANT_API_KEY、ANYWAY_WEBHOOK_PUBLIC_KEY 和 Standard Webhooks 地址 /api/billing/webhook/anyway。
订阅积分随已验证的付款账期发放、到期不结转;购买积分在 Waffo order.completed 或 Anyway 权威 order.paid 后写入独立永久余额,不会过期。每次托管模型调用先原子预占积分,成功后按 ceil((inputTokens + 5 × outputTokens) / 1000) 结算,失败则释放预占。订阅积分优先消耗,永久积分只补足差额;BYOK 不消耗 Dashloom 积分。
Waffo Checkout 会在订单元数据中携带服务端生成的 Checkout ID,并只用服务端 Product ID 创建渠道托管的 Session。Waffo 积分到账前会校验签名事件中的 USD 金额与服务端目录一致,refund.succeeded 会幂等撤销对应积分包或付费订阅。订阅退款按 Waffo 权威订单 ID 定位,因此权益回收不依赖首次 Checkout 元数据。Anyway 会跳转到服务端配置的付款链接,并只把不透明的 Checkout ID 作为 merchant_reference;付款链接参数中禁止放密钥或个人信息。跳转不再依赖容易变化的商品读取响应。只有 Merchant API 返回的已付款订单在 Product ID、金额、币种、退款/拒付状态以及月付订阅周期上都与本地 Checkout 和服务端目录一致,系统才会发放权益。
Anyway Webhook 使用配置的 Ed25519 公钥验签,并在异步处理前用 webhook-id 完成持久化原子领取。Webhook 负载只作为变更通知;Worker 必须通过 Merchant API 重新读取权威订单和订阅后才能变更权益。本地以 Anyway subscriptionId 作为订阅主标识,续费通过 subscriptionId 与 originalOrderId 关联,不能假设每次续费都会重复首次订单的 merchant_reference。
Worker 每 15 分钟用渠道权威状态对账 Waffo 与 Anyway 的待完成订阅 Checkout、一次性积分 Checkout 和有效订阅;Anyway 还会重放可恢复 Webhook。Waffo 对账能发现延迟或丢失 Webhook 对应的订阅与积分包成功退款。渠道支持且已报告的退款或拒付会暂停付费权益,直到运营人员完成账单处理;该 fail-closed 策略也适用于部分退款。Merchant API 与对账错误会持久化记录,但不得记录密钥或完整支付信息。每日远端目录检查会核对所有 Waffo 版本与 Anyway 付款链接的商品类型、环境、金额、币种、账期以及发布/启用状态是否符合服务端目录。
运营要求
Waffo 2026-09-06 Webhook 字段变更
在商户后台「Webhook 设置」中明确勾选 subscription.renewed,并保留 subscription.activated、subscription.payment_succeeded、subscription.uncanceled、subscription.updated、subscription.canceling、subscription.canceled、subscription.past_due、order.completed、refund.succeeded。未勾选 renewed 就不会收到续费周期;首次付款发送 activated 与 payment_succeeded,成功续费才发送 renewed。
付款成功事件不再提供 billingPeriod、currentPeriodStart、currentPeriodEnd、orderStatus。处理程序仅记录付款 ID、日期、金额和币种,不更新订阅状态或发放积分。激活和续费事件校验并保存月度周期、更新权益、发放积分;缺少周期字段或暂时无法关联本地结账记录时返回可重试错误。旧生命周期事件仍保存历史,但不会缩短更新的周期,也不会覆盖时间较新的退款状态。
本次无需数据库迁移。历史周期保存在 audit_events,action 为 billing.waffo_subscription_period,target_id 为订单号,metadata_json 包含 eventId、eventType、billingPeriod、currentPeriodStart、currentPeriodEnd。付款记录的 action 为 billing.waffo_payment_succeeded,使用相同订单号,保存事件提供的 paymentId、paymentDate 等信息,不保存买家资料。部分处理后重试可能追加审计记录,导出时按事件 ID 去重。首笔付款通过订单号关联激活周期;续费事件没有付款 ID,历史付款关联还需结合该订单的周期序列和付款日期。
Webhook 按事件类型加业务 eventId 去重,旧格式缺少 eventId 时回退到投递 id。生命周期发放与当前状态对账共用「订单号 + 周期结束日」积分幂等键。现有数据库触发器阻止相同或更旧周期重置已消耗余额,也覆盖旧版本按付款 ID 发放的积分。
订单查询只返回最新周期。定时对账用于恢复当前权益,不将该周期认定为历史付款账期。对于 9 月 6 日至开启 renewed 之间缺失周期的付款,先导出受影响付款,优先使用保留的生命周期事件;确实缺失时,才按 paymentDate 加商品计费周期生成明确标注为「估算」的记录。本项目为月付,按日历月增加一个月,目标月份没有对应日期时取月末。回补前核对重复付款、退款及已发放周期,不把估算历史重新投递为积分发放事件。本次不会自动回补存量付款。
上线顺序:部署处理程序,在 Waffo 对应测试/生产 Webhook 设置中开启新事件,在测试模式验证签名激活与续费事件,检查周期记录、每周期一次发放、重复投递、付款与生命周期乱序及一次成功的 15 分钟对账。代码部署不会自动修改商户后台勾选项。
通用运营要求
Waffo 测试与正式资源必须隔离;Anyway 应优先使用支持测试的付款链接。公开 Worker Origin 确定后再配置两个 Webhook。Waffo 需要创建 12、22、89 美元的三个一次性产品,并订阅 order.completed、refund.succeeded 及代码已实现的订阅生命周期事件。Anyway Webhook 应选择全部 order.* 与 subscription.* 事件。从 https://api.anyway.sh/v1/webhooks/signing-key 获取响应中的 publicKey(whpk_...)并缓存为 ANYWAY_WEBHOOK_PUBLIC_KEY;密钥轮换期间可暂时用逗号同时配置新旧公钥,确认切换后再删除旧值。
正式启用任一渠道前,必须至少观察一次成功的每日目录校验和 15 分钟对账。Anyway 的三个订阅链接必须是 Card / USD 的月度 SUBSCRIPTION,三个积分链接分别是 12、22、89 美元的固定金额 ONE_TIME,并把成功返回地址设为 /dashboard/credits?billing=success。核对 Product ID 和准确价格,发送签名测试事件,并观察至少一次成功对账。自动目录校验不能替代渠道测试模式交易。测试矩阵包括订阅与积分包付款成功/失败、重复投递、续费、续费失败、暂停、周期末取消、无效和过期签名、全额/部分退款、拒付、延迟/乱序、Merchant API 故障以及 Webhook 先于浏览器返回。
取消与退款表单只会创建运营审核请求,不会自动修改支付渠道状态。发票、退款、拒付和账户级对账在支付渠道后台完成。经营条款、税务、退款政策、客服联系方式和渠道审核未完成前,不得开启真实交易。