PAYATHON 2026

支付宝支付接口开通后,退款接口和证书是否需单独申请?

支付小周

结论

商户开通支付宝支付产品后,通常无需再单独申请 alipay.trade.refund 退款接口。退款是原支付交易的后续操作,发起时必须使用原交易所属的支付宝应用和商户身份。

退款接口没有独立的”退款证书”。是否需要证书,取决于应用使用的签名方式:

  • 公钥模式:配置应用私钥、支付宝公钥和 app_id,不需要证书文件。
  • 证书模式:配置应用私钥,并加载应用公钥证书、支付宝公钥证书和支付宝根证书。
  • 如果现有支付接口可以正常完成签名和验签,退款通常沿用同一套应用凭据及签名配置。

不同签约产品、接入身份和账户状态可能有不同要求,最终以支付宝开放平台中该应用显示的接口权限为准。

调用前需要确认的事项

1. 检查应用接口权限

登录支付宝开放平台,进入支付业务对应的应用,逐项确认:

  • 支付产品已经签约并处于生效状态;
  • 应用拥有 alipay.trade.refund 接口权限;
  • 退款使用的 app_id 与原支付交易所属应用一致;
  • ISV 代商户调用时,授权关系仍然有效,商户授权信息也已正确传递。

如果接口返回”无权限”或”产品未签约”等错误,应检查签约产品、应用权限和代调用授权。更换证书通常无法解决这类问题。

2. 确认当前签名模式

支付和退款应使用相同的签名体系。“退款接口权限”与”接口证书”是两件事,不要混淆。

当前模式调用退款所需配置
公钥模式应用私钥、支付宝公钥、app_id
证书模式应用私钥、应用公钥证书、支付宝公钥证书、支付宝根证书
ISV 代调用除上述配置外,还要满足应用授权和商户身份要求

如果要从公钥模式切换到证书模式,需要按照支付宝开放平台的配置流程完成切换,同时修改支付、查询和退款等接口的 SDK 初始化方式。

3. 准备退款参数

调用 alipay.trade.refund 时通常需要以下参数:

  • trade_no:支付宝交易号;
  • 或 out_trade_no:商户订单号;
  • refund_amount:退款金额;
  • out_request_no:退款请求号,部分退款或需要幂等控制时建议提供;
  • refund_reason:退款原因,可根据业务需要填写。

trade_no 和 out_trade_no 一般选择其中一个来定位交易。退款金额不能超过该交易当前的可退金额。

Java 调用示例

以下示例使用支付宝 Java SDK。不同 SDK 版本的依赖和构造方法可能有差异,请以项目实际使用版本的文档为准。

公钥模式

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

public class AlipayRefundExample {

    public static void main(String[] args) throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient(
            "https://openapi.alipay.com/gateway.do",
            "YOUR_APP_ID",
            "YOUR_APP_PRIVATE_KEY",
            "json",
            "UTF-8",
            "ALIPAY_PUBLIC_KEY",
            "RSA2"
        );

        AlipayTradeRefundModel model = new AlipayTradeRefundModel();
        model.setTradeNo("2026XXXXXXXXXXXX");
        model.setRefundAmount("10.00");
        model.setOutRequestNo("REFUND_20260909_0001");
        model.setRefundReason("用户申请退款");

        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        request.setBizModel(model);

        AlipayTradeRefundResponse response = alipayClient.execute(request);

        if (response.isSuccess()) {
            System.out.println("退款请求成功");
            System.out.println(response.getBody());
        } else {
            System.out.println("退款请求失败");
            System.out.println("code: " + response.getCode());
            System.out.println("subCode: " + response.getSubCode());
            System.out.println("subMsg: " + response.getSubMsg());
        }
    }
}

证书模式

import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;

CertAlipayRequest certConfig = new CertAlipayRequest();
certConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
certConfig.setAppId("YOUR_APP_ID");
certConfig.setPrivateKey("YOUR_APP_PRIVATE_KEY");
certConfig.setFormat("json");
certConfig.setCharset("UTF-8");
certConfig.setSignType("RSA2");

certConfig.setCertPath("/secure/alipay/appCertPublicKey.crt");
certConfig.setAlipayPublicCertPath("/secure/alipay/alipayCertPublicKey_RSA2.crt");
certConfig.setRootCertPath("/secure/alipay/alipayRootCert.crt");

AlipayClient alipayClient = new DefaultAlipayClient(certConfig);

完成初始化后,AlipayTradeRefundRequest 的调用方式与公钥模式相同。

常见问题排查

提示接口无权限

检查以下内容:

  • 支付产品是否已经正式生效;
  • 当前应用的接口权限中是否包含退款接口;
  • 是否使用了其他环境或其他应用的 app_id;
  • ISV 是否已取得对应商户的有效授权。

沙箱环境与生产环境的应用、密钥和交易数据不能混用。

提示验签失败

验签失败通常与退款权限无关,可以从以下几方面排查:

  • 应用私钥是否属于当前 app_id;
  • 公钥模式下填写的是支付宝公钥,还是误填了应用公钥;
  • 证书模式下的三个证书文件是否完整且相互匹配;
  • sign_type 是否与平台配置一致;
  • 字符集、请求内容或 SDK 初始化方式是否被错误修改。

退款请求成功但资金未立即到账

接口调用成功,只表示支付宝已经受理或完成相应的退款处理。实际到账时间可能受到原支付渠道和银行处理速度等因素影响。业务系统应保存退款请求号及支付宝返回结果,必要时使用退款查询能力核对最终状态,不能只依赖前端页面的提示。

注意事项

  • 退款必须关联真实存在且仍可退款的原支付交易。
  • 对同一笔交易进行多次部分退款时,每次退款都应生成唯一且稳定的 out_request_no。重试时复用原请求号,以免重复退款。
  • 金额应使用字符串表示,例如 "10.00",不要直接使用浮点数计算金额。
  • 应用私钥和证书文件是敏感配置,不要提交到公开代码仓库,也不要写入日志。
  • 不要为了新增退款功能而生成另一套不匹配的密钥。支付、查询和退款通常共用当前应用的签名配置。
  • 是否允许退款、退款期限和资金来源可能受到具体签约产品及商户账户状态的影响,请以开放平台后台显示的实际权限和接口返回结果为准。

备注:内容仅供参考。