# 统一收单交易退款接口 - Java 示例

## 请求示例

```java
package com.java.sdk.demo;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;

public class AlipayTradeRefund {

    public static void main(String[] args) throws AlipayApiException {
        // 初始化SDK（Java 使用 PKCS#8 格式私钥，C#/Python 使用 PKCS#1 格式，请勿混用）
        AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());

        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        AlipayTradeRefundModel model = new AlipayTradeRefundModel();
        model.setOutTradeNo("MERCHANT_ORDER_NO_PLACEHOLDER");  // 商户订单号，与 tradeNo 二选一
        model.setRefundAmount("200.12");            // 使用十进制定点金额；调用前校验累计退款不超过原订单实付金额
        model.setRefundReason("正常退款");           // 退款原因，选填
        model.setOutRequestNo("OUT_REQUEST_NO_PLACEHOLDER"); // 新退款使用新编号；同一退款失败重试必须复用原编号和原参数
        request.setBizModel(model);

        AlipayTradeRefundResponse response = alipayClient.execute(request);

        if (response.isSuccess()) {
            if ("Y".equals(response.getFundChange())) {
                System.out.println("退款资金已发生变化，退款金额: " + response.getRefundFee());
            } else {
                System.out.println("退款结果待确认：使用同一 out_request_no 调用 alipay.trade.fastpay.refund.query");
            }
        } else {
            System.out.println("调用失败: " + response.getSubCode() + " - " + response.getSubMsg());
        }
    }

    private static AlipayConfig getAlipayConfig() {
        String privateKey  = "<-- 请填写您的应用私钥，例如：MIIE...（脱敏示例） -->";
        String alipayPublicKey = "<-- 请填写您的支付宝公钥，例如：MIIB...（脱敏示例） -->";
        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
        // 沙箱环境: alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com/gateway.do");
        alipayConfig.setAppId("<-- 请填写您的AppId，例如：20190xxxxxx -->");
        alipayConfig.setPrivateKey(privateKey);
        alipayConfig.setFormat("json");
        alipayConfig.setAlipayPublicKey(alipayPublicKey);
        alipayConfig.setCharset("UTF-8");
        alipayConfig.setSignType("RSA2");
        return alipayConfig;
    }
}
```

## 响应示例
### 正常示例
```json
{
    "code": "10000",
    "msg": "Success",
    "trade_no": "ALIPAY_TRADE_NO_PLACEHOLDER",
    "out_trade_no": "MERCHANT_ORDER_NO_PLACEHOLDER",
    "buyer_logon_id": "159****5620",
    "fund_change": "Y",
    "refund_fee": "88.88"
}
```
### 异常示例
```json
{
    "code": "20000",
    "msg": "Service Currently Unavailable",
    "sub_code": "isp.unknow-error",
    "sub_msg": "系统繁忙"
}
```
