@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
固定以主要货币单位收取的金额,例如 $12.50 对应
12.5。仅适用于 Pay What You Want products;如果低于 product 的 minimum price,则会被忽略。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
如果缺少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。