PAYATHON 2026

运行 alipayDemo_net_FAST_INSTANT_TRADE_PAY 报 ACQ.ACCESS_FORBID

支付老李

结论

ACQ.ACCESS_FORBIDDEN 表示当前应用或商户没有权限调用实际请求的支付接口。这不是签名错误,也不是订单参数格式错误。

从返回报文看,本次调用的是:

alipay.trade.precreate

这是当面付的预创建交易接口,通常用于生成付款二维码。即使运行的示例名为 alipayDemo_net_FAST_INSTANT_TRADE_PAY,也要以实际发出的请求为准。如果要实现电脑网站支付,通常应调用:

alipay.trade.page.pay

排查时主要确认两点:

  1. 应用是否已经开通并绑定正确的支付产品;
  2. 示例程序实际调用的接口是否与已签约产品一致。

常见原因

1. 未开通对应的支付产品

不同接口需要不同的产品权限:

接口常见使用场景需要检查的产品
alipay.trade.page.pay电脑网站跳转支付电脑网站支付
alipay.trade.precreate商户生成二维码,用户扫码支付当面付
alipay.trade.wap.pay手机浏览器支付手机网站支付

当前响应节点是 alipay_trade_precreate_response,说明网关实际处理了 alipay.trade.precreate 请求。如果商户只开通了电脑网站支付,却调用这个接口,就可能收到 ACQ.ACCESS_FORBIDDEN。

2. 产品已经申请,但尚未生效

提交产品申请后,仍可能处于审核中、签约未完成或能力尚未正式生效等状态。仅在开放平台创建应用并配置密钥,不代表应用已经取得支付接口权限。

需要逐项确认:

  • 应用已经审核上线;
  • 对应支付产品已经签约并生效;
  • 当前应用已经添加该产品权限;
  • 商户账户状态正常;
  • 签约主体与应用绑定主体符合产品要求。

支付宝开放平台可能会调整后台名称和入口,具体以当前控制台显示为准。

3. 使用了错误的 app_id

同一商户可以创建多个应用。产品权限通常绑定到具体应用或相应的签约关系,并非配置任意一个 app_id 都能调用。

检查代码中的:

string appId = "实际已开通对应产品的应用 APPID";

它必须与开放平台中拥有相应权限的应用完全一致。尤其要排除这些情况:

  • 使用了另一个应用的 app_id;
  • 使用沙箱应用调用正式环境;
  • 使用正式应用调用沙箱环境;
  • 修改配置文件后,程序仍在读取旧配置;
  • 发布环境覆盖了本地配置。

4. 应用、商户与收款账号的关系不正确

还需要核对:

  • 当前应用是否绑定了正确的支付宝商户账号;
  • 商户是否完成所需签约;
  • 代调用场景是否已经完成应用授权;
  • app_auth_token 是否属于目标商户;
  • 授权是否已经过期、被撤销或缺少相应接口权限;
  • 是否混用了服务商应用与普通自研应用的调用方式。

如果不是服务商代商户调用,通常不应随意传入其他商户的 app_auth_token。

5. 商户或应用受到业务限制

即使产品权限已经开通,账户状态异常、签约失效、经营信息不符合产品要求或支付能力受限,也可能触发禁止访问类错误。

这类问题通常不能只靠修改代码解决。需要先在商户平台检查账户和签约状态。如果后台没有给出明确原因,应向支付宝技术支持提供 app_id、接口名、请求时间和请求流水等信息,请其核查。

解决步骤

第一步:确认实际调用的接口

不要根据 demo 名称判断接口,应直接检查代码创建了哪种请求对象:

AlipayTradePrecreateRequest request =
    new AlipayTradePrecreateRequest();

这段代码调用的是:

alipay.trade.precreate

只有创建下面的请求对象:

AlipayTradePagePayRequest request =
    new AlipayTradePagePayRequest();

才表示调用:

alipay.trade.page.pay

本次响应中已经出现 alipay_trade_precreate_response,因此应先检查是否运行了错误的示例入口,或者代码中是否仍然构造了 AlipayTradePrecreateRequest。

第二步:根据业务场景选择接口

如果要让用户在电脑浏览器中跳转到支付宝收银台,应使用电脑网站支付接口:

alipay.trade.page.pay

示例代码如下。支付宝 .NET SDK 版本不同,具体类名和调用方式可能略有差异:

