PAYATHON 2026

自有APP和网站接入支付宝支付应选择哪个平台?

支付老李

结论

自有 APP 和网站接入支付宝支付时,开发和接口接入应通过支付宝开放平台完成。支付宝商家平台则主要用于商户经营管理,包括交易查询、账单下载和资金管理等日常工作。

这两个平台需要配合使用,常见流程如下:

  1. 在支付宝开放平台创建应用,配置所需的支付能力。
  2. 使用已完成认证的支付宝商家账号签约支付产品。
  3. 在开放平台获取应用参数、配置密钥并开发接口。
  4. 上线后通过支付宝商家平台管理交易、账单和资金。

简单来说:开放平台负责支付接口怎么接,商家平台负责接入后怎么管理。

两个平台有什么区别

对比项支付宝开放平台支付宝商家平台
主要用途创建应用、申请接口、配置密钥、联调开发管理门店、交易、账单、资金及经营数据
面向角色开发者、技术团队、系统服务商商户负责人、财务和运营人员
支付接入相关功能应用创建、接口权限、支付产品签约、应用网关、回调地址、密钥配置查询交易和账单、退款及资金管理等
是否用于编写支付程序是通常不是
是否需要商户主体正式接入支付一般需要完成主体认证,并满足相应产品的签约条件需要对应的商家账号及权限

账号类型、所属行业和支付产品不同,准入条件也可能不同。具体可申请的能力和签约要求,应以开放平台控制台的实际显示为准。

APP 和网站分别选择什么支付产品

不必因为同时有一个 APP 和一个网站,就机械地创建多个账户。支付产品应根据实际使用场景选择:

  • 原生 Android 或 iOS APP:通常接入 APP 支付,调用 alipay.trade.app.pay。
  • PC 浏览器网站:通常接入 电脑网站支付,调用 alipay.trade.page.pay。
  • 手机浏览器中的 H5 网站:通常接入 手机网站支付,调用 alipay.trade.wap.pay。

如果同一业务同时有 APP、PC 网站和 H5 页面,可以根据业务归属,在开放平台创建、关联或配置应用,再申请对应的支付能力。能否共用同一个应用,取决于控制台中的应用类型和产品配置规则,不能只看接口名称。

接入步骤

1. 完成商家主体认证

使用企业、个体工商户等符合要求的主体注册并认证支付宝账号。支付产品是否对某类主体开放,是否需要补充行业资质,应以申请页面的提示为准。

2. 在开放平台创建应用

登录支付宝开放平台,根据支付场景创建网页应用、移动应用等对应类型的应用,并填写以下信息:

  • 应用名称和基本资料
  • APP 包名、应用签名等移动端信息
  • 网站地址等网页端信息
  • 应用网关或授权回调地址
  • 异步通知地址 notify_url
  • 接口加签方式和公钥

创建完成后会获得 app_id。应用正式调用生产接口前,通常还需要通过审核并上线。

3. 申请并签约支付产品

根据使用场景申请 APP 支付、电脑网站支付或手机网站支付。创建应用不等于已经获得收款权限,还要确认相应的支付产品已经签约并生效。

4. 配置接口签名

支付请求需要使用应用私钥签名。收到支付宝返回的数据后,需要使用支付宝公钥或支付宝公钥证书验签。

通常需要妥善保管以下配置:

  • app_id
  • 应用私钥
  • 支付宝公钥,或支付宝公钥证书
  • 应用公钥证书
  • 支付宝根证书
  • 签名算法,例如 RSA2

使用公钥模式还是证书模式,必须与开放平台控制台中的应用配置一致。两种模式使用的客户端初始化方法和验签参数不同,不能混用。

5. 由服务端创建支付订单

商户服务端应生成唯一的商户订单号 out_trade_no,再调用对应的支付接口:

  • APP 支付接口返回支付参数字符串,由 APP 交给支付宝客户端 SDK 发起支付。
  • 电脑网站支付接口通常返回用于跳转或提交的表单。
  • 手机网站支付接口通常返回 H5 跳转页面或表单。

支付金额、订单号和商品信息必须由可信的服务端生成,不能直接采用客户端传入的最终值。

Java 服务端示例

下面使用支付宝 Java SDK 的常见调用方式说明核心流程。依赖坐标、SDK 构造方法和证书配置方式可能随 SDK 版本变化,应以所用版本的官方说明为准。

