# Hono + Cloudflare Workers：如何在边缘处理支付

> 使用 Hono 和 Cloudflare Workers 构建高性能、全球分布式的支付系统。了解如何在边缘集成 Dodo Payments。
- **Author**: Ayush Agarwal
- **Published**: 2026-03-27
- **Category**: Payments, Developer Tools, How-To
- **URL**: https://dodopayments.com/blogs/zh/hono-cloudflare-workers-payments

---

边缘计算的发展从根本上改变了我们构建和部署 SaaS 应用的方式。通过将逻辑移至更靠近用户的位置，开发者无需面对传统多区域服务器管理的复杂性，也能实现近乎即时的响应速度和全球可扩展性。Cloudflare Workers 与轻量级 Hono 框架相结合，已成为这一全新开发时代的首选技术栈。

不过，支付处理一直是少数仍然依赖集中式服务器的领域之一。处理结账、管理订阅以及处理 Webhook，通常都需要一个配备持久化数据库的重量级后端。这会成为分布式架构中原本顺畅的瓶颈。但借助合适的工具，你现在可以完全在边缘处理支付。

在本指南中，我们将介绍如何使用 Hono 和 Cloudflare Workers 构建全球分布式支付系统。我们将探讨边缘优先支付的优势、如何设置开发环境，以及如何使用专为 Hono 打造的无缝接入集成 Dodo Payments。这就是[面向 SaaS 的支付架构](https://dodopayments.com/blogs/payments-architecture-saas)的未来。

## 为什么要在边缘处理支付？

边缘优先支付的主要优势是低延迟。当用户点击"结账"时，每一毫秒都很重要。如果你的支付逻辑运行在弗吉尼亚州的单个数据中心，而用户位于东京，他们会明显感受到延迟。通过在 Cloudflare 的全球网络上运行结账逻辑，无论用户身处何地，你都能确保流畅迅捷的体验。

> 支付集成应该花费几小时，而不是几周。如果开发者需要连续数天阅读文档，才能写下第一行代码，那么这个平台就不是以开发者为先，而是在为难开发者。
>
> \- Ayush Agarwal，Dodo Payments 联合创始人兼 CPTO

可扩展性是另一个重要因素。传统服务器可能难以应对流量突然激增的情况，例如产品发布或营销活动走红期间。Cloudflare Workers 专为自动扩展而设计，可以处理每秒数百万个请求。这样一来，即使在极高负载下，你的支付系统仍能保持响应迅速。

最后，边缘计算还能简化基础设施。你不必担心配置服务器、管理负载均衡器或设置自动扩展组。只需编写代码并将其部署到边缘即可。这样，你就能专注于核心产品，同时维持世界级的[在线收款](https://dodopayments.com/blogs/how-to-accept-online-payments)基础设施。

## Hono + Cloudflare Workers 技术栈

Hono 是一个小巧、快速且基于 Web 标准的 Web 框架。它可以运行在任何 JavaScript 运行时上，但在 Cloudflare Workers 上尤其出色。它轻量的体积和表达力强的 API 非常适合构建高性能 API 和中间件。

Cloudflare Workers 提供运行时环境。它使用 V8 isolates，相比传统容器或虚拟机，这些隔离环境更轻量，启动速度也更快。这种"零冷启动"能力对支付处理至关重要，因为响应缓慢可能导致用户放弃结账。

Hono 和 Cloudflare Workers 结合后，为开发者带来了强大且愉悦的开发体验。你可以同时获得现代框架的优势和全球网络的性能。这一技术栈非常适合实施需要高可用性和低延迟的 [API 变现](https://dodopayments.com/blogs/api-monetization)策略。如果你使用的是其他技术栈，同样的适配模式也适用于 [SvelteKit 支付集成](https://dodopayments.com/blogs/sveltekit-payments-integration)和 [Remix](https://dodopayments.com/blogs/set-up-payments-remix)。

## 设置你的边缘支付应用

开始之前，你需要一个 Cloudflare 账户，并在设备上安装 Wrangler CLI。你可以使用官方入门模板创建新的 Hono 项目。这样会得到一个可直接部署到 Cloudflare Workers 的基础项目结构。

项目设置完成后，你可以安装 Dodo Payments 的 Hono 无缝接入库。该库为常见支付任务提供了预构建处理器，例如创建结账会话和验证 Webhook。它专为与 Hono 的中间件系统无缝协作而设计。

```bash
npm install hono dodopayments @dodopayments/hono
```

安装依赖后，你可以配置 Hono 应用来处理支付路由。你需要 Dodo Payments API 密钥和 Webhook 签名密钥，这些信息可以在 Dodo 控制台中找到。我们建议将它们作为 Cloudflare 中的环境变量保存。

## 集成 Dodo Payments 结账

支付流程的第一步是结账。Dodo Payments 提供了专用的 [Hono 无缝接入](https://docs.dodopayments.com/developer-resources/hono-adaptor)，让你可以非常轻松地创建结账路由。只需几行代码，你就能定义一个路由，将用户重定向到安全的 Dodo 结账页面。

该无缝接入支持静态和动态结账。静态结账非常适合固定价格的产品，而动态结账则可以根据用户输入或应用状态即时生成会话。这种灵活性对于复杂的 SaaS 定价模式至关重要。

```typescript
import { Hono } from "hono";
import { Checkout } from "@dodopayments/hono";

const app = new Hono();

app.get(
  "/api/checkout",
  Checkout({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
    returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
    type: "static",
  }),
);

// 动态结账：相同的处理器，使用 POST，并将 type 设为 "dynamic"
app.post(
  "/api/checkout",
  Checkout({
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: process.env.DODO_PAYMENTS_ENVIRONMENT,
    returnUrl: process.env.DODO_PAYMENTS_RETURN_URL,
    type: "dynamic",
  }),
);

export default app;
```

请从配置中读取 `DODO_PAYMENTS_ENVIRONMENT`，而不要将 `live_mode` 硬编码。这样，同一个 Worker 无需修改代码即可部署到测试环境。在 Cloudflare 上，请将这些值设置为 Wrangler secrets，而不是普通变量。

## 在边缘处理 Webhook

Webhook 是任何现代支付系统的支柱。它可以让 Dodo 在支付成功、订阅续期或支付失败时通知你的应用。在边缘处理这些事件，可以确保应用状态尽快更新。

Dodo 的 Hono 无缝接入包含功能完善的 Webhook 处理器，可自动完成签名验证和载荷校验。这对安全性至关重要，因为它可以防止恶意行为者伪造支付事件。你可以针对每种事件类型定义自定义逻辑，例如为用户开通账户或发送确认邮件。

请注意，导出名称是 `Webhooks`（复数），并且每个事件处理器接收的是单个 `payload` 参数，而不是 Express 风格的 request/context 参数对。

```typescript
import { Webhooks } from "@dodopayments/hono";

app.post(
  "/api/webhooks",
  Webhooks({
    webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY,
    onSubscriptionActive: async (payload) => {
      const { customer_id, subscription_id } = payload.data;
      // 在边缘更新你的数据库
      console.log(`Subscription active for ${customer_id}`);
    },
  }),
);
```

如果你想使用单一的全捕获处理器，而不是为每种事件分别设置处理器，请使用 `onPayload`，然后自行根据 `payload.type` 进行分支处理。完整的类型化处理器列表（从 `onPaymentSucceeded` 到争议、催收和预付额度事件）请参阅 [Hono 无缝接入参考](https://docs.dodopayments.com/developer-resources/hono-adaptor)。如需了解围绕这些事件进行设计的概念背景，请参阅[Webhook 和支付通知](https://dodopayments.com/blogs/webhooks-payment-notifications)。

## 使用 Cloudflare D1 和 KV 管理状态

要构建完整的支付系统，你需要一种存储客户和订阅数据的方式。Cloudflare 为此提供了两个出色的选项：D1 和 KV。D1 是基于 SQLite 的分布式 SQL 数据库，而 KV 是全球分布式键值存储。

对于账单状态，D1 通常是更好的选择。它支持执行复杂查询并维护关系完整性。你可以将用户的订阅状态、方案详情和使用数据存储在 D1 表中。由于 D1 与 Cloudflare Workers 集成，你可以从任何边缘节点以极低延迟访问数据。

KV 非常适合缓存和存储简单标记。例如，你可以使用 KV 存储一个布尔标记，用于指示用户是否拥有有效订阅。这样，你就能在边缘执行极快速的权限检查，而无需访问主数据库。这种工具组合让 Dodo 成为边缘优先开发者理想的 [SaaS MoR（名义商户）](https://dodopayments.com/blogs/merchant-of-record-for-saas)。

## 可视化边缘支付架构

下图展示了在边缘优先架构中，用户请求如何经过 Cloudflare Workers 和 Dodo Payments 处理。

```mermaid
flowchart LR
    A[用户] --> B[Cloudflare 边缘节点]
    B --> C[Hono 应用 / Worker]
    C --> D{路由}
    D -->|结账| E[Dodo 结账页面]
    D -->|Webhook| F[Dodo Webhook 处理器]
    F --> G[Cloudflare D1 / KV]
    E --> H[支付成功]
    H --> F
    G --> C
    C --> I[响应]
```

## 安全性与签名验证

处理支付时，安全性至关重要。处理 Webhook 时，你必须验证请求确实来自 Dodo Payments。Dodo 的 Hono 无缝接入使用 HMAC-SHA256 签名验证，确保每个 Webhook 载荷的完整性和真实性。

你还应确保 API 密钥和机密信息绝不会暴露在客户端代码中。Cloudflare Workers 为存储这些机密信息提供了安全环境。通过使用环境变量和密钥管理，你可以在确保凭据安全的同时，让边缘逻辑能够访问它们。

最后，请考虑在 Webhook 处理器中实现幂等性。由于网络问题，同一个 Webhook 有时可能会被投递多次。通过在数据库中记录唯一的 Webhook ID，你可以确保每个事件只被处理一次，从而避免重复开通账户或账单错误。与单一源服务器相比，这一点在边缘环境中更为重要，因为并发重试可能会同时到达不同的 Cloudflare 节点。因此，去重检查必须在共享存储中执行，例如使用 D1 唯一约束，而不能依赖 Worker 内存。有关能够应对并发场景的模式，请参阅[支付 API 中的幂等键](https://dodopayments.com/blogs/idempotency-keys-payment-api)。

## 常见问题

### 我可以将 Hono 与其他边缘运行时搭配使用吗？

可以。Hono 的设计与运行时无关。虽然它在 Cloudflare Workers 上最为流行，但也可以运行在 Deno、Bun 甚至 Node.js 上。因此，它是构建支付逻辑时高度便携的选择。

### 如何测试我的边缘支付系统？

Dodo Payments 提供完整的"测试模式"，让你无需使用真实资金即可模拟整个支付流程。你可以使用测试信用卡号并触发测试 Webhook，确保 Hono 应用在正式上线前正常运行。

### Cloudflare D1 已经可以用于生产环境了吗？

可以。Cloudflare D1 现已正式发布，并被数千名开发者用于生产工作负载。它提供了一种可靠且可扩展的方式，用于在边缘管理关系型数据。

### 如果边缘环境中的 Webhook 失败，会发生什么？

Dodo Payments 为 Webhook 内置了重试机制。如果你的边缘 Worker 返回错误或超时，Dodo 会在数天内多次尝试重新投递 Webhook。这样，即使暂时出现问题，你的应用最终也能收到该事件。

### 我可以在边缘处理本地化支付吗？

当然可以。Dodo Payments 会自动检测用户所在位置，并提供最合适的本地支付方式。由于你的 Hono 应用运行在边缘，它还可以检测用户所在地区并提供本地化体验，例如以当地货币显示价格。

## 总结

在边缘构建支付系统不再是一项复杂工作。借助 Hono、Cloudflare Workers 和 Dodo Payments，你可以在几分钟内部署全球分布式、高性能的账单基础设施。这一技术栈能够提供现代 SaaS 应用所需的速度、可扩展性和安全性。

准备好将支付带到边缘了吗？查看我们的 [Hono 无缝接入文档](https://docs.dodopayments.com/developer-resources/hono-adaptor)，或探索[Cloudflare Workers 示例](https://docs.dodopayments.com/developer-resources/webhooks/examples/cloudflare-example)，了解完整实现。SaaS 的未来在边缘，而 Dodo 将助你构建这一未来。

如需进一步了解 Dodo Payments 如何助力你的全球业务，请访问 [dodopayments.com](https://dodopayments.com)，并查看我们的[定价](https://dodopayments.com/pricing)。
---
- [More Payments articles](https://dodopayments.com/blogs/category/payments)
- [All articles](https://dodopayments.com/blogs)