退款

当交易发生之后一年内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付金额退还给买家,微信支付将在收到退款请求并且验证成功之后,将支付款按原路退还至买家账号上。

退款接口

  1. options := &request.RequestRefund{
  2. ctx,
  3. TransactionID: transactionID,
  4. OutRefundNo: outRefundNo,
  5. Reason: "",
  6. //NotifyUrl: "", // 异步接收微信支付退款结果通知的回调地址
  7. FundsAccount: "",
  8. Amount: &request.RefundAmount{
  9. Refund: 1, // 退款金额,单位:分
  10. Total: 1, // 订单总金额,单位:分
  11. From: []*request.RefundAmountFrom{}, // 退款出资账户及金额。不传仍然需要这个空数组防止微信报错
  12. },
  13. GoodsDetail: nil,
  14. }
  15. PaymentApp.Refund.Refund(options)

微信支付返回示例

  1. {
  2. "transaction_id": "1217752501201407033233368018",
  3. "out_refund_no": "1217752501201407033233368018",
  4. "reason": "商品已售完",
  5. "notify_url": "https://weixin.qq.com",
  6. "funds_account": "AVAILABLE",
  7. "amount": {
  8. "refund": 888,
  9. "from": [
  10. {
  11. "account": "AVAILABLE",
  12. "amount": 444
  13. }
  14. ],
  15. "total": 888,
  16. "currency": "CNY"
  17. },
  18. "goods_detail": [
  19. {
  20. "merchant_goods_id": "1217752501201407033233368018",
  21. "wechatpay_goods_id": "1001",
  22. "goods_name": "iPhone6s 16G",
  23. "unit_price": 528800,
  24. "refund_amount": 528800,
  25. "refund_quantity": 1
  26. }
  27. ]
  28. }

微信官方文档

WARNING

  1. 交易时间超过一年的订单无法提交退款

  2. 微信支付退款支持单笔交易分多次退款(不超50次),多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号

  3. 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次

  4. 每个支付订单的部分退款次数不能超过50次

  5. 如果同一个用户有多笔退款,建议分不同批次进行退款,避免并发退款导致退款失败

  6. 申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果

  7. 一个月之前的订单申请退款频率限制为:5000/min