PAYATHON 2026

消费者未确认收货即完成退货,支付宝是否生成商家账单?

支付阿杰

明确结论

支付宝通常会留下交易和退款记录,商家可以在支付宝账单或对账文件中查询相关流水,但这不一定会形成一笔“已收款”的结算账单。

消费者是否确认收货,影响的是交易资金会不会结算给商家,而不是支付宝会不会记录支付和退款。如果订单在确认收货前完成全额退款,通常会出现以下情况:

  • 原支付流水仍然保留;
  • 退款流水单独记录,或与原支付记录关联;
  • 资金通常不会最终结算给商家;
  • 商家的实际净收入通常为 支付金额 - 退款金额 - 相关费用。全额退款且没有不可退费用时,净收入一般为 0。

记录是否出现在某类账单文件中、显示为几条明细,以及手续费是否退回,要看支付宝产品类型、交易状态、账单类型和商家的结算协议。

原因说明

支付宝账单记录支付、退款、手续费和资金变动。电商平台中的“确认收货”是订单履约状态,不能与支付宝的资金记录直接等同。

这类交易一般会产生以下记录:

  1. 消费者付款后,支付宝生成支付交易号。
  2. 商家发货,消费者收货,但订单还没有确认收货。
  3. 消费者申请退货退款。
  4. 退款成功后,支付宝生成退款记录,并将其关联到原支付交易。
  5. 商家对账时,可能同时看到原支付明细和退款明细。如果资金尚未结算,通常不会产生可以实际提现的净收入。

如果退款只在电商平台内部处理,平台没有调用支付宝退款能力,或者交易资金由平台统一收付,商家自己的支付宝账单中可能没有独立的退款流水。此时应以平台账单和平台结算单为准。

核实步骤

1. 确认支付与退款是否经过商家支付宝账户

先收集以下信息:

  • 商户订单号 out_trade_no
  • 支付宝交易号 trade_no
  • 商户退款请求号 out_request_no
  • 退款金额
  • 退款成功时间
  • 资金收款方及结算主体

如果商家是平台内的入驻商户,消费者支付的资金可能先进入平台账户。这种情况下,支付宝账单属于平台,商家通常只能收到平台提供的结算账单。

2. 查询支付宝交易状态

商家直接接入支付宝支付时,可以通过 alipay.trade.query 查询交易状态。退款完成后,常见状态如下:

  • 全额退款:TRADE_CLOSED
  • 部分退款:交易可能仍处于可查询状态,具体以接口返回值为准

以下示例只展示查询结构。实际签名、网关地址和请求参数应以当前接入产品的官方文档及 SDK 为准:

AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
request.setBizContent("""
{
  "out_trade_no": "ORDER_202609080001"
}
""");

AlipayTradeQueryResponse response = alipayClient.execute(request);

if (response.isSuccess()) {
    System.out.println("trade_no: " + response.getTradeNo());
    System.out.println("trade_status: " + response.getTradeStatus());
    System.out.println("total_amount: " + response.getTotalAmount());
} else {
    System.out.println("查询失败: " + response.getSubMsg());
}

3. 查询退款结果

要确认退款是否已经进入支付宝资金流水,可以使用 alipay.trade.fastpay.refund.query,同时传入原订单标识和退款请求号:

AlipayTradeFastpayRefundQueryRequest request =
    new AlipayTradeFastpayRefundQueryRequest();

request.setBizContent("""
{
  "out_trade_no": "ORDER_202609080001",
  "out_request_no": "REFUND_202609080001"
}
""");

AlipayTradeFastpayRefundQueryResponse response =
    alipayClient.execute(request);

if (response.isSuccess()) {
    System.out.println("trade_no: " + response.getTradeNo());
    System.out.println("refund_amount: " + response.getRefundAmount());
    System.out.println("refund_status: " + response.getRefundStatus());
} else {
    System.out.println("退款查询失败: " + response.getSubMsg());
}

不同支付宝产品支持的返回字段可能不同,因此不能只根据某一个可选字段判断退款是否成功。需要同时核对接口响应、异步通知和账单明细。

4. 下载并核对账单

根据商家的接入模式,检查对应日期的以下记录:

  • 交易账单;
  • 资金账单;
  • 平台结算单;
  • 支付宝商家中心中的交易与退款记录。

对账时,除了商户订单号,还应保存并匹配支付宝交易号和退款请求号。例如:

SELECT
    p.out_trade_no,
    p.trade_no,
    p.pay_amount,
    COALESCE(SUM(r.refund_amount), 0) AS refunded_amount,
    p.pay_amount - COALESCE(SUM(r.refund_amount), 0) AS net_amount
FROM payment_record p
LEFT JOIN refund_record r
    ON r.trade_no = p.trade_no
WHERE p.out_trade_no = 'ORDER_202609080001'
GROUP BY
    p.out_trade_no,
    p.trade_no,
    p.pay_amount;

如果支付金额与退款金额相同,查询结果中的 net_amount 应为 0。手续费、服务费等项目仍需另行核对。

注意事项

  • “未确认收货”不等于没有支付流水。消费者付款成功后,支付交易通常已经建立。
  • “已完成退货”不一定表示支付宝退款已经成功。应以退款接口结果、异步通知或账单流水为准。
  • 全额退款和部分退款在账单中的表现不同。部分退款后,剩余金额仍可能结算给商家。
  • 手续费是否退回取决于商家签约的产品和计费规则,不能一概而论。
  • 淘宝、天猫或其他平台的订单,可能由平台统一处理支付和退款。商家应优先核对平台结算单,不能只查看自己的支付宝账户。
  • 账单日期可能按支付时间、退款时间或资金入账时间计算。如果支付与退款跨日,两条明细可能出现在不同日期的账单中。
  • 如果账单中找不到对应记录,应携带 out_trade_no、trade_no、out_request_no 和退款时间,向平台或支付宝技术支持核查资金链路。

备注:内容仅供参考。