Files
shop-platform/src/addon/huaweipay/MANUAL_TEST_GUIDE.md

8.5 KiB
Raw Blame History

华为支付手动测试指南

1. 测试环境准备

1.1 配置文件准备

1.1.1 证书准备

确保在 mock/cert/ 目录下有以下证书文件:

  • merchant_private_key.pem - 商户应用私钥证书
  • huawei_public_key.pem - 华为平台公钥证书

1.1.2 配置文件设置

编辑 tests/mock/data.yml 文件,确保以下配置项正确设置:

# 华为支付测试配置
HuaweiPay:
  # 沙盒模式
  sandbox: true
  # 应用ID
  app_id: 'test_app_id'
  # 商户号
  merc_no: 'test_merc_no'
  # 授权ID
  mch_auth_id: 'test_mch_auth_id'
  # 证书文件路径(相对于项目根目录)
  private_key: 'mock/cert/merchant_private_key.pem'
  # 私钥文本内容
  private_key_text: |
    -----BEGIN PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDLW1j8a1KQw7X2
    ...
    -----END PRIVATE KEY-----
  # 华为公钥文件路径(相对于项目根目录)
  huawei_public_key: 'mock/cert/huawei_public_key.pem'
  # 华为公钥文本内容
  huawei_public_key_text: |
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw0T1JZ7X2Y5
    ...
    -----END PUBLIC KEY-----
  # 异步通知URL
  notify_url: 'https://your-domain.com/huaweipay/notify'
  # 同步返回URL
  return_url: 'https://your-domain.com/huaweipay/return'

1.2 系统配置

  1. 登录系统后台
  2. 进入「支付配置」页面
  3. 找到「华为支付」配置项
  4. 填写以下信息:
    • 应用ID
    • 商户号
    • 授权ID
    • 私钥(可以选择文件上传或文本输入)
    • 华为公钥(可以选择文件上传或文本输入)
    • 异步通知URL
    • 同步返回URL
  5. 开启华为支付

2. 单元测试

2.1 运行证书格式化测试

./vendor/bin/phpunit addon/huaweipay/tests/HuaweiPayConfigTest.php

2.2 运行支付模型测试

./vendor/bin/phpunit addon/huaweipay/tests/PayModelTest.php

3. 功能测试

3.1 H5支付测试

  1. 进入系统前台
  2. 选择一个商品加入购物车
  3. 提交订单
  4. 选择「华为支付」作为支付方式
  5. 点击「立即支付」
  6. 系统将跳转到华为H5支付页面
  7. 测试不同支付场景:
    • 成功支付
    • 取消支付
    • 超时未支付

3.2 微信小程序支付测试

  1. 打开微信开发者工具
  2. 导入小程序项目
  3. 登录小程序账号
  4. 选择一个商品加入购物车
  5. 提交订单
  6. 选择「华为支付」作为支付方式
  7. 点击「立即支付」
  8. 调用华为微信小程序支付接口
  9. 测试不同支付场景:
    • 成功支付
    • 取消支付
    • 超时未支付

3.3 APP支付测试

  1. 编译APP项目
  2. 在测试设备上安装APP
  3. 登录APP账号
  4. 选择一个商品加入购物车
  5. 提交订单
  6. 选择「华为支付」作为支付方式
  7. 点击「立即支付」
  8. 调用华为APP支付接口
  9. 测试不同支付场景:
    • 成功支付
    • 取消支付
    • 超时未支付

4. 回调测试

4. 回调测试

测试目标:验证华为支付异步通知处理流程是否正常工作,包括签名验证和订单状态更新。

4.1 测试准备

  1. 配置回调地址

    • 在华为支付模型的配置中设置回调URL通常为http://your-domain.com/addon/huaweipay/shop/controller/pay/notify
    • 开发环境可使用ngrok等工具进行本地端口映射ngrok http 80
  2. 了解回调处理流程

    • 华为支付异步回调通过PayNotify事件触发
    • 事件监听器:addon\huaweipay\event\PayNotify
    • 实际处理逻辑:addon\huaweipay\model\Pay::notify()方法

4.2 模拟回调测试

方法一使用Postman模拟回调请求

  1. 构造回调参数
{
  "pay_type": "huaweipay",
  "out_trade_no": "TEST_ORDER_202310100001",
  "trade_no": "HWPAY2023101000000001",
  "total_amount": "1.00",
  "trade_status": "SUCCESS",
  "timestamp": "1696944000000",
  "sign": "xxxxxxxxx",
  "app_type": "h5"
}
  1. 发送POST请求

    • URL: http://your-domain.com/addon/huaweipay/shop/controller/pay/notify
    • Method: POST
    • Body: 选择raw JSON格式粘贴上面的测试数据
  2. 验证回调结果

    • 检查响应是否为"success"字符串
    • 查看系统日志(runtime/log目录)
    • 确认订单状态是否已更新为已支付

