更新
This commit is contained in:
@@ -0,0 +1,402 @@
|
||||
# 订单支付功能完整指南
|
||||
|
||||
## 📋 目录
|
||||
|
||||
1. [快速开始](#快速开始)
|
||||
2. [功能概述](#功能概述)
|
||||
3. [系统架构](#系统架构)
|
||||
4. [配置指南](#配置指南)
|
||||
5. [API文档](#api文档)
|
||||
6. [测试指南](#测试指南)
|
||||
7. [部署指南](#部署指南)
|
||||
8. [常见问题](#常见问题)
|
||||
9. [文档索引](#文档索引)
|
||||
|
||||
---
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 配置环境变量 (5分钟)
|
||||
|
||||
在 `.env` 文件中添加支付配置:
|
||||
|
||||
```env
|
||||
# 支付宝
|
||||
ALIPAY_APP_ID=your_app_id
|
||||
ALIPAY_MERCHANT_PRIVATE_KEY=your_private_key
|
||||
ALIPAY_PUBLIC_KEY=your_public_key
|
||||
ALIPAY_NOTIFY_URL=https://yourdomain.com/api/order/alipay-notify
|
||||
ALIPAY_RETURN_URL=https://yourdomain.com/order
|
||||
|
||||
# 微信
|
||||
WECHAT_APP_ID=your_app_id
|
||||
WECHAT_MCH_ID=your_mch_id
|
||||
WECHAT_API_KEY=your_api_key
|
||||
WECHAT_NOTIFY_URL=https://yourdomain.com/api/order/wechat-notify
|
||||
```
|
||||
|
||||
### 2. 执行数据库迁移 (1分钟)
|
||||
|
||||
```sql
|
||||
ALTER TABLE `la_order` ADD COLUMN `trade_no` varchar(100) DEFAULT NULL COMMENT '第三方交易号' AFTER `payment_time`;
|
||||
```
|
||||
|
||||
### 3. 测试支付流程 (10分钟)
|
||||
|
||||
- 打开订单列表
|
||||
- 点击"支付"按钮
|
||||
- 选择支付方式
|
||||
- 完成支付
|
||||
|
||||
详见 [PAYMENT_QUICK_START.md](./PAYMENT_QUICK_START.md)
|
||||
|
||||
---
|
||||
|
||||
## 功能概述
|
||||
|
||||
### 支持的支付方式
|
||||
|
||||
| 支付方式 | 状态 | 说明 |
|
||||
|---------|------|------|
|
||||
| 支付宝 | ✅ 已实现 | 支持页面支付和二维码支付 |
|
||||
| 微信支付 | ✅ 已实现 | 支持二维码支付 |
|
||||
| 银行卡 | ❌ 已移除 | 不再支持 |
|
||||
|
||||
### 支持的支付类型
|
||||
|
||||
| 支付类型 | 说明 |
|
||||
|---------|------|
|
||||
| 正常支付 | 支付指定订单 |
|
||||
| 补单支付 | 输入订单号后支付,无需校验订单是否存在 |
|
||||
|
||||
### 订单状态流转
|
||||
|
||||
```
|
||||
创建订单 → 待支付 → 已支付 → 已退款
|
||||
↓
|
||||
已取消
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 系统架构
|
||||
|
||||
### 后端架构
|
||||
|
||||
```
|
||||
OrderController (支付接口)
|
||||
↓
|
||||
OrderLogic (支付逻辑)
|
||||
├── alipayPay() → generateAlipayUrl()
|
||||
├── wechatPay() → generateWechatPayData()
|
||||
├── generateAlipaySign() (RSA2签名)
|
||||
└── generateWechatSign() (MD5签名)
|
||||
|
||||
AlipayNotifyController (支付宝回调)
|
||||
├── 验证签名
|
||||
├── 验证金额
|
||||
└── 更新订单状态
|
||||
|
||||
WechatNotifyController (微信回调)
|
||||
├── 验证签名
|
||||
├── 验证金额
|
||||
└── 更新订单状态
|
||||
```
|
||||
|
||||
### 前端架构
|
||||
|
||||
```
|
||||
OrderList (订单列表)
|
||||
├── PayDialog (支付对话框)
|
||||
│ ├── 支付类型选择
|
||||
│ ├── 支付方式选择
|
||||
│ └── 确认支付
|
||||
└── API调用
|
||||
├── alipayPay()
|
||||
└── wechatPay()
|
||||
```
|
||||
|
||||
### 数据流
|
||||
|
||||
```
|
||||
用户支付 → 前端调用API → 后端生成支付链接 → 前端跳转支付页面
|
||||
↓
|
||||
用户完成支付
|
||||
↓
|
||||
支付网关回调后端
|
||||
↓
|
||||
后端验证签名和金额
|
||||
↓
|
||||
后端更新订单状态
|
||||
↓
|
||||
前端刷新订单列表
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 配置指南
|
||||
|
||||
### 支付宝配置
|
||||
|
||||
#### 获取密钥
|
||||
1. 登录 [支付宝开放平台](https://open.alipay.com/)
|
||||
2. 进入"开发者中心" → "应用管理"
|
||||
3. 创建应用或选择已有应用
|
||||
4. 在"开发设置"中生成密钥对
|
||||
5. 下载商户私钥和支付宝公钥
|
||||
|
||||
#### 配置回调
|
||||
1. 在应用设置中配置"异步通知地址"
|
||||
2. 地址:`https://yourdomain.com/api/order/alipay-notify`
|
||||
3. 配置"同步返回地址"(可选)
|
||||
4. 地址:`https://yourdomain.com/order`
|
||||
|
||||
#### 沙箱测试
|
||||
- 网址:https://openapi.alipaydev.com/gateway.do
|
||||
- 在 `.env` 中设置:`ALIPAY_GATEWAY_URL=https://openapi.alipaydev.com/gateway.do`
|
||||
|
||||
### 微信支付配置
|
||||
|
||||
#### 获取密钥
|
||||
1. 登录 [微信商户平台](https://pay.weixin.qq.com/)
|
||||
2. 进入"账户中心" → "API安全"
|
||||
3. 获取商户号(Mch ID)
|
||||
4. 在"API密钥"中生成 API Key
|
||||
|
||||
#### 配置回调
|
||||
1. 在商户平台配置"回调地址"
|
||||
2. 地址:`https://yourdomain.com/api/order/wechat-notify`
|
||||
|
||||
#### 沙箱测试
|
||||
- 使用测试商户号和 API Key
|
||||
- 网址:https://api.mch.weixin.qq.com
|
||||
|
||||
详见 [PAYMENT_GATEWAY_INTEGRATION.md](./PAYMENT_GATEWAY_INTEGRATION.md)
|
||||
|
||||
---
|
||||
|
||||
## API文档
|
||||
|
||||
### 支付接口
|
||||
|
||||
#### 支付宝支付
|
||||
```
|
||||
POST /order.order/alipay
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"id": 1,
|
||||
"order_no": "ORD20240101120000123456",
|
||||
"amount": 100.00,
|
||||
"payment_method": "alipay"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"code": 0,
|
||||
"msg": "success",
|
||||
"data": {
|
||||
"pay_url": "https://openapi.alipay.com/gateway.do?..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 微信支付
|
||||
```
|
||||
POST /order.order/wechat
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"id": 1,
|
||||
"order_no": "ORD20240101120000123456",
|
||||
"amount": 100.00,
|
||||
"payment_method": "wechat"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
"code": 0,
|
||||
"msg": "success",
|
||||
"data": {
|
||||
"pay_url": "https://api.mch.weixin.qq.com/pay/unifiedorder",
|
||||
"pay_data": {...}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 补单支付
|
||||
```
|
||||
POST /order.order/alipay (或 /order.order/wechat)
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"order_no": "ORD20240101120000123456",
|
||||
"payment_method": "alipay",
|
||||
"is_supplement": 1
|
||||
}
|
||||
```
|
||||
|
||||
详见 [PAYMENT_API_ENDPOINTS.md](./PAYMENT_API_ENDPOINTS.md)
|
||||
|
||||
---
|
||||
|
||||
## 测试指南
|
||||
|
||||
### 单元测试
|
||||
|
||||
```php
|
||||
// 测试支付宝签名
|
||||
$params = ['app_id' => '123', 'method' => 'pay'];
|
||||
$sign = OrderLogic::generateAlipaySign($params, $privateKey);
|
||||
// 验证签名是否正确
|
||||
|
||||
// 测试微信签名
|
||||
$params = ['appid' => 'wx123', 'mch_id' => '456'];
|
||||
$sign = OrderLogic::generateWechatSign($params, $apiKey);
|
||||
// 验证签名是否正确
|
||||
```
|
||||
|
||||
### 集成测试
|
||||
|
||||
1. **支付宝支付流程**
|
||||
- 创建订单
|
||||
- 调用支付宝支付接口
|
||||
- 验证返回支付URL
|
||||
- 模拟支付宝回调
|
||||
- 验证订单状态更新
|
||||
|
||||
2. **微信支付流程**
|
||||
- 创建订单
|
||||
- 调用微信支付接口
|
||||
- 验证返回支付数据
|
||||
- 模拟微信回调
|
||||
- 验证订单状态更新
|
||||
|
||||
3. **补单支付流程**
|
||||
- 调用支付接口,参数中 `is_supplement=1`
|
||||
- 验证不校验订单是否存在
|
||||
- 验证返回支付链接/数据
|
||||
|
||||
### 端到端测试
|
||||
|
||||
1. 打开订单列表
|
||||
2. 创建新订单
|
||||
3. 点击支付按钮
|
||||
4. 选择支付方式
|
||||
5. 完成支付
|
||||
6. 验证订单状态更新
|
||||
|
||||
详见 [PAYMENT_DEPLOYMENT_CHECKLIST.md](./PAYMENT_DEPLOYMENT_CHECKLIST.md)
|
||||
|
||||
---
|
||||
|
||||
## 部署指南
|
||||
|
||||
### 开发环境
|
||||
1. 配置 `.env` 文件
|
||||
2. 执行数据库迁移
|
||||
3. 在沙箱环境测试
|
||||
|
||||
### 测试环境
|
||||
1. 配置测试环境 `.env` 文件
|
||||
2. 执行数据库迁移
|
||||
3. 完整测试所有功能
|
||||
|
||||
### 生产环境
|
||||
1. 获取生产密钥
|
||||
2. 配置生产环境 `.env` 文件
|
||||
3. 执行数据库迁移
|
||||
4. 在生产环境测试
|
||||
5. 上线
|
||||
|
||||
详见 [PAYMENT_DEPLOYMENT_CHECKLIST.md](./PAYMENT_DEPLOYMENT_CHECKLIST.md)
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: 支付后订单状态没有更新?
|
||||
A: 检查以下几点:
|
||||
1. 回调地址是否正确配置
|
||||
2. 防火墙是否允许回调
|
||||
3. 签名验证是否通过
|
||||
4. 查看后端日志
|
||||
|
||||
### Q: 签名验证失败?
|
||||
A: 检查以下几点:
|
||||
1. 密钥是否正确
|
||||
2. 参数排序是否正确
|
||||
3. 签名算法是否匹配
|
||||
4. 查看后端日志
|
||||
|
||||
### Q: 如何测试支付功能?
|
||||
A: 使用支付宝和微信提供的沙箱环境进行测试。
|
||||
|
||||
### Q: 如何处理支付失败?
|
||||
A: 前端会显示错误提示,用户可以重新尝试支付。
|
||||
|
||||
### Q: 如何处理重复支付?
|
||||
A: 通过订单号的唯一性约束和支付状态检查来防止重复支付。
|
||||
|
||||
详见 [PAYMENT_GATEWAY_INTEGRATION.md](./PAYMENT_GATEWAY_INTEGRATION.md)
|
||||
|
||||
---
|
||||
|
||||
## 文档索引
|
||||
|
||||
| 文档 | 说明 |
|
||||
|------|------|
|
||||
| [PAYMENT_QUICK_START.md](./PAYMENT_QUICK_START.md) | 5分钟快速开始指南 |
|
||||
| [PAYMENT_GATEWAY_INTEGRATION.md](./PAYMENT_GATEWAY_INTEGRATION.md) | 完整的集成指南 |
|
||||
| [PAYMENT_IMPLEMENTATION_SUMMARY.md](./PAYMENT_IMPLEMENTATION_SUMMARY.md) | 实现总结 |
|
||||
| [PAYMENT_API_ENDPOINTS.md](./PAYMENT_API_ENDPOINTS.md) | API端点文档 |
|
||||
| [PAYMENT_MIGRATION.md](./PAYMENT_MIGRATION.md) | 数据库迁移指南 |
|
||||
| [PAYMENT_DEPLOYMENT_CHECKLIST.md](./PAYMENT_DEPLOYMENT_CHECKLIST.md) | 部署检查清单 |
|
||||
| [PAYMENT_CHANGES_SUMMARY.md](./PAYMENT_CHANGES_SUMMARY.md) | 变更总结 |
|
||||
|
||||
---
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **后端**: PHP 7.4+, ThinkPHP 6.0+
|
||||
- **前端**: Vue 3, Element Plus
|
||||
- **数据库**: MySQL 5.7+
|
||||
- **支付网关**: 支付宝, 微信支付
|
||||
|
||||
---
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. ✅ 不要在代码中硬编码密钥,使用环境变量
|
||||
2. ✅ 验证所有回调请求的签名
|
||||
3. ✅ 使用 HTTPS 传输敏感信息
|
||||
4. ✅ 定期更新密钥
|
||||
5. ✅ 记录所有支付相关的日志
|
||||
6. ✅ 实现幂等性处理,防止重复支付
|
||||
|
||||
---
|
||||
|
||||
## 支持
|
||||
|
||||
如有问题,请参考相关文档或联系技术支持。
|
||||
|
||||
---
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v1.0.0 (2024-01-01)
|
||||
- ✅ 支付宝支付集成
|
||||
- ✅ 微信支付集成
|
||||
- ✅ 异步回调处理
|
||||
- ✅ 完整文档
|
||||
|
||||
---
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目遵循项目许可证。
|
||||
|
||||
---
|
||||
|
||||
**最后更新**: 2024-01-01
|
||||
**维护者**: 开发团队
|
||||
Reference in New Issue
Block a user