peixue-dev/Archive/peidu-temp-files/docs/🧪核心支付流程-测试指南-2026-01-23.md

8.3 KiB
Raw Blame History

🧪 核心支付流程 - 测试指南

创建时间: 2026-01-23
测试范围: 钱包、次卡、套餐、优惠券支付功能


📋 测试前准备

1. 确保后端服务运行

# 检查后端是否启动
curl http://localhost:8080/api/wallet/balance?userId=1

2. 确保前端已编译

cd peidu/uniapp
npm run dev:mp-weixin

3. 准备测试数据

创建测试用户钱包

-- 插入钱包记录
INSERT INTO wallet (user_id, balance, frozen_balance, total_recharge, total_withdraw, create_time, update_time)
VALUES (1, 500.00, 0.00, 500.00, 0.00, NOW(), NOW());

创建测试次卡

-- 插入次卡记录
INSERT INTO time_card (user_id, card_no, card_name, card_type, price, total_hours, used_hours, remaining_hours, status, start_date, expire_date, create_time, update_time)
VALUES (1, 'TC20260123001', '标准次卡', 'standard', 200.00, 10, 0, 10, 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 YEAR), NOW(), NOW());

创建测试套餐

-- 插入套餐记录
INSERT INTO `package` (package_name, package_type, price, total_times, description, status, create_time, update_time)
VALUES ('基础套餐', 'basic', 300.00, 5, '5次陪伴服务', 1, NOW(), NOW());

-- 用户购买套餐
INSERT INTO user_package (user_id, package_id, package_name, total_times, used_times, remaining_times, status, purchase_time, expire_time, create_time, update_time)
VALUES (1, 1, '基础套餐', 5, 0, 5, 1, NOW(), DATE_ADD(NOW(), INTERVAL 1 YEAR), NOW(), NOW());

创建测试优惠券

-- 插入优惠券
INSERT INTO coupon (coupon_name, coupon_type, discount_amount, min_amount, total_quantity, received_quantity, used_quantity, start_time, end_time, status, create_time, update_time)
VALUES ('新用户优惠券', 'discount', 20.00, 100.00, 100, 0, 0, NOW(), DATE_ADD(NOW(), INTERVAL 1 MONTH), 1, NOW(), NOW());

-- 用户领取优惠券
INSERT INTO user_coupon (user_id, coupon_id, coupon_name, coupon_type, discount_amount, min_amount, status, receive_time, expire_time, create_time, update_time)
VALUES (1, 1, '新用户优惠券', 'discount', 20.00, 100.00, 0, NOW(), DATE_ADD(NOW(), INTERVAL 1 MONTH), NOW(), NOW());

创建测试订单

-- 插入测试订单
INSERT INTO `order` (order_no, user_id, service_name, service_date, time_slot, duration, price, pay_amount, status, create_time, update_time)
VALUES ('ORD20260123001', 1, '陪伴服务', CURDATE(), '14:00-16:00', 2, 150.00, 150.00, 0, NOW(), NOW());

🧪 测试用例

测试1: 钱包支付

步骤

  1. 打开微信开发者工具
  2. 进入支付页面:/pages/payment/index?orderId=1
  3. 检查钱包余额显示:应显示 ¥500.00
  4. 选择"钱包支付"
  5. 点击"立即支付"

预期结果

  • 钱包余额正确显示
  • 选中钱包支付后显示绿色边框
  • 支付成功后跳转到订单列表
  • 钱包余额减少对应金额

验证SQL

-- 检查钱包余额
SELECT balance FROM wallet WHERE user_id = 1;

-- 检查交易记录
SELECT * FROM wallet_transaction WHERE user_id = 1 ORDER BY create_time DESC LIMIT 1;

测试2: 次卡支付

步骤

  1. 进入支付页面
  2. 检查次卡选项:应显示"1张可用"
  3. 点击"次卡支付"
  4. 在弹窗中选择次卡
  5. 点击"立即支付"

预期结果

  • 次卡数量正确显示
  • 弹窗显示次卡列表
  • 选中次卡后弹窗关闭
  • 支付成功后次卡剩余时长减少

验证SQL

-- 检查次卡剩余时长
SELECT remaining_hours FROM time_card WHERE user_id = 1;

-- 检查次卡使用记录
SELECT * FROM time_card_usage WHERE card_id = 1 ORDER BY use_time DESC LIMIT 1;

测试3: 套餐支付

步骤

  1. 进入支付页面
  2. 检查套餐选项:应显示"1个可用"
  3. 点击"套餐支付"
  4. 在弹窗中选择套餐
  5. 点击"立即支付"

预期结果

  • 套餐数量正确显示
  • 弹窗显示套餐列表
  • 选中套餐后弹窗关闭
  • 支付成功后套餐剩余次数减少

