8.3 KiB
8.3 KiB
🧪 核心支付流程 - 测试指南
创建时间: 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: 钱包支付
步骤
- 打开微信开发者工具
- 进入支付页面:
/pages/payment/index?orderId=1 - 检查钱包余额显示:应显示 ¥500.00
- 选择"钱包支付"
- 点击"立即支付"
预期结果
- ✅ 钱包余额正确显示
- ✅ 选中钱包支付后显示绿色边框
- ✅ 支付成功后跳转到订单列表
- ✅ 钱包余额减少对应金额
验证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张可用"
- 点击"次卡支付"
- 在弹窗中选择次卡
- 点击"立即支付"
预期结果
- ✅ 次卡数量正确显示
- ✅ 弹窗显示次卡列表
- ✅ 选中次卡后弹窗关闭
- ✅ 支付成功后次卡剩余时长减少
验证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个可用"
- 点击"套餐支付"
- 在弹窗中选择套餐
- 点击"立即支付"
预期结果
- ✅ 套餐数量正确显示
- ✅ 弹窗显示套餐列表
- ✅ 选中套餐后弹窗关闭
- ✅ 支付成功后套餐剩余次数减少
验证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张可用"
- 点击优惠券区域
- 在弹窗中选择优惠券
- 检查实付金额:应减少20元
- 选择支付方式并支付
预期结果
- ✅ 优惠券数量正确显示
- ✅ 弹窗显示优惠券列表
- ✅ 选中优惠券后显示优惠金额
- ✅ 实付金额正确计算(原价-优惠)
- ✅ 支付成功后优惠券状态变为已使用
验证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: 组合支付(钱包+优惠券)
步骤
- 进入支付页面
- 先选择优惠券
- 再选择钱包支付
- 检查实付金额
- 点击"立即支付"
预期结果
- ✅ 实付金额 = 原价 - 优惠券金额
- ✅ 钱包扣款金额 = 实付金额
- ✅ 优惠券状态变为已使用
测试6: 余额不足
步骤
- 修改钱包余额为10元
- 进入支付页面(订单金额150元)
- 尝试选择钱包支付
预期结果
- ✅ 钱包支付选项显示半透明
- ✅ 余额显示红色
- ✅ 点击后提示"钱包余额不足"
- ✅ 无法选择钱包支付
测试7: 无可用次卡
步骤
- 删除所有次卡或设置剩余时长为0
- 进入支付页面
- 检查次卡选项
预期结果
- ✅ 次卡支付选项不显示
- ✅ 或显示"0张可用"且禁用
测试8: 无可用优惠券
步骤
- 删除所有优惠券
- 进入支付页面
- 点击优惠券区域
预期结果
- ✅ 显示"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: 钱包余额不显示
原因: 后端接口未启动或用户没有钱包记录
解决:
- 检查后端服务
- 执行SQL创建钱包记录
问题2: 次卡/套餐不显示
原因: 数据库中没有可用的次卡/套餐
解决: 执行SQL创建测试数据
问题3: 优惠券不可用
原因: 订单金额不满足优惠券最低金额要求
解决: 检查优惠券的min_amount字段
问题4: 支付失败
原因: 后端支付逻辑错误或数据库约束
解决:
- 查看后端日志
- 检查数据库表结构
- 验证支付参数
✅ 测试检查清单
功能测试
- 钱包支付正常
- 次卡支付正常
- 套餐支付正常
- 优惠券使用正常
- 组合支付正常
- 余额不足提示正常
- 无可用次卡提示正常
- 无可用优惠券提示正常
UI测试
- 支付方式列表显示正常
- 选中状态显示正常
- 弹窗显示正常
- 弹窗关闭正常
- 实付金额计算正确
- 支付按钮状态正常
数据测试
- 钱包余额更新正确
- 次卡时长扣减正确
- 套餐次数扣减正确
- 优惠券状态更新正确
- 订单状态更新正确
- 支付记录创建正确
📞 问题反馈
如测试中发现问题,请记录:
- 测试步骤
- 预期结果
- 实际结果
- 错误信息
- 控制台日志
- 网络请求详情
测试完成时间: ___________
测试人员: ___________
测试结果: ⭕ 通过 / ❌ 未通过