@dodopayments/fastify adaptor 为您的 Fastify 应用提供三个路由处理程序:Checkout 返回 checkout URL,CustomerPortal 将客户发送到 Customer Portal,而 Webhooks 验证 webhook 请求并调用您的事件处理程序。
Checkout Handler
从 Fastify 应用创建 payment links 和 checkout sessions。
Customer Portal
让客户管理其订阅和详细信息。
Webhooks
验证并处理 Dodo Payments webhook 事件。
安装
1
Install the Package
在项目根目录运行以下命令:此软件包需要 Fastify 5.4.0 或更高版本。
2
Set Up Environment Variables
在项目根目录创建一个 在 Developer → API Keys 下创建 API key。在 Developer → Webhooks 下添加 webhook endpoint,并将其 signing secret 复制到
.env 文件:DODO_PAYMENTS_WEBHOOK_KEY。开发期间,请使用带有 DODO_PAYMENTS_ENVIRONMENT=test_mode 的 test mode API key,因为 test mode key 只能用于 test mode。DODO_PAYMENTS_RETURN_URL 是可选的。路由处理程序示例
这些示例会在使用
Fastify() 创建的 Fastify 实例上注册路由。webhook 路由需要原始请求正文,因此示例会在一个仅包含 webhook 路由的 plugin 中添加 string body parser。- Checkout Handler
- Customer Portal Handler
- Webhook Handler
使用此处理程序将 Dodo Payments checkout 集成到您的 Fastify 应用中。支持 static (GET)、dynamic (POST) 和 session (POST) payment flows。对于 static flow,
Checkout() 返回一个 getHandler;对于 dynamic 和 session flows,返回一个 postHandler。为每个 POST flow 注册单独的路径。Checkout 路由处理程序
adaptor 支持全部三种 Dodo Payments checkout flows。在处理程序配置中设置
type,以选择路由提供的 flow。每种 flow 都会返回包含 checkout_url 的 JSON,供客户打开。- Static Payment Links:
type: "static",GET。根据 query parameters 为一个产品创建 payment link,并先检查该产品是否存在。 - Dynamic Payment Links:
type: "dynamic",POST。根据产品是否为 recurring,使用 payment link 创建一次性 payment 或 subscription。 - Checkout Sessions:
type: "session",POST。根据 product cart 和 customer details 创建 checkout session。新集成应使用此 flow。
Checkout 接受以下 options:
Checkout 返回一个包含两个处理程序的对象。当 type 为 static 时,为 GET 注册 getHandler;当 type 为 dynamic 或 session 时,为 POST 注册 postHandler。
Static Checkout (GET)
Static Checkout (GET)
支持的 Query Parameters
只有当 disable flag 为true 且对应字段有值时,该 flag 才会生效,例如 email 与 disableEmail。处理程序会将这些 parameters 传递给 static payment link。Response Format
Static checkout 返回包含 checkout URL 的 JSON response:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- 在 POST request 中将 parameters 作为 JSON body 发送。
- 同时支持一次性和 recurring payments。处理程序会获取产品,然后在产品为 recurring 时创建 subscription,否则创建一次性 payment。
- body 需要
billing(包含street、city、state、country和zipcode)以及customer,此外还需要product_id(可选的quantity)或product_cart。Subscriptions 需要product_id。 - 处理程序还会转发
metadata、allowed_payment_method_types、billing_currency、discount_codes(或已弃用的discount_code)、return_url、show_saved_payment_methods和tax_id。对于 subscriptions,还会转发addons、on_demand和trial_period_days。其他字段会被忽略。 - 有关字段详细信息,请参阅:
Response Format
Dynamic checkout 返回包含 payment link(作为 checkout URL)的 JSON response:Checkout Sessions (POST)
Checkout Sessions (POST)
将 checkout session payload 作为 JSON body 发送。处理程序会创建 checkout session,该 session 负责处理一次性购买和 subscriptions 的完整 payment flow,并返回其
checkout_url。必须提供 product_cart,且其中至少包含一个产品。每个 checkout_url 只能使用一次,并会在 24 小时后过期;如果传递 confirm: true,则会在 15 分钟后过期。使用 payment_method_id 创建的 session 不会返回 checkout_url,因此处理程序会响应 400。有关更多详细信息和完整的 supported fields 列表,请参阅 Checkout Sessions Integration Guide。Response Format
Checkout sessions 返回包含 checkout URL 的 JSON response:Customer Portal 路由处理程序
Customer Portal Route Handler 会为customer_id 中的客户创建 Customer Portal session,并将 request 重定向到 portal link。CustomerPortal 接受 bearerToken 和 environment options,与 Checkout 相同。如果 Dodo Payments 无法创建 session,处理程序会返回 500。
Query Parameters
Webhook 路由处理程序
webhook handler 会使用作为webhookKey 传入的 webhook secret 验证每个 request,然后调用您的 event handlers。
- **Method:**仅支持 POST requests。其他 methods 返回 405。
- **Signature Verification:**使用
webhookKey,按照 Standard Webhooks specification 验证webhook-id、webhook-timestamp和webhook-signatureheaders。验证失败时返回 401。 - **Payload Validation:**使用 Zod 验证。payload 无效时返回 400。
- Error Handling:
- 401:无效 signature
- 400:无效 payload
- 500:验证期间发生内部错误
- **Event Routing:**对每个 event 调用
onPayload,然后调用该 event type 对应的 handler,并在它们完成后返回 200。处理程序不会捕获您的 event handlers 抛出的 errors。