PAYATHON 2026

电脑网站支付已签约,为何仍提示接口没有权限?

支付小周

结论

报错的直接原因是:签约产品与实际调用的接口不一致。

电脑网站支付使用的接口是:

alipay.trade.page.pay

错误信息中的响应节点却是:

alipay_trade_precreate_response

由此可以判断,程序实际调用了:

alipay.trade.precreate

这是当面付场景的接口,通常用于生成线下扫码支付二维码。仅签约电脑网站支付不会自动获得该接口的调用权限,所以支付宝返回:

ACQ.ACCESS_FORBIDDEN

解决方法

方案一:改用电脑网站支付接口

如果用户需要在电脑浏览器中打开支付宝收银台并完成付款,应改用:

alipay.trade.page.pay

Java SDK 示例:

AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

request.setReturnUrl("https://www.example.com/pay/return");
request.setNotifyUrl("https://www.example.com/pay/notify");

request.setBizContent("{" +
    "\"out_trade_no\":\"ORDER_202609130001\"," +
    "\"total_amount\":\"0.01\"," +
    "\"subject\":\"订单支付\"," +
    "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"" +
    "}");

AlipayTradePagePayResponse response = alipayClient.pageExecute(request);

if (response.isSuccess()) {
    String form = response.getBody();
    // 将 form 返回给浏览器,由浏览器提交或直接输出以跳转到支付宝收银台
} else {
    System.out.println(response.getCode());
    System.out.println(response.getSubCode());
    System.out.println(response.getSubMsg());
}

电脑网站支付通常需要保留以下参数:

{
  "product_code": "FAST_INSTANT_TRADE_PAY"
}

具体必填参数以支付宝开放平台当前的接口文档为准。

方案二:为应用开通当面付权限

如果业务确实需要调用:

alipay.trade.precreate

例如由商户生成二维码,再让用户使用支付宝扫码付款,就需要为当前应用和商户账号开通该接口所属的支付产品权限。

开通后,还要逐项确认:

  • 签约商户账号与应用绑定的商户账号一致;
  • 请求使用的 app_id 属于已经获得权限的应用;
  • 应用已完成必要的上线或产品绑定流程;
  • 正式环境与沙箱环境的网关、应用和密钥没有混用;
  • 签约状态已经生效。

当面付预创建接口的调用方式如下:

AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();

request.setNotifyUrl("https://www.example.com/pay/notify");

request.setBizContent("{" +
    "\"out_trade_no\":\"ORDER_202609130002\"," +
    "\"total_amount\":\"0.01\"," +
    "\"subject\":\"扫码支付订单\"" +
    "}");

AlipayTradePrecreateResponse response = alipayClient.execute(request);

if (response.isSuccess()) {
    String qrCode = response.getQrCode();
    // 根据 qrCode 生成支付二维码
} else {
    System.out.println(response.getCode());
    System.out.println(response.getSubCode());
    System.out.println(response.getSubMsg());
}

只有当前应用拥有 alipay.trade.precreate 的调用权限,这段代码才能正常取得 qr_code。

排查步骤

先记录实际请求中的 method 和 app_id,不要只看项目名称或签约页面来判断调用了哪个接口。

如果请求参数中出现:

method=alipay.trade.precreate

而商户只签约了电脑网站支付,基本可以确定是接口选错了。此时应按业务场景改用 alipay.trade.page.pay,或者另行开通当面付权限。

确认产品与接口匹配后,再检查以下内容:

  1. 当前 app_id 是否属于签约产品绑定的应用。
  2. SDK 是否误用了另一套应用配置。
  3. 正式环境的请求是否发往正式网关。
  4. 应用公钥证书、支付宝公钥证书或普通公钥是否与当前应用匹配。
  5. 商户后台显示的产品签约状态是否有效。
  6. 如果由服务商代调用,商户授权关系和应用权限是否完整。

注意事项

code 为 40004 只能说明业务处理失败,定位问题时应重点查看:

sub_code=ACQ.ACCESS_FORBIDDEN

这个错误通常与签名格式、金额格式或订单号重复无关。签名有误时,一般会返回明确的签名类错误码,因此不应优先尝试更换密钥。

已经签约某个支付产品,也不代表所有支付接口都能调用。支付宝会按业务场景授予接口权限,电脑网站支付、手机网站支付、App 支付和当面付使用的接口各不相同。要解决这个问题,需要让实际调用的 API 与已签约产品保持一致。

备注:内容仅供参考。