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

180 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 💳 支付功能集成说明
## 📋 功能概述
已实现完整的易支付集成功能,包括:
- ✅ 订单创建和管理
- ✅ 易支付接口对接
- ✅ 支付回调处理
- ✅ 支付结果页面
- ✅ 订单状态查询
## 🗄️ 数据库配置
### 1. 创建订单表
执行以下 SQL 脚本创建订单表:
```bash
# 如果使用 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` 文件中添加以下配置:
```env
# 易支付配置
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` 中可以配置产品信息:
```typescript
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. 环境变量:易支付配置是否正确