PAYATHON 2026

支付宝现在是否提供免费的支付开放接口?

支付阿杰

结论

支付宝提供开放的支付接口。商家可以在支付宝开放平台创建应用,接入电脑网站支付、手机网站支付、App 支付、当面付等功能。

API 的开发和调用通常不单独收费,但使用支付宝收款并不一定免费。支付交易可能产生商家服务费,费率由签约产品、商户类型、所属行业、活动政策和签约协议决定。部分支付功能还要求商家完成企业认证、应用审核和产品签约。

准确来说,支付宝提供可供商家接入的支付 API。交易是否收费以及具体费率,应以商户签约页面和合同为准。

可以接入哪些支付 API

常见支付场景及对应接口如下:

支付场景主要 API适用情况
电脑网站支付alipay.trade.page.pay用户在电脑浏览器中跳转至支付宝付款
手机网站支付alipay.trade.wap.pay用户在手机浏览器中完成付款
App 支付alipay.trade.app.payAndroid、iOS App 调起支付宝客户端
当面付扫码支付alipay.trade.precreate商家生成二维码,用户扫码付款
当面付条码支付alipay.trade.pay商家扫描用户付款码
订单查询alipay.trade.query查询支付结果和订单状态
交易退款alipay.trade.refund对已支付交易发起退款
退款查询alipay.trade.fastpay.refund.query查询退款处理结果
交易关闭alipay.trade.close关闭尚未完成付款的订单

商家实际能够申请哪些接口,要看支付宝开放平台能力中心当前提供的产品以及相应的准入条件。

接入步骤

1. 创建开放平台应用

登录支付宝开放平台,在控制台中创建与业务对应的网页应用、移动应用或小程序。创建完成后,平台会分配 app_id。

应用类型需要与支付场景对应。网站收款通常接入电脑网站支付或手机网站支付,原生移动应用则接入 App 支付。

2. 配置接口签名

支付宝开放接口通常采用 RSA2 签名。商户需要生成应用私钥和应用公钥,并将应用公钥配置到开放平台。

接入时一般需要准备:

  • app_id
  • 应用私钥
  • 支付宝公钥或支付宝公钥证书
  • 异步通知地址 notify_url
  • 同步跳转地址 return_url
  • 签名方式 RSA2

应用私钥只能存放在服务端,不能写入网页或 App 安装包,也不要提交到公开代码仓库。

3. 申请并签约支付产品

在应用中添加需要使用的支付功能,再按照页面要求提交审核或完成签约。不同产品的准入条件、材料要求和费率可能不同。

开发者可以使用沙箱环境进行联调,但沙箱交易不能用于正式收款。上线前,还需要改用正式网关、正式应用配置和正式密钥。

4. 服务端调用支付接口

支付请求应由服务端生成并签名,再把支付页面、跳转地址或支付参数返回给前端。

以下是使用支付宝 Java SDK 调用电脑网站支付接口 alipay.trade.page.pay 的基本示例:

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;

public class AlipayPagePayExample {

    public static void main(String[] args) throws AlipayApiException {
        String gatewayUrl = "https://openapi.alipay.com/gateway.do";
        String appId = "YOUR_APP_ID";
        String appPrivateKey = "YOUR_APP_PRIVATE_KEY";
        String alipayPublicKey = "ALIPAY_PUBLIC_KEY";

        AlipayClient alipayClient = new DefaultAlipayClient(
                gatewayUrl,
                appId,
                appPrivateKey,
                "json",
                "UTF-8",
                alipayPublicKey,
                "RSA2"
        );

        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setReturnUrl("https://example.com/alipay/return");
        request.setNotifyUrl("https://example.com/alipay/notify");

        request.setBizContent("""
            {
              "out_trade_no": "ORDER_202609080001",
              "total_amount": "99.00",
              "subject": "测试商品",
              "product_code": "FAST_INSTANT_TRADE_PAY"
            }
            """);

        AlipayTradePagePayResponse response = alipayClient.pageExecute(request);

        if (response.isSuccess()) {
            String paymentHtml = response.getBody();
            System.out.println(paymentHtml);
        } else {
            System.err.println(response.getSubCode());
            System.err.println(response.getSubMsg());
        }
    }
}

pageExecute 通常会返回可以提交或直接输出到浏览器的支付页面内容。在生产环境中,应通过 Web 响应将其返回给浏览器,不能只打印到控制台。

不同版本的 SDK 在类名、构造方式和证书模式配置上可能存在差异。实际接入时应参考当前的官方 SDK 文档,不要直接使用示例中的占位配置。

5. 验证异步通知

用户付款后,支付宝会向 notify_url 发送异步通知。服务端需要完成以下处理:

  1. 使用支付宝公钥验证通知签名。
  2. 核对 app_id、seller_id、out_trade_no 等身份和订单信息。
  3. 检查 total_amount 是否与本地订单金额一致。
  4. 确认 trade_status 是业务认可的支付状态。
  5. 通过数据库唯一约束或订单状态判断实现幂等处理。
  6. 处理成功后,按照接口要求返回 success。

不能仅凭浏览器跳转到 return_url 就认定付款成功。同步跳转可能中断,也可能被伪造。最终订单状态应以验签通过的异步通知或主动查询结果为准。

费用如何确认

判断支付 API 是否会产生交易服务费,不能只看接口能否调用。正式接入前,应检查以下信息:

  • 产品签约页面显示的服务费率;
  • 商户与支付宝签署的协议;
  • 当前行业和经营类目对应的费率;
  • 优惠活动的有效期及适用范围;
  • 退款后是否退还原交易服务费;
  • 是否有结算、提现或其他附加规则。

支付宝可能调整产品名称、准入条件和收费政策,正式费率应以签约时页面展示的信息为准。

注意事项

  • 支付接口通常要求商户主体,个人账号不一定能申请全部支付产品。
  • 不要将应用私钥、AES 密钥或其他敏感配置放在前端。
  • 金额应使用十进制字符串或可靠的金额类型处理,避免直接使用浮点数计算。
  • out_trade_no 应由商户生成,并确保不会重复。
  • 支付宝可能重复发送异步通知,因此订单更新必须具备幂等性。
  • 接口请求超时不能直接视为支付失败,应调用 alipay.trade.query 查询最终状态。
  • 发起退款时应使用独立且可追踪的退款请求号,并记录支付宝返回的结果。
  • 上线前应分别测试支付成功、支付取消、重复通知、订单超时、退款和网络异常等情况。

备注:内容仅供参考。