|
|
- # 微信退款功能使用说明
-
- ## 功能概述
-
- 本项目已集成微信支付退款功能,当用户取消订单时,系统会自动申请微信退款。
-
- ## 主要组件
-
- ### 1. 微信退款工具类
- - **文件位置**: `ruoyi-catdog/src/main/java/com/ruoyi/applet/utils/WechatRefundUtil.java`
- - **功能**: 封装微信支付V3退款API,提供退款申请功能
- - **主要方法**: `applyRefund(RefundRequest request)`
-
- ### 2. 取消订单接口(已集成退款功能)
- - **文件位置**: `ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallOrderController.java`
- - **接口路径**: `POST /applet/mall/order/orderCancel`
- - **功能**: 取消订单并自动申请退款
-
- ### 3. 退款回调接口
- - **文件位置**: `ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/WechatRefundNotifyController.java`
- - **接口路径**: `POST /no-auth/wechat/refund`
- - **功能**: 处理微信退款通知
-
- ## 配置要求
-
- ### 1. 微信支付配置
- 确保在 `application.yml` 中正确配置了微信支付参数:
-
- ```yaml
- wechat:
- enabled: true
- appId: your_app_id
- merchantId: your_merchant_id
- privateKeyPath: path/to/your/private_key.pem
- merchantSerialNumber: your_merchant_serial_number
- apiV3key: your_api_v3_key
- notifyUrl: https://your-domain.com/prod-api/no-auth/wechat/notify
- ```
-
- ### 2. 退款通知地址
- 在微信商户平台配置退款通知地址:
- ```
- https://your-domain.com/prod-api/no-auth/wechat/refund
- ```
-
- ## 使用流程
-
- ### 1. 取消订单并申请退款
- ```http
- POST /applet/mall/order/orderCancel
- Content-Type: application/json
-
- {
- "id": 123456,
- "remark": "用户取消订单"
- }
- ```
-
- **响应示例**:
- ```json
- {
- "code": 200,
- "msg": "订单取消成功,退款申请已提交:退款申请成功,退款单号:REFUND_1234567890"
- }
- ```
-
- ### 2. 退款流程
- 1. 用户调用取消订单接口
- 2. 系统取消订单状态
- 3. 检查订单是否已支付
- 4. 如果已支付,自动申请微信退款
- 5. 记录退款历史
- 6. 微信异步通知退款结果
-
- ## 退款状态说明
-
- - **SUCCESS**: 退款成功
- - **CLOSED**: 退款关闭
- - **PROCESSING**: 退款处理中
- - **ABNORMAL**: 退款异常
-
- ## 注意事项
-
- ### 1. 签名验证
- - 退款工具类使用项目中已有的 `WechatPayUtil` 进行签名
- - 确保私钥文件路径正确且可访问
-
- ### 2. 金额单位
- - 微信支付API使用分为单位
- - 系统自动将元转换为分
-
- ### 3. 退款限制
- - 只能对已支付的订单申请退款
- - 退款金额不能超过原订单金额
- - 部分退款需要特殊处理
-
- ### 4. 错误处理
- - 网络异常会自动重试
- - 签名失败会记录详细日志
- - 退款失败会返回具体错误信息
-
- ## 扩展功能
-
- ### 1. 部分退款
- 如需支持部分退款,可以修改 `applyWechatRefund` 方法:
-
- ```java
- // 设置部分退款金额
- amountReq.refund = partialRefundAmount.multiply(new BigDecimal(100)).longValue();
- ```
-
- ### 2. 退款查询
- 可以添加退款查询接口:
-
- ```java
- @GetMapping("/refund/query/{refundNo}")
- public AjaxResult queryRefund(@PathVariable String refundNo) {
- // 实现退款查询逻辑
- }
- ```
-
- ### 3. 退款统计
- 可以添加退款统计功能:
-
- ```java
- @GetMapping("/refund/statistics")
- public AjaxResult getRefundStatistics() {
- // 实现退款统计逻辑
- }
- ```
-
- ## 测试建议
-
- ### 1. 沙箱环境测试
- - 使用微信支付沙箱环境进行测试
- - 验证退款申请和回调功能
-
- ### 2. 日志监控
- - 监控退款申请日志
- - 监控退款回调日志
- - 设置告警机制
-
- ### 3. 异常测试
- - 测试网络异常情况
- - 测试签名失败情况
- - 测试金额超限情况
-
- ## 常见问题
-
- ### Q1: 退款申请失败怎么办?
- A1: 检查以下几点:
- - 微信支付配置是否正确
- - 私钥文件是否存在且可读
- - 订单状态是否为已支付
- - 网络连接是否正常
-
- ### Q2: 退款回调没有收到怎么办?
- A2: 检查以下几点:
- - 退款通知地址是否正确配置
- - 服务器防火墙是否开放相应端口
- - 回调接口是否正常响应
-
- ### Q3: 如何查看退款历史?
- A3: 退款历史记录在 `oms_wechat_payment_history` 表中,可以通过以下方式查询:
- - 通过订单ID查询
- - 通过退款单号查询
- - 通过交易类型(opType=3)查询
-
- ## 技术支持
-
- 如有问题,请联系开发团队或查看相关日志文件。
|