@dodopayments/astro package 为您的 Astro 项目提供三个 endpoint handlers。Checkout 返回 checkout URLs,CustomerPortal 将客户发送到 Customer Portal,而 Webhooks 验证 webhook events 并将其路由到您的代码。
Checkout Handler
使用 static、dynamic 和 checkout session flows 创建 checkout URLs。
Customer Portal
让客户管理其 subscriptions 和详细信息。
Webhooks
接收并处理 Dodo Payments webhook events。
安装
1
Install the Package
在项目根目录运行此命令:该 package 将 Astro 4 或 5 以及
zod 3.25 或更高版本列为 peer dependencies。2
Set Up Environment Variables
在项目根目录创建一个
.env 文件。在 Developer → API Keys 下创建 API key。在 Developer → Webhooks 下添加 webhook endpoint,并将其 Signing secret 复制到 DODO_PAYMENTS_WEBHOOK_KEY:DODO_PAYMENTS_RETURN_URL 是客户在 checkout 后到达的位置。如果您不传入 environment,handlers 将使用 live_mode。test mode API key 只能与 test_mode 配合使用。Route Handler 示例
这些示例是位于
src/pages/api/ 中的 Astro server endpoints。调用 Dodo Payments 的 endpoints 必须按需渲染,因此请为 Astro 项目添加 server adapter。在 Astro 默认的 static output mode 中,endpoints 会在构建时渲染,因此每个示例都会导出 prerender = false,以便改为在每次请求时渲染 endpoint。- Checkout Handler
- Customer Portal Handler
- Webhook Handler
使用此 handler 将 Dodo Payments checkout 添加到您的应用。
GET handler 提供 static checkout。POST handler 提供 checkout sessions;当您将 type: "dynamic" 设置为相应值时,也可提供 dynamic checkout。一个 endpoint file 只能导出一个 POST handler,因此 dynamic checkout 示例假定您已设置 type: "dynamic"。Checkout Route Handler
checkout handler 支持使用 Dodo Payments 收款的以下三种方式:- **Static Payment Links:**无需代码即可收款的可分享 URLs。
- **Dynamic Payment Links:**使用自定义详细信息生成的 payment links。它们使用 deprecated endpoints。
- **Checkout Sessions:**支持 product cart、customer details 和 customization options 的 hosted checkout。这是推荐的流程。
Checkout 接受以下 options:
该 handler 为
GET requests 提供 static checkout。对于 POST requests,当 type 为 dynamic 时,它会创建 dynamic payment link;否则会创建 checkout session。
Static Checkout (GET)
Static Checkout (GET)
支持的 Query Parameters
string
必填
Product identifier,例如
?productId=pdt_nZuwz45WAs64n3l07zpQR。integer
默认值:"1"
Product 的 quantity。
string
Customer 的 full name。如果提供了
firstName 或 lastName,则会忽略该字段。string
Customer 的 first name。
string
Customer 的 last name。
string
Customer 的 email address。
string
Customer 的 country,采用 ISO 3166-1 alpha-2 code。
string
Customer 的 street address。
string
Customer 的 city。
string
Customer 的 state 或 province。
string
Customer 的 ZIP 或 postal code。
boolean
设置为
true 可禁用 full name field。boolean
设置为
true 可禁用 first name field。boolean
设置为
true 可禁用 last name field。boolean
设置为
true 可禁用 email field。boolean
设置为
true 可禁用 country field。boolean
设置为
true 可禁用 address line field。boolean
设置为
true 可禁用 city field。boolean
设置为
true 可禁用 state field。boolean
设置为
true 可禁用 ZIP code field。string
Payment currency,例如
USD。boolean
默认值:"true"
显示或隐藏 currency selector。
number
固定以主要货币单位收取的金额,例如 $12.50 对应
12.5。仅适用于 Pay What You Want products;如果低于 product 的 minimum price,则会被忽略。boolean
默认值:"true"
显示或隐藏 discounts section。
string
任何以
metadata_ 开头的 query parameter 都会作为 metadata 传递给 checkout,例如 metadata_orderId=123。email 与 disableEmail=true 配合使用时。handler 会将其 config 中的 returnUrl 作为 redirect_url 添加到 link 中。Response Format
Static checkout 返回包含 checkout URL 的 JSON response。在 test mode 中,URL 使用test.checkout.dodopayments.com:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- 在 POST request 中将 parameters 作为 JSON body 发送。
- 支持 one-time 和 recurring payments。handler 会获取 product,然后在 product 为 recurring 时创建 subscription,否则创建 one-time payment。
- body 需要
billing(包括street、city、state、country和zipcode)以及customer,另外还需要product_id或product_cart。Subscriptions 需要product_id。 - 有关所有受支持的 body fields,请参阅:
Response Format
Dynamic checkout 返回包含 payment link 作为 checkout URL 的 JSON response:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout sessions 为 one-time purchases 和 subscriptions 创建 hosted checkout,并提供完整的 customization 控制。
product_cart 是唯一必需的 field,并且至少需要一个 product。如果 body 没有 return_url,handler 会使用其 config 中的 returnUrl。每个 checkout_url 只能使用一次,并会在 24 小时后过期;传入 confirm: true 时,则会在 15 分钟后过期。使用 payment_method_id 创建的 session 不会返回 checkout_url,因此 handler 会响应 400。有关更多详细信息和所有受支持的 fields,请参阅 Checkout Sessions Integration Guide。Response Format
Checkout sessions 返回包含 checkout URL 的 JSON response:Customer Portal Route Handler
Customer Portal route handler 为您传入的 customer 创建 Customer Portal session,并将 browser 重定向到该 session。CustomerPortal 接受与 Checkout 相同的 bearerToken 和 environment options。
Query Parameters
string
必填
用于 portal session 的 customer ID,例如
?customer_id=cus_123。boolean
如果设置为
true,Dodo Payments 还会通过 email 将 portal link 发送给 customer。customer_id,handler 将返回 400;如果无法创建 portal session,则返回 500。
Webhook Route Handler
webhook route handler 会在运行您的代码之前,使用作为webhookKey 传入的 webhook secret 验证每个 request:
- **Method:**仅支持 POST requests。其他 methods 返回 405。
- **Signature Verification:**使用
webhookKey按照 Standard Webhooks specification 验证webhook-id、webhook-timestamp和webhook-signatureheaders。验证失败时返回 401。 - **Payload Validation:**使用 Zod 验证 payload。payload 无效时返回 400。
- Error Handling:
- 401:Invalid signature
- 400:Invalid payload
- 500:验证期间发生 Internal error
- **Event Routing:**对每个 event 调用
onPayload,然后调用该 event type 对应的 handler,并返回 200。