xiaso-flnxi-website/README_PAYMENT.md
2025-12-21 19:28:31 +08:00

4.8 KiB
Raw Permalink Blame History

💳 支付功能集成说明

📋 功能概述

已实现完整的易支付集成功能,包括:

  • ✅ 订单创建和管理
  • ✅ 易支付接口对接
  • ✅ 支付回调处理
  • ✅ 支付结果页面
  • ✅ 订单状态查询

🗄️ 数据库配置

1. 创建订单表

执行以下 SQL 脚本创建订单表:

# 如果使用 Docker PostgreSQL
docker exec -i flnxi-postgres psql -U flnxi_user -d flnxi_db < scripts/create_orders_table.sql

# 如果使用系统 PostgreSQL
psql -U flnxi_user -d flnxi_db -f scripts/create_orders_table.sql

或者直接在数据库中执行 scripts/create_orders_table.sql 文件内容。

2. 表结构说明

字段 类型 说明
id SERIAL 主键,自增
order_no VARCHAR(64) 订单号(唯一)
user_id INTEGER 用户ID(外键)
product_type VARCHAR(32) 产品类型:standard/deployment/custom
product_name VARCHAR(255) 产品名称
amount DECIMAL(10,2) 订单金额
status VARCHAR(32) 订单状态:pending/paid/failed/cancelled
payment_method VARCHAR(32) 支付方式
trade_no VARCHAR(128) 第三方交易号
callback_data TEXT 回调数据(JSON)
created_at TIMESTAMP 创建时间
updated_at TIMESTAMP 更新时间
paid_at TIMESTAMP 支付时间

⚙️ 环境变量配置

在 .env.local 文件中添加以下配置:

# 易支付配置
EPAY_PID=your_merchant_id          # 易支付商户ID
EPAY_KEY=your_merchant_key          # 易支付商户密钥
EPAY_API_URL=https://your-epay-domain.com/submit.php  # 易支付接口地址

# NextAuth配置(如果还没有)
NEXTAUTH_URL=https://your-domain.com  # 网站域名
NEXTAUTH_SECRET=your_secret_key        # NextAuth密钥

🔄 支付流程

1. 用户点击购买

  • 用户在产品页面点击"立即购买"
  • 系统检查登录状态,未登录则跳转登录页

2. 创建订单

  • 前端调用 /api/payment/create
  • 后端创建订单记录
  • 生成易支付支付参数和签名
  • 返回支付表单参数

3. 跳转支付

  • 前端自动提交表单到易支付
  • 用户完成支付

4. 支付回调

  • 易支付调用 /api/payment/callback
  • 验证签名
  • 更新订单状态
  • 返回 SUCCESS

5. 支付结果

  • 用户跳转到 /payment/success
  • 页面自动查询订单状态
  • 显示支付结果

📁 文件结构

app/
├── api/
│   └── payment/
│       ├── create/
│       │   └── route.ts          # 创建支付订单接口
│       ├── callback/
│       │   └── route.ts          # 支付回调接口
│       └── status/
│           └── route.ts          # 查询订单状态接口
├── payment/
│   └── success/
│       └── page.tsx              # 支付结果页面
lib/
└── db.ts                         # 数据库操作(已扩展订单相关函数)
components/
└── Pricing.tsx                   # 定价组件(已集成支付功能)
scripts/
└── create_orders_table.sql       # 订单表创建脚本

🧪 测试步骤

1. 配置环境变量

确保 .env.local 中配置了易支付相关信息。

2. 创建订单表

执行数据库迁移脚本。

3. 测试支付流程

  1. 登录账户
  2. 访问首页,滚动到定价部分
  3. 点击"立即购买"(标准版或远程部署服务)
  4. 应该会跳转到易支付页面
  5. 完成支付后,会跳转回支付结果页面

4. 测试回调

  • 易支付会调用 /api/payment/callback
  • 检查订单状态是否更新为 paid

🔒 安全说明

  1. 签名验证:所有回调都会验证签名,防止伪造请求
  2. 订单验证:回调时会验证订单是否存在
  3. 用户验证:查询订单时会验证订单是否属于当前用户
  4. 幂等性:已支付的订单不会重复处理

📝 产品配置

在 app/api/payment/create/route.ts 中可以配置产品信息:

const PRODUCTS = {
  standard: {
    name: 'FLNXI标准版',
    price: 599,
  },
  deployment: {
    name: '远程部署服务',
    price: 299,
  },
  custom: {
    name: '定制版咨询',
    price: 0, // 需要沟通报价
  },
}

🐛 常见问题

1. 回调签名验证失败

  • 检查 EPAY_KEY 是否正确
  • 确认易支付平台使用的签名算法(当前使用MD5)

2. 订单状态未更新

  • 检查回调接口是否可访问
  • 查看服务器日志确认回调是否收到
  • 确认数据库连接正常

3. 支付后未跳转

  • 检查 NEXTAUTH_URL 配置是否正确
  • 确认易支付配置的回调地址正确

📞 技术支持

如有问题,请检查:

  1. 服务器日志:/api/payment/callback 的调用记录
  2. 数据库:订单表的数据是否正确
  3. 环境变量:易支付配置是否正确