验证SQL

-- 检查套餐剩余次数
SELECT remaining_times FROM user_package WHERE user_id = 1;

-- 检查套餐使用记录
SELECT * FROM package_usage WHERE user_package_id = 1 ORDER BY use_time DESC LIMIT 1;

测试4: 优惠券使用

步骤

  1. 进入支付页面
  2. 检查优惠券区域:应显示"1张可用"
  3. 点击优惠券区域
  4. 在弹窗中选择优惠券
  5. 检查实付金额应减少20元
  6. 选择支付方式并支付

预期结果

  • 优惠券数量正确显示
  • 弹窗显示优惠券列表
  • 选中优惠券后显示优惠金额
  • 实付金额正确计算(原价-优惠)
  • 支付成功后优惠券状态变为已使用

验证SQL

-- 检查优惠券状态
SELECT status FROM user_coupon WHERE user_id = 1 AND coupon_id = 1;
-- status应该从0变为1

-- 检查订单优惠金额
SELECT coupon_amount FROM `order` WHERE order_no = 'ORD20260123001';

测试5: 组合支付(钱包+优惠券)

步骤

  1. 进入支付页面
  2. 先选择优惠券
  3. 再选择钱包支付
  4. 检查实付金额
  5. 点击"立即支付"

预期结果

  • 实付金额 = 原价 - 优惠券金额
  • 钱包扣款金额 = 实付金额
  • 优惠券状态变为已使用

测试6: 余额不足

步骤

  1. 修改钱包余额为10元
  2. 进入支付页面订单金额150元
  3. 尝试选择钱包支付

预期结果

  • 钱包支付选项显示半透明
  • 余额显示红色
  • 点击后提示"钱包余额不足"
  • 无法选择钱包支付

测试7: 无可用次卡

步骤

  1. 删除所有次卡或设置剩余时长为0
  2. 进入支付页面
  3. 检查次卡选项

预期结果

  • 次卡支付选项不显示
  • 或显示"0张可用"且禁用

测试8: 无可用优惠券

步骤

  1. 删除所有优惠券
  2. 进入支付页面
  3. 点击优惠券区域

预期结果

  • 显示"0张可用"
  • 点击后提示"暂无可用优惠券"

🔍 调试技巧

1. 查看控制台日志

// 在微信开发者工具中打开控制台
// 查看以下日志:
// - 加载订单信息
// - 加载钱包余额
// - 加载次卡列表
// - 加载套餐列表
// - 加载优惠券列表
// - 支付参数
// - 支付响应

2. 检查网络请求

在微信开发者工具的Network标签中查看
- GET /api/wallet/balance
- GET /api/timecard/available
- GET /api/package/my
- GET /api/user-coupon/available-for-order
- POST /api/order/pay

3. 检查数据库

-- 检查订单状态
SELECT * FROM `order` WHERE order_no = 'ORD20260123001';

-- 检查支付记录
SELECT * FROM payment_record WHERE order_id = 1;

-- 检查钱包交易
SELECT * FROM wallet_transaction WHERE user_id = 1 ORDER BY create_time DESC;

⚠️ 常见问题

问题1: 钱包余额不显示

原因: 后端接口未启动或用户没有钱包记录
解决:

  1. 检查后端服务
  2. 执行SQL创建钱包记录

问题2: 次卡/套餐不显示

原因: 数据库中没有可用的次卡/套餐
解决: 执行SQL创建测试数据

问题3: 优惠券不可用

原因: 订单金额不满足优惠券最低金额要求
解决: 检查优惠券的min_amount字段

问题4: 支付失败

原因: 后端支付逻辑错误或数据库约束
解决:

  1. 查看后端日志
  2. 检查数据库表结构
  3. 验证支付参数

测试检查清单

功能测试

  • 钱包支付正常
  • 次卡支付正常
  • 套餐支付正常
  • 优惠券使用正常
  • 组合支付正常
  • 余额不足提示正常
  • 无可用次卡提示正常
  • 无可用优惠券提示正常

UI测试

  • 支付方式列表显示正常
  • 选中状态显示正常
  • 弹窗显示正常
  • 弹窗关闭正常
  • 实付金额计算正确
  • 支付按钮状态正常

数据测试

  • 钱包余额更新正确
  • 次卡时长扣减正确
  • 套餐次数扣减正确
  • 优惠券状态更新正确
  • 订单状态更新正确
  • 支付记录创建正确

📞 问题反馈

如测试中发现问题,请记录:

  1. 测试步骤
  2. 预期结果
  3. 实际结果
  4. 错误信息
  5. 控制台日志
  6. 网络请求详情

测试完成时间: ___________
测试人员: ___________
测试结果: 通过 / 未通过