@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
string
必填
产品标识符,例如
?productId=pdt_nZuwz45WAs64n3l07zpQR。integer
默认值:"1"
产品数量。
string
客户的全名。如果提供了
firstName 或 lastName,则会忽略此项。string
客户的名字。
string
客户的姓氏。
string
客户的 email address。
string
客户的国家,以 ISO 3166-1 alpha-2 code 表示。
string
客户的街道地址。
string
客户所在的城市。
string
客户所在的州或省。
string
客户的邮政编码或 ZIP code。
boolean
设置为
true 可禁用全名字段。boolean
设置为
true 可禁用名字字段。boolean
设置为
true 可禁用姓氏字段。boolean
设置为
true 可禁用 email 字段。boolean
设置为
true 可禁用 country 字段。boolean
设置为
true 可禁用 address line 字段。boolean
设置为
true 可禁用 city 字段。boolean
设置为
true 可禁用 state 字段。boolean
设置为
true 可禁用 ZIP code 字段。string
支付货币,例如
USD。boolean
默认值:"true"
显示或隐藏货币选择器。
number
固定收取的金额,以主要货币单位表示,例如
12.5 表示 $12.50。仅适用于 Pay What You Want products;如果金额低于产品最低价格,则会忽略此项。boolean
默认值:"true"
显示或隐藏 discounts section。
string
任何以
metadata_ 开头的 query parameter 都会作为 metadata 传递给 checkout,例如 metadata_orderId=123。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
string
必填
portal session 的 customer ID,例如
?customer_id=cus_123。boolean
如果设置为
true,则向客户发送包含 portal link 的 email。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。