PAYATHON 2026

支付宝服务商模式下代签约商户当面付收款失败如何解决

支付小周

结论

ACQ.INVALID_RECEIVE_ACCOUNT 表示本次请求指定的收款支付宝账户,不属于该商户当前生效的收款账户。

“代签约”只是由服务商代商户完成产品签约,不代表商户已经授权服务商应用调用接口。要正常使用 alipay.trade.pay,通常需要同时满足以下条件:

  1. 商户的当面付产品签约已经生效;
  2. 商户已授权当前服务商应用,并取得有效的 app_auth_token;
  3. 请求中的 seller_id、应用授权主体与签约收款主体一致;
  4. 该支付宝账号已配置为合同允许的收款账号。

因此,这个问题通常与买家付款码无关,更换订单号或重复提交也无法解决。

为什么“系统集成”商户可以,“代签约”商户不可以

“系统集成”商户往往已经完成应用授权、产品签约和收款账号关联,请求能够直接路由到正确的商户账户。

“代签约”商户则可能只完成了产品签约,还存在以下问题:

  • 商户没有授权服务商应用;
  • 使用了其他商户的 app_auth_token;
  • 请求中没有携带 app_auth_token;
  • seller_id 填写的是服务商 PID,而不是被代签约商户的 PID;
  • seller_id 与 app_auth_token 对应的授权商户不一致;
  • 代签约合同中的收款账号未配置、尚未生效,或配置成了其他支付宝账号;
  • 商户产品仍处于审核中、签约处理中、失效或暂停状态。

如果支付宝最终识别出的收款账户不在合同允许的收款账户列表中,就会返回:

ACQ.INVALID_RECEIVE_ACCOUNT

处理步骤

1. 确认代签约结果已经生效

在服务商控制台或商家平台中检查该商户的当面付产品状态。不能只看“代签约申请已提交”,还要确认签约已经完成并处于可用状态。

如果通过代签约接口办理,还需要查询代签约订单的最终状态,确认流程没有停留在待商户确认、审核中或失败状态。

2. 完成商户应用授权

让商户授权实际发起支付的服务商应用。授权完成后,服务商应保存该商户对应的以下信息:

  • app_auth_token
  • 授权商户 PID
  • 授权应用的 app_id
  • 授权状态和令牌有效状态

每个商户的 app_auth_token 都应单独保存,不能在不同商户之间混用。

代签约和应用授权是两个独立环节。完成代签约后,仍需确认商户是否已经完成应用授权。

3. 核对收款账号配置

进入该商户的当面付产品或签约详情,检查“收款账号”“签约账号”或类似配置项。不同版本的控制台菜单名称可能有所不同,主要确认以下内容:

  • 当前商户 PID 是否属于允许的收款账号;
  • 收款账号是否已经审核通过并生效;
  • 签约主体与收款账号主体是否符合支付宝要求;
  • 是否误将服务商账号配置为商户收款账号。

如果控制台没有修改入口,通常需要由商户管理员处理。也可以向支付宝开放平台技术支持提交商户 PID、服务商应用 app_id、代签约订单号和接口返回内容,请其核实后台的收款账号绑定关系。

4. 核对支付请求身份

服务商代商户调用 alipay.trade.pay 时,应通过服务商应用发起请求,并携带该商户自己的 app_auth_token。

请求中的身份关系应为:

服务商应用 app_id
        +
被收款商户的 app_auth_token
        +
被收款商户的 seller_id(如传入)

如果没有特殊需要,可以先不传 seller_id,由支付宝根据 app_auth_token 确定收款商户。如果必须传入,则应填写授权商户 PID,不能填写服务商 PID。

Java 调用示例

以下示例只展示关键字段。SDK版本、网关地址和密钥配置应以项目的实际环境为准:

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

AlipayTradePayRequest request = new AlipayTradePayRequest();

AlipayTradePayModel model = new AlipayTradePayModel();
model.setOutTradeNo("ORDER_1731985600966980");
model.setScene("bar_code");
model.setAuthCode(buyerAuthCode);
model.setSubject("商品消费");
model.setTotalAmount("0.01");

// 如需显式指定收款人,必须填写被授权商户的支付宝 PID。
// 不确定时可先不设置,由 app_auth_token 确定商户。
// model.setSellerId(merchantPid);

request.setBizModel(model);

// 必须使用当前收款商户对应的授权令牌,不能使用服务商或其他商户的令牌。
AlipayTradePayResponse response =
    alipayClient.execute(request, null, merchantAppAuthToken);

if (!response.isSuccess()) {
    System.out.println("code=" + response.getCode());
    System.out.println("msg=" + response.getMsg());
    System.out.println("subCode=" + response.getSubCode());
    System.out.println("subMsg=" + response.getSubMsg());
}

如果使用通用请求方式,关键结构如下:

AlipayRequest request = new AlipayRequest();
request.setApiMethodName("alipay.trade.pay");
request.setBizContent("""
{
  "out_trade_no": "ORDER_1731985600966980",
  "scene": "bar_code",
  "auth_code": "买家付款码",
  "subject": "商品消费",
  "total_amount": "0.01"
}
""");

AlipayResponse response =
    alipayClient.execute(request, null, merchantAppAuthToken);

具体类名和调用重载可能因支付宝 Java SDK 版本而异,请以当前使用的 SDK 接口为准。

建议的排查方式

分别记录成功商户和失败商户的以下信息,然后逐项对比:

服务商应用 app_id
商户来源
商户 PID
当面付签约状态
收款账号状态
是否完成应用授权
app_auth_token 对应的授权商户 PID
请求中是否传入 seller_id
seller_id 的实际值
支付宝返回的 code、sub_code、sub_msg

重点检查以下关系是否成立:

seller_id == app_auth_token 对应的授权商户 PID

同时确认:

实际收款商户 PID ∈ 代签约合同允许的收款账号列表

其中任何一个关系不成立,都可能触发 ACQ.INVALID_RECEIVE_ACCOUNT。

注意事项

  • 不要把服务商 PID 填成代签约商户的 seller_id。
  • 不要让多个商户共用同一个 app_auth_token。
  • 不能仅凭“我的商家”中已经出现该商户,就认定签约和授权都已完成。
  • 修改签约或收款账号后,状态同步可能需要时间。确认配置生效后再进行测试。
  • 生产环境和沙箱环境的应用、商户及授权令牌不能混用。
  • 买家付款码是敏感信息,不应写入普通业务日志。
  • 如果商户 PID、授权令牌和签约状态都正确,但接口仍持续返回该错误,应联系支付宝开放平台技术支持,核查代签约合同中的收款账号列表。提交排查信息时,不要提供应用私钥或完整付款码。

备注:内容仅供参考。