4.8 KiB
4.8 KiB
💳 支付功能集成说明
📋 功能概述
已实现完整的易支付集成功能,包括:
- ✅ 订单创建和管理
- ✅ 易支付接口对接
- ✅ 支付回调处理
- ✅ 支付结果页面
- ✅ 订单状态查询
🗄️ 数据库配置
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. 测试支付流程
- 登录账户
- 访问首页,滚动到定价部分
- 点击"立即购买"(标准版或远程部署服务)
- 应该会跳转到易支付页面
- 完成支付后,会跳转回支付结果页面
4. 测试回调
- 易支付会调用
/api/payment/callback - 检查订单状态是否更新为
paid
🔒 安全说明
- 签名验证:所有回调都会验证签名,防止伪造请求
- 订单验证:回调时会验证订单是否存在
- 用户验证:查询订单时会验证订单是否属于当前用户
- 幂等性:已支付的订单不会重复处理
📝 产品配置
在 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配置是否正确 - 确认易支付配置的回调地址正确
📞 技术支持
如有问题,请检查:
- 服务器日志:
/api/payment/callback的调用记录 - 数据库:订单表的数据是否正确
- 环境变量:易支付配置是否正确