PAYATHON 2026

App 内转账到支付宝是否需要开通“手机网站支付”?

支付小周

结论

不需要。

如果业务需求只是把商户资金转入指定的支付宝账户,应申请支付宝的资金转账类产品,而不是“手机网站支付”。“手机网站支付”适用于用户在手机浏览器的 H5 页面中向商户付款,和商户向支付宝账户转账是两种不同的业务。

转账接口能否使用,取决于商户主体类型、签约产品、账户资质,以及支付宝开放平台当时的准入规则。具体应以商户后台可申请的产品和已获得的接口权限为准。

为什么不需要手机网站支付

这几种能力对应的业务场景不同:

  • 手机网站支付:用户在移动端网页中购买商品或服务,并向商户付款。
  • 转账到支付宝:商户通过服务端接口,把可用资金转给支付宝账户。
  • App 支付:用户在原生 App 中向商户付款,也不属于转账能力。

是否需要开通某种支付产品,不能只看功能是不是在 App 内发生,还要看资金流向和实际用途。

如果 App 只负责提交收款人、金额等信息,转账请求由业务服务端发起,通常只需申请相应的转账产品权限。只有业务还包含 H5 收款场景时,才需要考虑开通“手机网站支付”。

接入步骤

1. 确认业务场景

先核对以下信息:

  • 付款方是否为商户支付宝账户;
  • 收款方是支付宝用户还是其他类型账户;
  • 转账用于佣金、退款、提现、奖励还是其他用途;
  • 商户账户是否有足够的可用余额;
  • 业务是否涉及代收代付、资金二清等合规问题。

不同用途可能对应不同的产品准入要求,不能仅凭“转账”两个字选择接口。

2. 申请转账产品权限

登录支付宝开放平台,在应用对应的产品能力中查找并申请资金转账类产品。

常见的统一转账接口名称是:

alipay.fund.trans.uni.transfer

部分存量应用可能仍在使用旧接口:

alipay.fund.trans.toaccount.transfer

旧接口能否继续申请、是否需要迁移,应以当前开放平台控制台和接口文档为准。新项目不建议直接按照旧接口开发。

3. 完成应用配置

通常需要配置以下内容:

  • 应用公钥或应用证书;
  • 支付宝公钥或支付宝证书;
  • 应用网关地址;
  • 接口签名方式;
  • 转账产品权限;
  • 必要的异步通知地址。

具体配置取决于使用公钥模式还是证书模式,也会受到产品要求的影响。

4. 由服务端发起转账

App 不应保存商户私钥,也不应直接调用需要商户签名的转账接口。建议采用以下调用链:

App -> 业务服务端 -> 支付宝转账接口

App 只向服务端提交业务订单号、收款对象、金额等必要信息。权限校验、风控检查、签名和接口调用均由服务端完成。

Java 示例

下面的代码仅展示典型调用结构。网关地址、SDK 版本、产品码和收款方标识类型,应以支付宝开放平台当前的文档及商户实际签约能力为准。

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

AlipayFundTransUniTransferRequest request =
    new AlipayFundTransUniTransferRequest();

AlipayFundTransUniTransferModel model =
    new AlipayFundTransUniTransferModel();

model.setOutBizNo("TRANSFER_20260909_000001");
model.setTransAmount("100.00");
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
model.setBizScene("DIRECT_TRANSFER");
model.setOrderTitle("业务转账");

Participant payeeInfo = new Participant();
payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
payeeInfo.setIdentity("example@example.com");
payeeInfo.setName("收款人姓名");

model.setPayeeInfo(payeeInfo);
request.setBizModel(model);

AlipayFundTransUniTransferResponse response =
    alipayClient.certificateExecute(request);

if (response.isSuccess()) {
    System.out.println("转账请求成功:" + response.getOrderId());
} else {
    System.out.println(
        "转账失败:" +
        response.getCode() + " / " +
        response.getSubCode() + " / " +
        response.getSubMsg()
    );
}

如果使用证书模式,应按照支付宝 SDK 提供的证书初始化方式创建客户端,不能直接使用公钥模式的初始化参数。

注意事项

不要在 App 中放置私钥

商户私钥打包进 App 后,可能被反编译获取。签名、验签和转账接口调用都必须在可信的服务端完成。

业务订单号必须唯一

out_biz_no 一般用于保证业务请求的幂等性。服务端应保存订单号和转账状态,防止用户重复点击或网络重试造成重复转账。

不要只依赖同步返回结果

接口返回成功,通常表示请求已经受理,或转账已经进入相应的处理状态。是否需要查询最终状态或接收异步通知,应按照具体接口文档处理。如果遇到超时或结果未知,应先查询原订单,不要立即换用新的业务订单号再次发起转账。

收款人信息必须准确

收款账户类型、支付宝登录号、用户 ID 和姓名的校验规则,可能因产品和接口而异。不能假设所有商户都可以使用同一种收款标识。

App 内还有收款功能时需要分别签约

如果业务还包含以下场景,需要分别申请相应的产品能力:

  • 在原生 App 内让用户付款:考虑“App 支付”;
  • 在手机浏览器的 H5 页面中让用户付款:考虑“手机网站支付”;
  • 商户向支付宝用户付款:申请资金转账类能力。

这些产品不能相互替代。是否需要组合开通,要根据实际资金流程确定。

备注:内容仅供参考。