跳转到主要内容

GitHub Repository

精简的 Go + Dodo Payments 样板

概述

Go boilerplate 提供了一个生产就绪的起点,用于将 Dodo Payments 集成到您的 Go 后端中。此模板包括结账会话处理、Webhook 验证、客户门户集成,并遵循 Go 最佳实践,帮助您快速开始接受支付。
该样板使用 Go 1.21+ 并采用清晰的架构模式(cmdinternaltemplates)、HTML 模板,以及 dodopayments-go SDK 实现无缝的 API 集成。

特性

  • 快速设置 - 在 5 分钟内开始
  • 支付集成 - 使用 dodopayments-go SDK 的预配置结账流程
  • 现代 UI - 使用 HTML 模板的清爽暗色主题定价页面
  • Webhook 处理 - 安全地验证并处理支付事件
  • 客户门户 - 自助订阅管理
  • Go 最佳实践 - 采用 cmdinternaltemplates 的清晰架构
  • 预填写结账 - 展示如何传递客户数据以提升体验

先决条件

在开始之前,请确保您拥有:
  • Go 1.21+
  • Dodo Payments 账户(以从仪表板访问 API 和 Webhook 密钥)

快速开始

1

Clone the Repository

git clone https://github.com/dodopayments/go-boilerplate.git
cd go-boilerplate
2

Install Dependencies

make install
或者手动:
go mod download
3

Get API Credentials

Dodo Payments 注册,并从仪表板获取凭证:
开发时确保处于 测试模式
4

Configure Environment Variables

在根目录创建一个 .env 文件:
cp .env.example .env
使用您的 Dodo Payments 凭证更新值:
.env
DODO_PAYMENTS_API_KEY=your_api_key_here
DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_signing_key_here
DODO_PAYMENTS_RETURN_URL=http://localhost:8000
DODO_PAYMENTS_ENVIRONMENT=test_mode
永远不要将你的 .env 文件提交到版本控制。它已经包含在 .gitignore 中。
5

Add Your Products

用 Dodo Payments 中的实际产品 ID 更新 internal/lib/products.go
var Products = []Product{
    {
        ProductID:   "pdt_001", // Replace with your product ID
        Name:        "Basic Plan",
        Description: "Get access to basic features and support",
        Price:       9999, // in cents
        Features: []string{
            "Access to basic features",
            "Email support",
            "1 Team member",
            "Basic analytics",
        },
    },
    // ... add more products
}
6

Run the Development Server

make run
或者手动:
go run cmd/server/main.go
打开 http://localhost:8000 查看您的定价页面!
你应该能看到一个暗色主题的定价页面,产品已准备好购买。

项目结构

go-boilerplate/
├── cmd/
│   └── server/             # Application entry point
├── internal/
│   ├── api/                # API handlers (Checkout, Portal, Webhook)
│   ├── core/               # Configuration and system core
│   └── lib/                # Shared logic (Products, Customer utils)
├── templates/              # HTML templates
├── Makefile                # Build and run commands
├── go.mod                  # Go module definition
├── go.sum                  # Dependency checksums
├── .env.example            # Environment template
└── README.md

API 端点

该 boilerplate 包含以下预配置的端点:
端点方法描述
/GET显示产品列表的定价页面
/api/checkoutPOST创建新的结账会话
/api/webhookPOST处理 Dodo Payments 的 webhook
/api/customer-portalPOST生成客户门户 URL

自定义

更新产品信息

编辑 internal/lib/products.go 以修改:
  • 产品 ID(来自你的 Dodo 仪表板)
  • 定价
  • 功能
  • 描述
var Products = []Product{
    {
        ProductID:   "pdt_001", // Replace with your product ID
        Name:        "Basic Plan",
        Description: "Get access to basic features and support",
        Price:       9999,
        Features: []string{
            "Access to basic features",
            "Email support",
            "1 Team member",
            "Basic analytics",
        },
    },
}

预填客户数据

templates/index.html 中,用你的实际用户数据替换硬编码的客户数据:
const customerData = {
    name: "John Doe",       // Replace with actual logged-in user's name
    email: "john@example.com"  // Replace with actual logged-in user's email
};
在生产应用中,您将动态注入这些值来自您的身份验证系统。

Webhook 事件

该样板展示了如何在 internal/api/webhook.go 中处理 webhook 事件。支持的事件包括:
事件描述
subscription.active在订阅变为激活时触发
payment.succeeded在付款成功时触发
在 webhook 处理程序中添加您的业务逻辑,以:
  • 更新数据库中的用户权限
  • 发送确认电子邮件
  • 提供对数字产品的访问
  • 跟踪分析和指标

本地测试 Webhooks

对于本地开发,使用 ngrok 来暴露您的本地服务器:
ngrok http 8000
在您的 Dodo Payments 仪表板 中更新 webhook URL:
https://your-ngrok-url.ngrok.io/api/webhook

部署

为生产构建

make build
或者手动:
go build -o bin/server cmd/server/main.go
./bin/server

部署到 Vercel

[ 使用 Vercel 部署 ](https://vercel.com/new/clone?repository-url=https://github.com/dodopayments/go-boilerplate)

Docker

创建一个 Dockerfile
FROM golang:1.21-alpine AS builder

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN go build -o bin/server cmd/server/main.go

FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/bin/server .
COPY --from=builder /app/templates ./templates

EXPOSE 8000
CMD ["./server"]
构建并运行:
docker build -t go-dodo .
docker run -p 8000:8000 --env-file .env go-dodo

生产注意事项

部署到生产环境前:
  • DODO_PAYMENTS_ENVIRONMENT 切换为 live_mode
  • 使用仪表板中的生产 API 密钥
  • 将 webhook URL 更新为你的生产域名
  • 为所有端点启用 HTTPS

故障排除

确保 Go 模块已正确下载:
go mod tidy
go mod download
常见原因:
  • 无效的产品 ID - 确认它在你的 Dodo 仪表板中存在
  • .env 中的 API 密钥或环境设置错误
  • 检查服务器日志以获取详细错误信息
本地测试时,使用 ngrok 将你的服务器暴露出来:
ngrok http 8000
在你的 Dodo 仪表板 中将 webhook URL 更新为 ngrok URL。确保在 .env 文件中更新正确的 webhook 验证密钥。
确保你从项目根目录运行服务器,或者在代码中正确配置了模板路径。

了解更多

支持

需要有关 boilerplate 的帮助吗?