支付宝网商贷沙盒调用 alipay.trade.precreate 是否需商户认证
结论
在支付宝沙盒环境中调用 alipay.trade.precreate,一般不要求真实账号事先完成商户认证。测试时,应使用开放平台为沙盒应用分配的沙盒商家账号、沙盒买家账号及沙盒应用参数,不能直接使用真实个人支付宝账号参与交易。
“吱口令不支持该产品码”通常说明应用能力、接口参数或调用环境不匹配,不能据此认定问题出在商户认证。建议先确认应用是否配置了当面付相关能力,以及请求中是否错误传入了 product_code。
正式环境的要求不同。上线调用 alipay.trade.precreate 前,通常需要有符合要求的商户主体,完成相应签约,并为应用开通当面付能力。具体准入条件以支付宝开放平台当前显示的签约要求为准。
沙盒账号应如何使用
沙盒测试涉及三类身份:
- 沙盒应用:提供测试使用的
app_id。 - 沙盒商家账号:模拟收款方。
- 沙盒买家账号:配合沙盒版支付宝客户端扫码付款。
真实个人支付宝账号一般不能直接作为沙盒买家或沙盒商家。即使使用个人账号登录开放平台并创建应用,调用接口时仍应使用该应用对应的沙盒参数和沙盒测试账号。
个人账号能否创建”网页应用”,取决于开放平台当前的账号准入和应用创建规则。不过,能够创建应用并不表示已经获得正式环境的收款能力。沙盒接口能否测试与正式商户是否具备签约资格,是两个不同的问题。
出现该提示时重点检查什么
1. 确认接口与产品能力是否匹配
alipay.trade.precreate 是预创建交易接口,主要用于生成支付宝扫码支付二维码,通常对应当面付场景。
如果应用开通的是网页支付、口令类产品或其他支付能力,却调用了当面付接口,就可能出现产品码不支持、产品未签约或应用无权限等错误。
如果问题中的”网商贷”确实是指支付宝贷款类产品,而不是”商家在线支付”,则需要重新确认业务范围。alipay.trade.precreate 属于支付交易接口,不是网商贷授信或贷款接口。
2. 检查 product_code
不要直接复制其他支付接口示例中的 product_code。网页支付、手机网站支付、App 支付和当面付使用的产品码并不相同。
调用 alipay.trade.precreate 时,应按照该接口当前的文档构造业务参数。如果文档没有要求传入 product_code,就不要自行添加;如果当前接入文档明确要求该字段,则必须填写与当面付能力匹配的值。
一种常见错误是传入网页支付或口令产品的产品码,例如:
{
"out_trade_no": "ORDER_202609080001",
"total_amount": "0.01",
"subject": "扫码支付测试",
"product_code": "错误或不适用于当面付的产品码"
}
排查时,可以先删除非必需的 product_code,只保留接口要求的核心业务参数。
3. 确认没有混用沙盒和正式环境参数
以下参数必须来自同一个沙盒应用:
- 沙盒
app_id - 应用私钥
- 支付宝公钥或支付宝公钥证书
- 沙盒网关地址
- 应用采用的签名方式
不能将沙盒 app_id 与正式网关搭配使用,也不能用正式应用的支付宝公钥验证沙盒响应。
4. 查看完整错误信息
不要只看页面上的提示文字,还要记录以下响应字段:
code
msg
sub_code
sub_msg
判断问题是否与账号认证有关,主要应看 sub_code。只有错误码明确指向应用未签约、产品权限不足、商户状态异常或主体资格受限时,才需要进一步检查认证和签约状态。
建议的处理步骤
- 登录支付宝开放平台,进入目标应用的沙盒环境。
- 确认当前使用的是沙盒
app_id和沙盒网关。 - 检查应用是否具备当面付或相应的扫码支付测试能力。
- 按照
alipay.trade.precreate的接口文档重新构造请求,不要混用网页支付、口令支付等接口的product_code。 - 使用沙盒商家账号作为收款方。
- 使用沙盒买家账号和配套的沙盒客户端扫码。
- 输出完整响应中的
sub_code和sub_msg。 - 沙盒测试通过后,再申请正式环境所需的商户认证、产品签约和应用上线。
Java 调用示例
以下示例只展示基本调用结构。密钥、公钥、网关地址和 app_id 必须替换为当前沙盒控制台提供的值:
AlipayClient alipayClient = new DefaultAlipayClient(
"沙盒网关地址",
"沙盒_APP_ID",
"应用私钥",
"json",
"UTF-8",
"支付宝公钥",
"RSA2"
);
AlipayTradePrecreateRequest request =
new AlipayTradePrecreateRequest();
request.setBizContent("""
{
"out_trade_no": "ORDER_202609080001",
"total_amount": "0.01",
"subject": "扫码支付测试"
}
""");
AlipayTradePrecreateResponse response =
alipayClient.execute(request);
if (response.isSuccess()) {
System.out.println("qr_code: " + response.getQrCode());
} else {
System.out.println("code: " + response.getCode());
System.out.println("msg: " + response.getMsg());
System.out.println("sub_code: " + response.getSubCode());
System.out.println("sub_msg: " + response.getSubMsg());
}
这个示例没有主动传入 product_code。如果支付宝当前的接口文档或应用配置明确要求该字段,应以控制台和对应接口文档为准,不要照搬其他支付接口示例中的值。
注意事项
沙盒接口可以调用,不代表正式环境可以直接收款。正式上线时,通常仍需完成商户主体认证、签约支付产品、配置应用密钥,并通过必要的上线审核。
二维码接口成功返回 qr_code,只说明预创建交易已经成功。用户扫码付款后,还需要通过异步通知或 alipay.trade.query 查询交易状态,不能仅凭前端扫码结果认定订单已经支付。
因此,排查当前问题时,应先确认产品能力与接口参数是否匹配,而不是直接进行商户认证。只有完整错误码明确指向商户资格或签约状态时,才需要根据提示补充认证或开通相应产品。
备注:内容仅供参考。