APP 支付

AlipayClient alipayClient = new DefaultAlipayClient(
    "https://openapi.alipay.com/gateway.do",
    APP_ID,
    APP_PRIVATE_KEY,
    "json",
    "UTF-8",
    ALIPAY_PUBLIC_KEY,
    "RSA2"
);

AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setNotifyUrl("https://pay.example.com/alipay/notify");

AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setOutTradeNo("ORDER_202609090001");
model.setTotalAmount("99.00");
model.setSubject("会员服务");
model.setProductCode("QUICK_MSECURITY_PAY");

request.setBizModel(model);

AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
if (!response.isSuccess()) {
    throw new IllegalStateException(
        response.getCode() + ": " + response.getSubMsg()
    );
}

// 将签名后的订单参数返回给 APP,再由支付宝客户端 SDK 发起支付
String orderString = response.getBody();

电脑网站支付

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

AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo("ORDER_202609090002");
model.setTotalAmount("299.00");
model.setSubject("网站订单");
model.setProductCode("FAST_INSTANT_TRADE_PAY");

request.setBizModel(model);

AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
if (!response.isSuccess()) {
    throw new IllegalStateException(
        response.getCode() + ": " + response.getSubMsg()
    );
}

// 将 response.getBody() 返回给浏览器,完成页面跳转或表单提交
String paymentForm = response.getBody();

示例中的订单号只用于演示。生产环境必须确保 out_trade_no 在商户系统中唯一,也不要把真实私钥直接写进源代码。

异步通知处理

判断支付是否成功,应以支付宝服务端发送的异步通知和主动查询结果为准,不能只依赖浏览器同步跳转页面或 APP 客户端返回值。

处理异步通知时,至少要完成以下检查:

  1. 使用支付宝 SDK 验证通知签名。
  2. 检查通知中的 app_id 是否属于当前应用。
  3. 检查 out_trade_no 是否存在,并确认它属于当前商户。
  4. 检查 total_amount、币种和订单金额是否一致。
  5. 检查交易状态是否符合业务要求。
  6. 以唯一订单号进行幂等处理,避免重复发货。
  7. 处理成功后,按照支付宝接口要求返回成功响应。

常见的 Java 验签形式如下:

Map<String, String> params = new HashMap<>();

for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
    String value = String.join(",", entry.getValue());
    params.put(entry.getKey(), value);
}

boolean verified = AlipaySignature.rsaCheckV1(
    params,
    ALIPAY_PUBLIC_KEY,
    "UTF-8",
    "RSA2"
);

if (!verified) {
    response.getWriter().write("failure");
    return;
}

// 继续核对 app_id、订单号、金额和交易状态,并执行幂等更新
boolean processed = processPaymentIdempotently(params);

response.getWriter().write(processed ? "success" : "failure");

如果应用使用证书模式,初始化和验签也必须采用与证书模式匹配的方案,不能直接套用公钥模式的配置。

容易踩坑的地方

不要让客户端保存应用私钥

APP、网页 JavaScript 和小程序代码都可能被分析或篡改。应用私钥只能保存在商户服务端,建议通过密钥管理系统或受控配置中心管理。

return_url 不能作为到账依据

return_url 只负责将用户带回商户页面。用户可能在跳转前关闭页面,返回参数也可能被伪造,所以不能根据它发货或开通服务。

异步通知可能重复到达

网络重试可能让同一笔支付通知被多次发送。订单更新、发货和权益发放都必须支持幂等处理。

支付结果不明确时要主动查询

遇到请求超时、客户端中断或通知延迟时,应调用交易查询接口核实订单状态,不要直接使用相同订单号再次发起支付。

沙箱和生产环境配置要分离

沙箱网关、应用编号、密钥和测试账号不能与生产配置混用。切换到生产环境时,还要确认应用已经上线、支付产品已经签约,并且回调地址可以从公网访问。

一个支付产品不一定覆盖所有终端

电脑网站支付、手机网站支付和 APP 支付对应不同场景。如果需要支持多个终端,应分别确认相应的支付产品已经申请并生效。

技术团队主要通过支付宝开放平台创建应用、完成签约配置和开发接口。商户负责人、财务和运营人员则使用支付宝商家平台处理后续经营与资金管理。两个平台需要配合使用,不能通过商家平台代替开放平台完成支付接口接入。

备注:内容仅供参考。