IAopClient client = new DefaultAopClient(
    gatewayUrl,
    appId,
    appPrivateKey,
    "json",
    "1.0",
    "RSA2",
    alipayPublicKey,
    "UTF-8",
    false
);

AlipayTradePagePayRequest request = new AlipayTradePagePayRequest
{
    ReturnUrl = returnUrl,
    NotifyUrl = notifyUrl
};

request.BizContent = JsonConvert.SerializeObject(new
{
    out_trade_no = "ORDER_202609090001",
    total_amount = "0.01",
    subject = "测试订单",
    product_code = "FAST_INSTANT_TRADE_PAY"
});

AlipayTradePagePayResponse response = client.PageExecute(
    request,
    null,
    "GET"
);

string paymentForm = response.Body;

FAST_INSTANT_TRADE_PAY 是电脑网站支付常见的 product_code,但填写该参数不能代替产品签约。如果应用没有电脑网站支付权限,即使参数正确,调用仍可能失败。

如果业务需要生成二维码,则继续使用:

alipay.trade.precreate

同时确认当前应用和商户已经开通当面付。

AlipayTradePrecreateRequest request =
    new AlipayTradePrecreateRequest
    {
        NotifyUrl = notifyUrl
    };

request.BizContent = JsonConvert.SerializeObject(new
{
    out_trade_no = "ORDER_202609090002",
    total_amount = "0.01",
    subject = "扫码支付测试订单"
});

AlipayTradePrecreateResponse response = client.Execute(request);

调用成功后,通常应从业务响应中获取二维码内容,而不是从 AlipayTradePagePayResponse 中获取跳转表单。

第三步:检查开放平台权限

打开当前 app_id 对应的应用,逐项核对:

  • 应用是否已经上线;
  • 是否添加了“电脑网站支付”或“当面付”能力;
  • 对应产品是否完成签约;
  • 权限状态是否为已生效;
  • 签约商户是否为实际收款商户。

不能只确认应用是否存在,还要检查实际调用接口所需的产品权限。

第四步:核对环境配置

正式环境和沙箱环境的配置必须配套使用。

正式环境通常使用正式应用的:

app_id
应用私钥
支付宝公钥或支付宝公钥证书
正式网关

沙箱环境应使用沙箱应用提供的对应配置。不要混用正式 app_id、沙箱密钥和其他环境的网关。

还要确认程序实际加载了哪套配置,例如:

Console.WriteLine($"Gateway: {gatewayUrl}");
Console.WriteLine($"AppId: {appId}");
Console.WriteLine($"RequestType: {request.GetType().FullName}");

日志中不要输出应用私钥、证书私钥或其他敏感凭据。

第五步:检查完整的业务响应

判断调用是否成功时,应同时检查 Code、SubCode 和 SubMsg:

if (response.Code == "10000")
{
    // 业务调用成功
}
else
{
    Console.WriteLine($"Code: {response.Code}");
    Console.WriteLine($"Msg: {response.Msg}");
    Console.WriteLine($"SubCode: {response.SubCode}");
    Console.WriteLine($"SubMsg: {response.SubMsg}");
}

当前返回的是:

code: 40004
msg: Business Failed
sub_code: ACQ.ACCESS_FORBIDDEN
sub_msg: ACCESS_FORBIDDEN

这说明请求已经到达支付宝业务系统,但在业务权限校验阶段被拒绝。重新生成 RSA 密钥通常无法解决这个问题。签名错误一般会返回其他与签名或验签有关的错误。

排查清单

建议按以下顺序检查:

  1. 实际请求是否为 alipay.trade.precreate;
  2. 如果业务是电脑网站支付,是否应改用 alipay.trade.page.pay;
  3. 当前 app_id 是否已经添加目标产品能力;
  4. 商户是否完成电脑网站支付或当面付签约;
  5. 产品和接口权限是否已经正式生效;
  6. 应用是否已经上线;
  7. 是否混用了沙箱与正式环境配置;
  8. 代调用时,app_auth_token 是否有效并属于正确的商户;
  9. 商户账户、签约或支付能力是否受到限制。

如果这些项目都正常,但接口仍返回 ACQ.ACCESS_FORBIDDEN,需要向支付宝技术支持提供脱敏后的请求参数、app_id、接口名、请求时间、正式或沙箱环境信息,以及支付宝返回的完整错误码。不要提交应用私钥、证书私钥或其他密钥材料。

备注:内容仅供参考。