SuperAPI AI 工具集

dodo-best-practices

编程与开发

查看项目

更新于 10-15 21:11

技能介绍

用途:本技能面向刚开始接入 Dodo Payments 的开发者,帮助理解其架构、安装并初始化 SDK、区分测试与生产环境,并掌握规范的支付流程。

主要能力:Dodo Payments 是 Merchant of Record(记录商户),即每笔交易的法律卖方,负责各司法辖区的销售税登记与计算、向税务机关缴税,以及卡组织争议与拒付处理。开发者无需自建税务或争议系统,只需创建结账会话、监听 Webhook,并在支付成功后授予访问权限。

环境与密钥:仅有两个基础 URL:生产 https://live.dodopayments.com,测试 https://test.dodopayments.com;api.dodopayments.com 无 DNS 记录,不可使用。密钥格式为测试 dodo_test_...、生产 dodo_live_...。环境变量为 DODO_PAYMENTS_API_KEY 与 DODO_PAYMENTS_WEBHOOK_KEY。environment 参数省略时默认 live_mode,开发时应显式传 test_mode。

SDK 安装:TypeScript/Node.js 用 npm install dodopayments;Python 用 pip install dodopayments;Go 用 go get -u github.com/dodopayments/dodopayments-go@v1.110.0;PHP 用 composer require "dodopayments/client:6.19.0";Ruby 用 gem "dodopayments", "~> 2.22.0";Java 与 Kotlin 通过 Maven 依赖 com.dodopayments.api 引入。另有 @dodopayments/* 系列框架适配包,覆盖 Next.js、Nuxt、Express、Fastify、Hono、Astro、SvelteKit、Remix、TanStack Start、Better Auth、Convex、Bun。

规范支付流程:在服务端创建结账会话(含 product_id 与客户邮箱),将客户重定向到返回的 checkout_url,客户在托管结账页付款,Dodo 向你的端点发送 Webhook(如 payment.succeeded),用 client.webhooks.unwrap() 验证签名,仅在验签成功后授予访问权限。切勿仅凭浏览器 return_url 跳转授予权限。

API 基础:请求使用 Bearer 令牌认证;列表接口按页码分页,接受 page_size 与 page_number,数据在 items 中,SDK 也可自动遍历所有页。Dodo 有速率限制,SDK 默认对连接错误及 408、409、429、5xx 重试两次并采用短指数退避,不要额外添加无条件重试循环;可通过 maxRetries 在客户端或单次请求上覆盖。SDK 抛出类型化错误,如 DodoPayments.APIError。

Webhook 验签:必须验签,遵循 Standard Webhooks 规范,签名消息为 webhook-id.webhook-timestamp.raw_body(以点连接),HMAC-SHA256 后 base64 编码。应使用 SDK 的 unwrap(),不要自行实现 HMAC,也不要对请求体做 JSON 解析后再序列化,否则签名会失效。

常见错误:凭 return_url 授予权限;手写验签;重新序列化请求体;使用已弃用的 client.payments.create() 或 client.subscriptions.create()(应改用 client.checkoutSessions.create());忘记设置 test_mode;将密钥硬编码;忽略 webhook-timestamp 头;在生产使用 unsafeUnwrap()。

限制:资料未提供具体收费、价格与效果数据;更多结账配置、订阅生命周期、信用额度计费等细节需参考对应的其他技能文档。