猫妈狗爸伴宠师小程序后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
4.2 KiB

  1. # 微信退款功能使用说明
  2. ## 功能概述
  3. 本项目已集成微信支付退款功能,当用户取消订单时,系统会自动申请微信退款。
  4. ## 主要组件
  5. ### 1. 微信退款工具类
  6. - **文件位置**: `ruoyi-catdog/src/main/java/com/ruoyi/applet/utils/WechatRefundUtil.java`
  7. - **功能**: 封装微信支付V3退款API,提供退款申请功能
  8. - **主要方法**: `applyRefund(RefundRequest request)`
  9. ### 2. 取消订单接口(已集成退款功能)
  10. - **文件位置**: `ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallOrderController.java`
  11. - **接口路径**: `POST /applet/mall/order/orderCancel`
  12. - **功能**: 取消订单并自动申请退款
  13. ### 3. 退款回调接口
  14. - **文件位置**: `ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/WechatRefundNotifyController.java`
  15. - **接口路径**: `POST /no-auth/wechat/refund`
  16. - **功能**: 处理微信退款通知
  17. ## 配置要求
  18. ### 1. 微信支付配置
  19. 确保在 `application.yml` 中正确配置了微信支付参数:
  20. ```yaml
  21. wechat:
  22. enabled: true
  23. appId: your_app_id
  24. merchantId: your_merchant_id
  25. privateKeyPath: path/to/your/private_key.pem
  26. merchantSerialNumber: your_merchant_serial_number
  27. apiV3key: your_api_v3_key
  28. notifyUrl: https://your-domain.com/prod-api/no-auth/wechat/notify
  29. ```
  30. ### 2. 退款通知地址
  31. 在微信商户平台配置退款通知地址:
  32. ```
  33. https://your-domain.com/prod-api/no-auth/wechat/refund
  34. ```
  35. ## 使用流程
  36. ### 1. 取消订单并申请退款
  37. ```http
  38. POST /applet/mall/order/orderCancel
  39. Content-Type: application/json
  40. {
  41. "id": 123456,
  42. "remark": "用户取消订单"
  43. }
  44. ```
  45. **响应示例**:
  46. ```json
  47. {
  48. "code": 200,
  49. "msg": "订单取消成功,退款申请已提交:退款申请成功,退款单号:REFUND_1234567890"
  50. }
  51. ```
  52. ### 2. 退款流程
  53. 1. 用户调用取消订单接口
  54. 2. 系统取消订单状态
  55. 3. 检查订单是否已支付
  56. 4. 如果已支付,自动申请微信退款
  57. 5. 记录退款历史
  58. 6. 微信异步通知退款结果
  59. ## 退款状态说明
  60. - **SUCCESS**: 退款成功
  61. - **CLOSED**: 退款关闭
  62. - **PROCESSING**: 退款处理中
  63. - **ABNORMAL**: 退款异常
  64. ## 注意事项
  65. ### 1. 签名验证
  66. - 退款工具类使用项目中已有的 `WechatPayUtil` 进行签名
  67. - 确保私钥文件路径正确且可访问
  68. ### 2. 金额单位
  69. - 微信支付API使用分为单位
  70. - 系统自动将元转换为分
  71. ### 3. 退款限制
  72. - 只能对已支付的订单申请退款
  73. - 退款金额不能超过原订单金额
  74. - 部分退款需要特殊处理
  75. ### 4. 错误处理
  76. - 网络异常会自动重试
  77. - 签名失败会记录详细日志
  78. - 退款失败会返回具体错误信息
  79. ## 扩展功能
  80. ### 1. 部分退款
  81. 如需支持部分退款,可以修改 `applyWechatRefund` 方法:
  82. ```java
  83. // 设置部分退款金额
  84. amountReq.refund = partialRefundAmount.multiply(new BigDecimal(100)).longValue();
  85. ```
  86. ### 2. 退款查询
  87. 可以添加退款查询接口:
  88. ```java
  89. @GetMapping("/refund/query/{refundNo}")
  90. public AjaxResult queryRefund(@PathVariable String refundNo) {
  91. // 实现退款查询逻辑
  92. }
  93. ```
  94. ### 3. 退款统计
  95. 可以添加退款统计功能:
  96. ```java
  97. @GetMapping("/refund/statistics")
  98. public AjaxResult getRefundStatistics() {
  99. // 实现退款统计逻辑
  100. }
  101. ```
  102. ## 测试建议
  103. ### 1. 沙箱环境测试
  104. - 使用微信支付沙箱环境进行测试
  105. - 验证退款申请和回调功能
  106. ### 2. 日志监控
  107. - 监控退款申请日志
  108. - 监控退款回调日志
  109. - 设置告警机制
  110. ### 3. 异常测试
  111. - 测试网络异常情况
  112. - 测试签名失败情况
  113. - 测试金额超限情况
  114. ## 常见问题
  115. ### Q1: 退款申请失败怎么办?
  116. A1: 检查以下几点:
  117. - 微信支付配置是否正确
  118. - 私钥文件是否存在且可读
  119. - 订单状态是否为已支付
  120. - 网络连接是否正常
  121. ### Q2: 退款回调没有收到怎么办?
  122. A2: 检查以下几点:
  123. - 退款通知地址是否正确配置
  124. - 服务器防火墙是否开放相应端口
  125. - 回调接口是否正常响应
  126. ### Q3: 如何查看退款历史?
  127. A3: 退款历史记录在 `oms_wechat_payment_history` 表中,可以通过以下方式查询:
  128. - 通过订单ID查询
  129. - 通过退款单号查询
  130. - 通过交易类型(opType=3)查询
  131. ## 技术支持
  132. 如有问题,请联系开发团队或查看相关日志文件。