- ✅ 订单基础功能(创建、查询、更新、删除)
- ✅ 订单状态管理(状态码:1-未付款,7-已取消)
- ❌ 支付功能缺失(前端显示"暂无支付功能")
- ❌ 数据库缺少支付相关字段
- ❌ 没有支付SDK依赖
- 后端:Spring Boot 2.5.5 + MyBatis-Plus
- 前端:Vue 3 + Vite + Ant Design Vue
- 数据库:MySQL 8.0
-
支付宝支付集成
- 沙箱环境对接
- 扫码支付(当面付)
- 支付回调处理
-
微信支付集成
- 沙箱环境对接
- Native支付(扫码支付)
- 支付回调处理
-
模拟支付功能
- 开发环境模拟支付流程
- 支付状态同步
- 支付结果查询
-
支付管理
- 支付方式选择
- 支付状态追踪
- 支付记录查询
ALTER TABLE b_order ADD COLUMN pay_method VARCHAR(10) COMMENT '支付方式:alipay-支付宝,wechat-微信';
ALTER TABLE b_order ADD COLUMN pay_amount DECIMAL(10,2) COMMENT '支付金额';
ALTER TABLE b_order ADD COLUMN trade_no VARCHAR(64) COMMENT '第三方支付交易号';
ALTER TABLE b_order ADD COLUMN pay_qrcode VARCHAR(500) COMMENT '支付二维码链接';
ALTER TABLE b_order ADD COLUMN expire_time VARCHAR(30) COMMENT '支付过期时间';
ALTER TABLE b_order ADD COLUMN create_time VARCHAR(30) COMMENT '创建时间';
ALTER TABLE b_order ADD COLUMN update_time VARCHAR(30) COMMENT '更新时间';CREATE TABLE b_payment (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
order_id BIGINT NOT NULL COMMENT '订单ID',
order_number VARCHAR(64) NOT NULL COMMENT '订单编号',
pay_method VARCHAR(10) NOT NULL COMMENT '支付方式:alipay-支付宝,wechat-微信',
pay_amount DECIMAL(10,2) NOT NULL COMMENT '支付金额',
trade_no VARCHAR(64) COMMENT '第三方交易号',
pay_status VARCHAR(2) DEFAULT '0' COMMENT '支付状态:0-待支付,1-支付成功,2-支付失败',
pay_time VARCHAR(30) COMMENT '支付时间',
qrcode_url VARCHAR(500) COMMENT '二维码链接',
expire_time VARCHAR(30) COMMENT '过期时间',
create_time VARCHAR(30) COMMENT '创建时间',
update_time VARCHAR(30) COMMENT '更新时间',
INDEX idx_order_id (order_id),
INDEX idx_trade_no (trade_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付记录表';文件:pom.xml
支付宝SDK:
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.38.157.ALL</version>
</dependency>微信支付SDK:
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.12</version>
</dependency>文件:
src/main/java/com/gk/study/config/AlipayConfig.javasrc/main/java/com/gk/study/config/WechatPayConfig.javasrc/main/java/com/gk/study/config/PayConfig.java(统一配置)
内容:
- 支付宝沙箱配置
- 微信支付沙箱配置
- 模拟支付开关
文件:
src/main/java/com/gk/study/entity/Payment.javasrc/main/java/com/gk/study/dto/PayRequest.javasrc/main/java/com/gk/study/dto/PayResponse.java
文件:
src/main/java/com/gk/study/service/PayService.javasrc/main/java/com/gk/study/service/impl/AlipayServiceImpl.javasrc/main/java/com/gk/study/service/impl/WechatPayServiceImpl.javasrc/main/java/com/gk/study/service/impl/MockPayServiceImpl.java
核心方法:
// 创建支付
PayResponse createPayment(PayRequest request);
// 支付回调
void handlePayNotify(String payMethod, Map<String, String> params);
// 查询支付状态
PayResponse queryPayment(String orderNumber);
// 关闭支付
void closePayment(String orderNumber);文件:src/main/java/com/gk/study/controller/PayController.java
接口列表:
POST /api/pay/create - 创建支付
POST /api/pay/notify/alipay - 支付宝回调
POST /api/pay/notify/wechat - 微信回调
GET /api/pay/query - 查询支付状态
POST /api/pay/close - 关闭支付
POST /api/pay/mock/success - 模拟支付成功(仅开发环境)
文件:src/main/java/com/gk/study/service/impl/OrderServiceImpl.java
修改内容:
- 创建订单时计算支付金额
- 支付成功后更新订单状态
- 添加支付金额字段
文件:web/src/api/pay.ts
接口定义:
export interface PayRequest {
orderId: number;
payMethod: 'alipay' | 'wechat';
}
export interface PayResponse {
orderId: number;
orderNumber: string;
payAmount: number;
qrcodeUrl: string;
expireTime: string;
}
export function createPayment(data: PayRequest): Promise<PayResponse>;
export function queryPayment(orderNumber: string): Promise<PayResponse>;
export function mockPaySuccess(orderNumber: string): Promise<void>;文件:web/src/views/index/pay.vue
功能实现:
- 支付方式选择(支付宝/微信)
- 调用创建支付接口
- 显示支付二维码
- 轮询支付状态
- 支付成功跳转
文件:web/src/views/index/pay-result.vue
功能:
- 显示支付结果(成功/失败)
- 订单详情展示
- 返回订单列表
文件:web/src/views/index/confirm.vue
修改内容:
- 计算订单金额
- 跳转到支付页面时传递金额参数
文件:web/src/views/index/user/order-view.vue
修改内容:
- 显示支付状态
- 添加"去支付"按钮
- 支付金额显示
- 支付服务测试
- 订单服务测试
- 支付回调测试
- 完整支付流程测试
- 支付宝沙箱测试
- 微信支付沙箱测试
- 模拟支付测试
- 支付页面交互测试
- 二维码显示测试
- 支付状态轮询测试
# 支付宝沙箱配置
alipay.app-id=沙箱AppID
alipay.private-key=应用私钥
alipay.public-key=支付宝公钥
alipay.gateway=https://openapi.alipaydev.com/gateway.do
alipay.notify-url=http://域名/api/pay/notify/alipay
alipay.return-url=http://域名/pay-result# 微信支付沙箱配置
wechat.app-id=沙箱AppID
wechat.mch-id=沙箱商户号
wechat.api-key=沙箱API密钥
wechat.notify-url=http://域名/api/pay/notify/wechat// 开发环境模拟支付
if (mockPayEnabled) {
// 直接更新订单状态为已支付
order.setStatus("2"); // 2-已付款
order.setPayTime(String.valueOf(System.currentTimeMillis()));
order.setPayMethod("mock");
order.setTradeNo("MOCK_" + System.currentTimeMillis());
// 保存支付记录
// 返回成功
}- 支付配置类(3个)
- 支付实体类(3个)
- 支付服务接口和实现(4个)
- 支付控制器(1个)
- 数据库迁移脚本(2个)
- 配置文件更新
- 支付API(1个)
- 支付页面更新(1个)
- 支付结果页面(1个)
- 订单确认页面更新(1个)
- 订单列表页面更新(1个)
- 支付接口文档
- 沙箱环境配置指南
- 测试用例文档
-
支付密钥安全
- 使用环境变量存储敏感信息
- 不将密钥提交到代码仓库
- 生产环境使用配置中心
-
支付回调验证
- 验证签名防止伪造请求
- 验证订单金额一致性
- 防止重复回调
-
并发处理
- 支付回调幂等性
- 订单状态并发更新
- 分布式锁机制
-
沙箱环境不稳定
- 准备模拟支付作为备选方案
- 记录详细的错误日志
-
网络延迟
- 支付二维码生成超时处理
- 支付状态轮询间隔优化
| 阶段 | 工作量 | 时间 |
|---|---|---|
| 数据库设计 | 0.5人天 | 0.5天 |
| 后端开发 | 2人天 | 2天 |
| 前端开发 | 1.5人天 | 1.5天 |
| 测试调试 | 1人天 | 1天 |
| 总计 | 5人天 | 5天 |
- 注册支付宝开放平台账号,获取沙箱配置
- 注册微信支付商户平台,获取沙箱配置
- 准备测试数据
- 执行数据库迁移脚本
- 更新实体类
- 测试数据访问
- 添加SDK依赖
- 创建配置类
- 实现支付服务
- 实现支付控制器
- 单元测试
- 创建支付API
- 更新支付页面
- 创建支付结果页面
- 集成测试
- 模拟支付流程测试
- 沙箱支付测试
- 异常场景测试
- 用户可以选择支付宝或微信支付
- 支付二维码正常生成和显示
- 支付成功后订单状态正确更新
- 支付记录正确保存
- 支付结果页面正确显示
- 支付二维码生成时间 < 3秒
- 支付回调处理时间 < 1秒
- 支付状态查询响应时间 < 500ms
- 支付密钥不暴露在代码中
- 支付回调签名验证正确
- 订单金额验证正确
- 防止重复支付
- 支付宝沙箱环境使用指南
- 微信支付Native支付集成
- Spring Boot支付系统设计
确认此计划后,我将:
- 创建数据库迁移脚本
- 添加支付SDK依赖
- 实现支付核心功能
- 更新前端支付页面
- 完成模拟支付流程
请确认是否开始实施?