方法二:使用命令行工具

curl -X POST \
  http://your-domain.com/addon/huaweipay/shop/controller/pay/notify \
  -H 'Content-Type: application/json' \
  -d '{"pay_type":"huaweipay","out_trade_no":"TEST_ORDER_202310100001","trade_no":"HWPAY2023101000000001","total_amount":"1.00","trade_status":"SUCCESS","timestamp":"1696944000000","sign":"xxxxxxxxx"}'

4.3 回调签名验证测试

测试目标:验证回调签名验证逻辑是否正常工作

测试步骤

  1. 构造正确的回调参数和签名
  2. 发送回调请求,验证处理成功
  3. 修改签名为错误值,重新发送请求
  4. 验证签名错误时返回"fail"

测试要点

  • 检查HuaweiPayClient::verifyNotify()方法的实现
  • 确保使用正确的公钥进行签名验证
  • 验证失败时记录详细日志

日志检查

# 签名验证成功日志
[info] 华为支付回调参数: {"out_trade_no":"TEST_ORDER_202310100001",...}
[info] 华为支付回调处理成功,订单号: TEST_ORDER_202310100001

# 签名验证失败日志
[error] 华为支付回调签名验证失败: {"out_trade_no":"TEST_ORDER_202310100001",...}

注意事项

  • 回调请求需要包含正确的签名,使用华为支付公钥进行验证
  • 回调处理完成后,必须向华为服务器返回"success"字符串否则华为会持续发送通知默认重试间隔为15s,30s,1m,2m,5m,10m,30m,1h,2h,6h,15h
  • 回调处理逻辑需要支持幂等性,防止重复处理同一笔订单

5. 常见问题排查

5.1 证书加载失败

问题现象: 系统提示「加载商户应用私有证书失败」或「加载华为平台支付证书失败」

解决方法:

  • 检查证书文件路径是否正确
  • 验证证书格式是否符合要求PEM格式
  • 确保证书内容没有多余的空格或换行
  • 检查文件权限是否正确

5.2 签名验证失败

问题现象: 系统提示「签名验证失败」或华为支付API返回签名错误

解决方法:

  • 检查私钥和公钥是否匹配
  • 验证签名算法是否正确RSA2
  • 确保请求参数没有被篡改
  • 检查时间戳是否在有效范围内

5.3 支付接口调用失败

问题现象: 调用华为支付API返回错误码

解决方法:

  • 检查API请求参数是否完整
  • 验证参数格式是否符合要求
  • 检查网络连接是否正常
  • 查看华为支付API文档了解错误码含义

5.4 订单状态更新失败

问题现象: 支付成功后,系统订单状态未更新

解决方法:

  • 检查异步通知URL是否可访问
  • 验证通知签名是否正确
  • 查看系统日志,了解处理过程
  • 检查订单号是否正确匹配

6. 测试注意事项

  1. 沙盒环境: 测试时建议使用华为支付沙盒环境,避免产生真实交易
  2. 日志记录: 开启详细日志记录,便于排查问题
  3. 安全防护: 测试完成后,及时清理测试数据和敏感信息
  4. 兼容性测试: 确保在不同浏览器、设备上都能正常支付
  5. 性能测试: 测试高并发场景下的支付处理能力

7. 测试报告模板

# 华为支付测试报告

## 测试基本信息
- 测试时间YYYY-MM-DD
- 测试环境:开发环境/测试环境/生产环境
- 测试人员XXX

## 测试内容

### 7.1 配置测试
- [ ] 证书文件存在性检查
- [ ] 配置文件格式检查
- [ ] 证书加载测试

### 7.2 功能测试
- [ ] H5支付测试
  - [ ] 成功支付流程
  - [ ] 取消支付流程
  - [ ] 超时未支付流程
- [ ] 微信小程序支付测试
  - [ ] 成功支付流程
  - [ ] 取消支付流程
  - [ ] 超时未支付流程
- [ ] APP支付测试
  - [ ] 成功支付流程
  - [ ] 取消支付流程
  - [ ] 超时未支付流程

### 7.3 回调测试
- [ ] 异步通知处理
- [ ] 同步返回处理
- [ ] 订单状态更新

## 测试结果

### 7.1 通过的测试
- ...

### 7.2 失败的测试
- ...

### 7.3 问题总结

| 问题描述 | 严重程度 | 状态 | 解决方案 |
|---------|---------|------|---------|
| ... | 高/中/低 | 已解决/待解决 | ... |

## 测试结论

综合测试结果,华为支付模块是否满足上线要求:
- [ ] 是
- [ ] 否(需要进一步修复)

## 建议

1. ...
2. ...
3. ...