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