PAYATHON 2026

支付宝当面付已签约开通但提示ACQ.ACCESS_FORBIDDEN

支付阿杰

结论

ACQ.ACCESS_FORBIDDEN 表示当前请求无权访问目标接口。这个错误通常与签名算法或订单参数无关,问题往往出在授权关系上:商户虽然已经签约当面付,但当前 appId 尚未取得当面付接口的调用权限。

排查时应重点确认:发起请求的应用是否属于签约商户,应用是否绑定了正确的商户账号,当面付能力是否已授权给该应用,以及生产环境、网关地址和应用配置是否匹配。

常见原因

1. 签约账号与应用所属账号不一致

当面付签约在一个商户账号下,接口请求使用的却是另一个支付宝开放平台应用。即使商户后台显示产品已经开通,当前 appId 也可能没有调用权限。

以下信息应属于同一套商户关系:

  • 当面付签约商户的支付宝账号或商户 PID
  • 发起请求的 appId
  • 应用绑定的商户账号
  • 收款账号配置
  • 应用使用的公钥、私钥和支付宝公钥

2. 产品已签约,但应用能力尚未生效

产品签约成功,并不一定意味着所有应用会自动获得接口权限。部分情况下,还需要在开放平台应用中添加对应能力,或等待签约状态完成同步。

进入支付宝开放平台中的对应应用,确认已添加当面付相关能力,并检查其状态是否为可用。如果状态仍是审核中、待签约、已失效或受限,应用可能无法调用接口。

3. 使用了错误的 appId

开发、测试和生产环境中可能配置了多个应用。部署后如果仍在使用测试应用、旧应用或其他商户的 appId,接口就会拒绝访问。

排查时应记录程序运行期间最终使用的配置,不要只检查配置文件:

System.out.println("appId=" + appId);
System.out.println("gatewayUrl=" + gatewayUrl);
System.out.println("method=alipay.trade.precreate");

日志中不要输出应用私钥、AES 密钥或完整的敏感业务参数。

4. 生产环境与沙箱环境混用

沙箱应用、沙箱账号和沙箱网关需要配套使用,生产应用则必须调用生产网关。

生产环境网关通常为:

https://openapi.alipay.com/gateway.do

使用沙箱 appId 调用生产网关,或将生产应用与沙箱账号混用,都无法获得预期的产品权限。

5. 服务商模式缺少商户授权

如果服务商应用代商户发起请求,仅为服务商应用开通能力通常不够。商户还需要完成应用授权,请求中也要正确传入有效的 app_auth_token。

AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.putOtherTextParam("app_auth_token", appAuthToken);
request.setBizContent("""
{
  "out_trade_no": "ORDER_202609090001",
  "total_amount": "0.01",
  "subject": "测试订单"
}
""");

AlipayTradePrecreateResponse response = alipayClient.execute(request);

如果是商户自研应用直接收款,通常不应随意添加其他商户的 app_auth_token。是否需要传入该参数,取决于实际接入模式。

6. 商户或应用能力受到限制

账号受到风控、签约失效、经营信息异常或接口能力暂停时,也可能返回访问被拒绝。仅根据 ACQ.ACCESS_FORBIDDEN 无法判断具体是哪种限制,需要支付宝根据请求流水进一步排查。

建议的解决步骤

第一步:核对实际请求信息

先确认程序运行时使用的确实是问题中的 appId,并记录以下信息:

  • 接口名称,例如 alipay.trade.precreate
  • 支付宝网关地址
  • 请求时间
  • out_trade_no
  • 返回的 code、sub_code 和 sub_msg
  • 支付宝响应中的请求流水号或 trace_id,如果响应中提供

不要只确认“当面付已签约”,还要检查签约商户与当前应用之间是否存在正确的授权关系。

第二步:检查应用能力

进入支付宝开放平台中的对应应用,依次检查:

  1. 应用是否已经上线,或是否处于允许调用生产接口的状态。
  2. 应用是否具有当面付相关能力。
  3. 当面付签约主体是否与应用绑定主体一致。
  4. 商户 PID 是否正确。
  5. 签约状态是否已经生效。

如果刚刚完成签约或修改配置,可在后台状态更新后再次发起请求。同步时间应以平台显示的实际状态为准,不要预设固定的生效时长。

第三步:确认接入模式

如果由商户自己的应用直接收款,应确认应用与签约商户一致。

如果由服务商代商户调用,则需要核对:

  • 商户是否已经授权服务商应用
  • 授权是否包含所需能力
  • app_auth_token 是否属于当前商户
  • 授权是否已经过期或被撤销
  • 请求中的收款主体是否与授权商户一致

第四步:检查客户端配置

以 Java SDK 为例,可以参考以下配置结构:

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

AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.setBizContent("""
{
  "out_trade_no": "ORDER_202609090001",
  "total_amount": "0.01",
  "subject": "当面付测试订单"
}
""");

AlipayTradePrecreateResponse response = alipayClient.execute(request);

System.out.println("code=" + response.getCode());
System.out.println("msg=" + response.getMsg());
System.out.println("subCode=" + response.getSubCode());
System.out.println("subMsg=" + response.getSubMsg());

这段代码只能用于确认实际调用的接口及其返回内容,无法绕过产品权限。即使签名验证已经通过,只要当前应用没有接口调用权限,仍会收到 ACQ.ACCESS_FORBIDDEN。

第五步:提交支付宝侧核查

如果已经确认应用、商户主体、运行环境和授权关系均无误,可以向支付宝技术支持提交排查,并提供:

  • appId
  • 商户 PID
  • 调用接口名称
  • 请求发生的准确时间
  • 完整错误码
  • out_trade_no
  • 请求流水号或 trace_id
  • 应用能力和产品签约状态截图

不要提交应用私钥、支付密码、AES 密钥或未经脱敏的用户信息。

注意事项

40004 Business Failed 表示支付宝业务系统已经接收请求,但业务处理失败。本次问题应重点关注 ACQ.ACCESS_FORBIDDEN。反复更换签名方式,或修改订单标题、金额,通常无法解决接口权限问题。

appId 虽然不是应用私钥,但公开发布排查信息时仍建议适当脱敏。最终应以支付宝开放平台中该应用的实时能力状态,以及支付宝技术支持根据请求流水给出的核查结果为准。

备注:内容仅供参考。