猫妈狗爸伴宠师小程序后端代码
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.
 
 
 
 
 
 

4.2 KiB

微信退款功能使用说明

功能概述

本项目已集成微信支付退款功能,当用户取消订单时,系统会自动申请微信退款。

主要组件

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 中正确配置了微信支付参数:

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. 取消订单并申请退款

POST /applet/mall/order/orderCancel
Content-Type: application/json

{
  "id": 123456,
  "remark": "用户取消订单"
}

响应示例:

{
  "code": 200,
  "msg": "订单取消成功,退款申请已提交:退款申请成功,退款单号:REFUND_1234567890"
}

2. 退款流程

  1. 用户调用取消订单接口
  2. 系统取消订单状态
  3. 检查订单是否已支付
  4. 如果已支付,自动申请微信退款
  5. 记录退款历史
  6. 微信异步通知退款结果

退款状态说明

  • SUCCESS: 退款成功
  • CLOSED: 退款关闭
  • PROCESSING: 退款处理中
  • ABNORMAL: 退款异常

注意事项

1. 签名验证

  • 退款工具类使用项目中已有的 WechatPayUtil 进行签名
  • 确保私钥文件路径正确且可访问

2. 金额单位

  • 微信支付API使用分为单位
  • 系统自动将元转换为分

3. 退款限制

  • 只能对已支付的订单申请退款
  • 退款金额不能超过原订单金额
  • 部分退款需要特殊处理

4. 错误处理

  • 网络异常会自动重试
  • 签名失败会记录详细日志
  • 退款失败会返回具体错误信息

扩展功能

1. 部分退款

如需支持部分退款,可以修改 applyWechatRefund 方法:

// 设置部分退款金额
amountReq.refund = partialRefundAmount.multiply(new BigDecimal(100)).longValue();

2. 退款查询

可以添加退款查询接口:

@GetMapping("/refund/query/{refundNo}")
public AjaxResult queryRefund(@PathVariable String refundNo) {
    // 实现退款查询逻辑
}

3. 退款统计

可以添加退款统计功能:

@GetMapping("/refund/statistics")
public AjaxResult getRefundStatistics() {
    // 实现退款统计逻辑
}

测试建议

1. 沙箱环境测试

  • 使用微信支付沙箱环境进行测试
  • 验证退款申请和回调功能

2. 日志监控

  • 监控退款申请日志
  • 监控退款回调日志
  • 设置告警机制

3. 异常测试

  • 测试网络异常情况
  • 测试签名失败情况
  • 测试金额超限情况

常见问题

Q1: 退款申请失败怎么办?

A1: 检查以下几点:

  • 微信支付配置是否正确
  • 私钥文件是否存在且可读
  • 订单状态是否为已支付
  • 网络连接是否正常

Q2: 退款回调没有收到怎么办?

A2: 检查以下几点:

  • 退款通知地址是否正确配置
  • 服务器防火墙是否开放相应端口
  • 回调接口是否正常响应

Q3: 如何查看退款历史?

A3: 退款历史记录在 oms_wechat_payment_history 表中,可以通过以下方式查询:

  • 通过订单ID查询
  • 通过退款单号查询
  • 通过交易类型(opType=3)查询

技术支持

如有问题,请联系开发团队或查看相关日志文件。