alipay.fund.auth.order.app.freeze 提示商户无接口权限
结论
alipay.fund.auth.order.app.freeze 接入检测通过,只能说明应用具备调用该接口的基本条件,不能证明实际发起冻结的商户已经获得资金预授权产品权限。
这类报错通常不是缺少其他 API 权限,而是请求对应的实际收款商户(PID)尚未签约,或尚未开通 PRE_AUTH_ONLINE 对应的支付宝预授权产品。排查时还要确认应用绑定、签约商户、调用身份和预授权场景是否一致。
为什么接入检测通过仍会报错
接入检测主要检查应用配置,例如:
- AppID 是否有效;
- 当前应用能否配置该接口;
- 密钥、网关和 SDK 的基本配置是否正确;
- 应用是否具备提交该接口请求的条件。
正式调用接口时,支付宝还会检查实际商户:
- 请求对应的商户 PID 是否已签约支付宝预授权产品;
- 商户所属行业和经营场景是否符合准入要求;
- 当前 AppID 是否已绑定该商户,或能否代表该商户调用;
product_code是否与商户签约产品及业务场景匹配;- 服务商代调用时,商户授权关系是否有效。
因此,“应用能接入接口”和”商户能使用产品”属于两层不同的权限。
处理步骤
1. 确认实际调用身份
先确认请求使用的 AppID,以及该应用所属或代为调用的商户 PID。
需要重点排查:
- 接入检测使用 A 商户,正式请求却由 B 商户发起;
- 使用服务商应用调用,但没有正确传递商户授权令牌;
- 应用属于服务商,但实际经营商户尚未开通预授权;
- 混用了沙箱和生产环境的 AppID、密钥或网关配置;
- 签约产品开通在一个支付宝账号下,应用却绑定在另一个账号下。
在服务商模式下,即使服务商本身具备接口调用能力,被代调用的商户也不会自动获得预授权产品权限。
2. 检查商户产品签约状态
登录支付宝商家平台或开放平台,检查实际商户是否已经完成”支付宝预授权”相关产品的申请和签约,并确认产品已经生效。
重点核对:
- 产品申请不是仅处于已提交、审核中或待签约状态;
- 已生效的产品支持线上 App 预授权场景;
- 签约主体与请求中的商户主体一致;
- 当前业务所属行业在该产品的准入范围内;
- 产品权限确实包含
alipay.fund.auth.order.app.freeze。
不同商户类型和行业对应的申请入口、产品名称及准入材料可能不同。如果后台找不到相应的申请入口,增加应用接口列表也无法解决。此时需要联系支付宝商家客服或提交开放平台工单,请平台核实该 PID 的产品权限。
提交工单时,建议提供:
- AppID;
- 商户 PID;
- 接口名称
alipay.fund.auth.order.app.freeze; - 请求时间;
- 支付宝返回的
code、sub_code、sub_msg; - 请求中的
product_code; - 是否由服务商代调用;
- 接入检测通过的截图。
不要在工单或公开渠道提交应用私钥、完整签名串等敏感信息。
3. 检查请求参数与已开通产品是否匹配
App 预授权冻结通常使用:
product_code=PRE_AUTH_ONLINE
示例业务参数如下:
{
"out_order_no": "AUTH202609090001",
"out_request_no": "AUTHREQ202609090001",
"order_title": "设备租赁预授权",
"amount": "100.00",
"product_code": "PRE_AUTH_ONLINE"
}
product_code 必须与商户实际开通的预授权产品及使用场景一致,不能为了绕过权限校验而随意修改。
4. 服务商调用时检查商户授权
如果第三方应用代商户调用接口,需要确认:
- 商户已经授权该第三方应用;
- 使用的是该商户对应且仍然有效的
app_auth_token; - 商户授权范围包含当前业务需要的能力;
- 最终接受校验的商户 PID,就是已经开通预授权产品的商户。
商户授权解决的是”应用能否代表商户调用”的问题,不能代替商户自身的产品签约。
Java 调用示例
下面的示例只展示关键结构。网关、AppID、密钥和 SDK 版本应以项目的实际配置为准:
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
appId,
merchantPrivateKey,
"json",
"UTF-8",
alipayPublicKey,
"RSA2"
);
AlipayFundAuthOrderAppFreezeRequest request =
new AlipayFundAuthOrderAppFreezeRequest();
request.setBizContent("""
{
"out_order_no": "AUTH202609090001",
"out_request_no": "AUTHREQ202609090001",
"order_title": "设备租赁预授权",
"amount": "100.00",
"product_code": "PRE_AUTH_ONLINE"
}
""");
AlipayFundAuthOrderAppFreezeResponse response =
alipayClient.sdkExecute(request);
if (response.isSuccess()) {
// 将 orderStr 返回给 App,由支付宝客户端 SDK 继续完成授权。
String orderStr = response.getBody();
System.out.println(orderStr);
} else {
System.out.println("code=" + response.getCode());
System.out.println("subCode=" + response.getSubCode());
System.out.println("subMsg=" + response.getSubMsg());
}
如果由服务商代为调用,需要按照实际授权模式传入商户的 app_auth_token:
AlipayFundAuthOrderAppFreezeResponse response =
alipayClient.sdkExecute(request, appAuthToken);
排查问题时不要只看 sub_msg,应同时保存 code、sub_code、sub_msg 和请求时间。相比单独查看提示信息,sub_code 通常更有助于平台定位具体的权限节点。
注意事项
- 接口权限、商户产品权限和商户授权关系是三个不同的概念。
- 重新添加接口、生成密钥或反复进行接入检测,通常无法解决商户产品尚未开通的问题。
- 预授权受业务场景和行业准入条件限制,并非所有商户都能自助开通。
- 沙箱环境具备权限,不能证明生产环境中的商户已经签约相同产品。
- 如果产品已经显示生效,但接口仍返回”商户无接口权限”,应请支付宝核验”当前 AppID + 实际商户 PID +
PRE_AUTH_ONLINE”这一组合,不能只检查 AppID。 - 是否需要补充行业材料、进行特殊场景报备或加入平台白名单,取决于商户类型和实际业务场景。仅凭该报错无法确定,需以支付宝对具体 PID 的权限核验结果为准。
备注:内容仅供参考。
