Skip to content

Latest commit

 

History

History
427 lines (337 loc) · 10.6 KB

Payment-Development-Plan.md

File metadata and controls

427 lines (337 loc) · 10.6 KB

支付接口完善开发计划

📊 项目现状分析

当前状态

  • ✅ 订单基础功能(创建、查询、更新、删除)
  • ✅ 订单状态管理(状态码:1-未付款,7-已取消)
  • ❌ 支付功能缺失(前端显示"暂无支付功能")
  • ❌ 数据库缺少支付相关字段
  • ❌ 没有支付SDK依赖

技术栈

  • 后端:Spring Boot 2.5.5 + MyBatis-Plus
  • 前端:Vue 3 + Vite + Ant Design Vue
  • 数据库:MySQL 8.0

🎯 开发目标

核心功能

  1. 支付宝支付集成

    • 沙箱环境对接
    • 扫码支付(当面付)
    • 支付回调处理
  2. 微信支付集成

    • 沙箱环境对接
    • Native支付(扫码支付)
    • 支付回调处理
  3. 模拟支付功能

    • 开发环境模拟支付流程
    • 支付状态同步
    • 支付结果查询
  4. 支付管理

    • 支付方式选择
    • 支付状态追踪
    • 支付记录查询

📋 详细开发任务

阶段一:数据库设计(预计 0.5 天)

1.1 扩展订单表字段

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 '更新时间';

1.2 创建支付记录表

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='支付记录表';

阶段二:后端开发(预计 2 天)

2.1 添加支付SDK依赖

文件: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>

2.2 创建支付配置类

文件:

  • src/main/java/com/gk/study/config/AlipayConfig.java
  • src/main/java/com/gk/study/config/WechatPayConfig.java
  • src/main/java/com/gk/study/config/PayConfig.java(统一配置)

内容:

  • 支付宝沙箱配置
  • 微信支付沙箱配置
  • 模拟支付开关

2.3 创建支付实体类

文件:

  • src/main/java/com/gk/study/entity/Payment.java
  • src/main/java/com/gk/study/dto/PayRequest.java
  • src/main/java/com/gk/study/dto/PayResponse.java

2.4 创建支付服务层

文件:

  • src/main/java/com/gk/study/service/PayService.java
  • src/main/java/com/gk/study/service/impl/AlipayServiceImpl.java
  • src/main/java/com/gk/study/service/impl/WechatPayServiceImpl.java
  • src/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);

2.5 创建支付控制器

文件: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  - 模拟支付成功(仅开发环境)

2.6 更新订单服务

文件:src/main/java/com/gk/study/service/impl/OrderServiceImpl.java

修改内容:

  • 创建订单时计算支付金额
  • 支付成功后更新订单状态
  • 添加支付金额字段

阶段三:前端开发(预计 1.5 天)

3.1 创建支付API

文件: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>;

3.2 更新支付页面

文件:web/src/views/index/pay.vue

功能实现:

  • 支付方式选择(支付宝/微信)
  • 调用创建支付接口
  • 显示支付二维码
  • 轮询支付状态
  • 支付成功跳转

3.3 创建支付结果页面

文件:web/src/views/index/pay-result.vue

功能:

  • 显示支付结果(成功/失败)
  • 订单详情展示
  • 返回订单列表

3.4 更新订单确认页

文件:web/src/views/index/confirm.vue

修改内容:

  • 计算订单金额
  • 跳转到支付页面时传递金额参数

3.5 更新订单列表页

文件:web/src/views/index/user/order-view.vue

修改内容:

  • 显示支付状态
  • 添加"去支付"按钮
  • 支付金额显示

阶段四:测试与调试(预计 1 天)

4.1 单元测试

  • 支付服务测试
  • 订单服务测试
  • 支付回调测试

4.2 集成测试

  • 完整支付流程测试
  • 支付宝沙箱测试
  • 微信支付沙箱测试
  • 模拟支付测试

4.3 前端测试

  • 支付页面交互测试
  • 二维码显示测试
  • 支付状态轮询测试

🔧 技术实现要点

支付宝沙箱配置

# 支付宝沙箱配置
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个)

文档

  • 支付接口文档
  • 沙箱环境配置指南
  • 测试用例文档

⚠️ 风险与注意事项

安全风险

  1. 支付密钥安全

    • 使用环境变量存储敏感信息
    • 不将密钥提交到代码仓库
    • 生产环境使用配置中心
  2. 支付回调验证

    • 验证签名防止伪造请求
    • 验证订单金额一致性
    • 防止重复回调
  3. 并发处理

    • 支付回调幂等性
    • 订单状态并发更新
    • 分布式锁机制

技术风险

  1. 沙箱环境不稳定

    • 准备模拟支付作为备选方案
    • 记录详细的错误日志
  2. 网络延迟

    • 支付二维码生成超时处理
    • 支付状态轮询间隔优化

📅 时间估算

阶段 工作量 时间
数据库设计 0.5人天 0.5天
后端开发 2人天 2天
前端开发 1.5人天 1.5天
测试调试 1人天 1天
总计 5人天 5天

🚀 实施步骤

第一步:环境准备

  1. 注册支付宝开放平台账号,获取沙箱配置
  2. 注册微信支付商户平台,获取沙箱配置
  3. 准备测试数据

第二步:数据库改造

  1. 执行数据库迁移脚本
  2. 更新实体类
  3. 测试数据访问

第三步:后端开发

  1. 添加SDK依赖
  2. 创建配置类
  3. 实现支付服务
  4. 实现支付控制器
  5. 单元测试

第四步:前端开发

  1. 创建支付API
  2. 更新支付页面
  3. 创建支付结果页面
  4. 集成测试

第五步:联调测试

  1. 模拟支付流程测试
  2. 沙箱支付测试
  3. 异常场景测试

✅ 验收标准

功能验收

  • 用户可以选择支付宝或微信支付
  • 支付二维码正常生成和显示
  • 支付成功后订单状态正确更新
  • 支付记录正确保存
  • 支付结果页面正确显示

性能验收

  • 支付二维码生成时间 < 3秒
  • 支付回调处理时间 < 1秒
  • 支付状态查询响应时间 < 500ms

安全验收

  • 支付密钥不暴露在代码中
  • 支付回调签名验证正确
  • 订单金额验证正确
  • 防止重复支付

📚 参考资料

官方文档

技术博客

  • 支付宝沙箱环境使用指南
  • 微信支付Native支付集成
  • Spring Boot支付系统设计

🎯 下一步行动

确认此计划后,我将:

  1. 创建数据库迁移脚本
  2. 添加支付SDK依赖
  3. 实现支付核心功能
  4. 更新前端支付页面
  5. 完成模拟支付流程

请确认是否开始实施?