PAYATHON 2026

服务商如何申请商家APP支付宝支付?

支付阿杰

明确结论

服务商帮助商家的 APP 接入支付宝支付时,通常采用“第三方应用代商家调用”模式,流程如下:

  1. 商家完成支付宝商家认证并开通 APP支付 产品。
  2. 服务商在支付宝开放平台创建第三方应用,配置密钥、网关和回调地址。
  3. 商家授权服务商应用代为调用支付接口。
  4. 服务商用授权码换取 app_auth_token。
  5. 服务商后端携带 app_auth_token,调用 alipay.trade.app.pay 创建订单。
  6. 商家 APP 通过支付宝客户端 SDK 发起支付,服务商后端根据异步通知确认最终支付结果。

服务商不能只用自己的账号替未签约、未授权的商家收款。商家仍需具备支付宝要求的主体资质,并完成产品签约和授权。

申请前需要准备什么

商家一般需要准备:

  • 已完成认证的支付宝企业或个体工商户账号
  • 营业执照和经营信息
  • APP 名称、简介、图标和应用截图
  • Android 包名、应用签名,或 iOS Bundle ID
  • APP 下载地址、应用市场地址或其他可供审核的安装方式
  • 隐私政策、用户协议等页面
  • 与实际经营内容相符的行业资质

服务商一般需要准备:

  • 已完成认证的支付宝开放平台账号
  • 第三方应用
  • 应用公钥、应用私钥,以及支付宝公钥或支付宝公钥证书
  • 商家授权回调地址
  • 支付异步通知地址
  • 商家、授权令牌与订单之间的映射关系

所需材料和审核要求可能随商家行业、主体类型及开放平台规则变化,申请时应以支付宝开放平台页面显示的要求为准。

具体申请流程

1. 商家开通 APP 支付

商家登录支付宝开放平台或商家平台,创建与其 APP 对应的移动应用,并申请 APP支付 能力。

申请时需要确认:

  • 应用主体与实际经营主体一致,或双方的授权关系可以得到证明
  • APP 中已有可供审核的商品或服务页面
  • APP 的经营内容与申请行业一致
  • 包名、Bundle ID 等信息填写准确
  • 收款账户属于实际提供商品或服务的商家

通过审核并完成签约后,商家才能使用相应的 APP 支付能力。

2. 服务商创建第三方应用

服务商在支付宝开放平台创建第三方应用,用它帮助多个商家完成授权、下单和订单查询。

应用通常需要配置:

  • RSA2 密钥或证书
  • 商家授权回调地址
  • 支付异步通知地址
  • 代商家调用接口所需的权限
  • 应用网关和相关安全配置

第三方应用的 app_id 属于服务商。实际调用接口时,系统通过各商家的 app_auth_token 区分所代表的商家。

3. 引导商家完成授权

服务商生成商家授权链接,引导商家进入支付宝授权页面。商家登录并确认授权后,支付宝会向服务商配置的回调地址返回授权码,通常为 app_auth_code。

服务商通过以下接口换取授权令牌:

alipay.open.auth.token.app

请求形式如下:

{
  "grant_type": "authorization_code",
  "code": "商家授权后返回的 app_auth_code"
}

调用成功后会获得:

  • app_auth_token:代商家调用接口时使用
  • app_refresh_token:授权令牌到期后用于刷新

授权码通常有有效期,并且只能按照平台规则使用。服务商收到授权回调后,应立即在服务端换取令牌,不能在 APP 客户端完成这一过程。

4. 安全保存商家授权信息

服务商应按商家分别保存以下信息:

merchant_id
merchant_alipay_user_id
app_auth_token
app_refresh_token
token_expire_time
authorization_status

app_auth_token 和 app_refresh_token 都是敏感凭据,不能返回给商家 APP,也不能以明文形式写入前端代码或日志。

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

用户在商家 APP 中提交订单后,APP 将业务订单信息发送到服务商后端。服务商后端根据商家标识找到对应的 app_auth_token,然后调用:

alipay.trade.app.pay

以下是使用支付宝 Java SDK 的示意代码:

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

AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();

AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setOutTradeNo("M202609090001");
model.setTotalAmount("99.00");
model.setSubject("商家订单");
model.setProductCode("QUICK_MSECURITY_PAY");

request.setBizModel(model);
request.setNotifyUrl("https://pay.example.com/alipay/notify");

// 代表指定商家调用接口
request.putOtherTextParam("app_auth_token", merchantAppAuthToken);

AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);

if (!response.isSuccess()) {
    throw new IllegalStateException(
        response.getCode() + ": " + response.getSubMsg()
    );
}

// 将完整订单字符串返回给商家 APP
String orderString = response.getBody();

不同版本的支付宝 Java SDK,方法签名可能略有差别。如果当前版本提供了专门传入 app_auth_token 的重载方法,应按该版本的 SDK 文档调用。

APP 客户端收到完整的 orderString 后,将它交给支付宝客户端 SDK:

PayTask payTask = new PayTask(activity);
Map<String, String> result = payTask.payV2(orderString, true);

应用私钥、签名过程和 app_auth_token 必须保留在服务端,不能放进 Android 或 iOS 安装包。

6. 验证支付异步通知

支付完成后,支付宝会向 notify_url 发送异步通知。服务商收到通知后,至少要完成以下检查:

  1. 使用支付宝公钥或证书验证签名。
  2. 检查通知中的 app_id。
  3. 确认 out_trade_no 存在。
  4. 核对订单金额、币种和实际收款商家。
  5. 检查订单是否已经处理,保证接口幂等。
  6. 所有校验通过后再更新订单状态。
  7. 按支付宝协议返回成功响应。

不能只凭 APP 客户端返回的支付结果发货。客户端结果可能因网络中断、应用退出或伪造请求而不完整。最终状态应以验签通过的异步通知为准,也可以由服务端主动查询确认。

主动查询可以使用:

alipay.trade.query

查询时也需要携带该商家的 app_auth_token。

两种接入模式不要混淆

商家自行维护支付后端时,可以使用自己的应用和密钥直接调用支付接口,不需要授权服务商代为调用。

服务商统一为多个商家提供 SaaS 支付能力时,则应采用第三方应用授权模式。每个商家都要分别完成签约和授权。多个独立商家不能共用同一个商家的收款身份,也不能只通过修改订单参数来切换实际收款方。

注意事项

  • app_id、商家主体、APP 包名和支付签约关系需要保持一致,或符合支付宝允许的授权模式。
  • 每次下单时,都应根据当前商家选用对应的 app_auth_token,以免发生串户收款。
  • out_trade_no 在服务商系统中应保持唯一,创建后不要随意复用。
  • 金额必须由服务端根据商品和优惠规则计算,不能直接采用客户端传入的金额。
  • 私钥不能提交到代码仓库、写入 APP 或通过接口下发。
  • 商家取消授权、令牌失效或产品签约终止后,服务商应立即停止代为调用。
  • 正式环境和沙箱环境的应用、网关、密钥及授权令牌不能混用。
  • 如果业务涉及二清、资金归集、分账或平台代理收款,还需另行确认支付宝产品及相关合规要求。普通 APP支付 授权并不当然支持这些资金模式。
  • 开放平台的菜单名称、审核材料和授权页面可能调整。实际申请时,应以控制台展示内容和对应接口文档为准。

备注:内容仅供参考。