当面付二维码突然无法生成,签约状态显示“签约中”
结论
“当面付”显示为“签约中”,通常说明产品尚未处于签约生效、可以正常使用的状态。如果之前能正常生成二维码,现在突然失败,更可能与商户签约、账户风控、资质复核或应用权限变化有关,不要一开始就认定是二维码生成代码出了问题。
先登录支付宝商家平台,确认签约状态和待处理事项,再查看 alipay.trade.precreate 接口返回的 code、sub_code 和 sub_msg。相比页面上的状态文字,这些字段更能说明具体原因。
可能原因
常见原因有:
- 商户资料、营业执照、经营类目或结算信息正在复核。
- 当面付协议有变更,需要确认协议、补充资料或重新签约。
- 支付宝正在对账户进行风险审核,暂时限制了相关收款能力。
- 应用与商户账号的绑定关系、接口权限或上线状态发生了变化。
- 调用了错误的应用、商户账号或支付宝网关,例如误用了沙箱配置。
- 更换应用密钥、支付宝公钥或应用证书后,本地配置没有同步更新。
- 接口调用已经失败,但程序没有记录响应内容,最终只表现为“二维码刷不出来”。
- 接口已经返回二维码内容,但前端二维码组件、网络请求或页面渲染出现异常。
签约审核和风险控制的具体原因,只能以商家平台显示的信息和支付宝支持渠道的核查结果为准。仅凭“签约中”三个字无法确定原因。
排查步骤
1. 检查商户签约状态
登录实际收款商户对应的支付宝商家平台,逐项确认:
- 当面付产品是否已经生效并处于可用状态。
- 页面是否提示待确认协议、待补充资料或审核失败。
- 商户账号是否有风险提醒或功能限制。
- 营业执照、法人信息、经营类目和结算账户是否需要更新。
- 当前使用的
app_id是否属于该商户,并且已经取得当面付相关权限。
如果状态长期停留在“签约中”,应通过平台提供的客服或工单入口查询审核进度。具体审核时间和恢复条件以支付宝的实际反馈为准。
2. 查看预创建接口的完整响应
当面付二维码通常由 alipay.trade.precreate 接口创建。不要只检查 qr_code 是否为空,还应完整记录以下字段:
codemsgsub_codesub_msgout_trade_no
生产日志不得输出私钥、完整身份证号、银行卡号或其他敏感信息。
Java SDK 可以按下面的方式检查响应:
AlipayTradePrecreateResponse response = alipayClient.execute(request);
if (response.isSuccess()) {
String qrCode = response.getQrCode();
if (qrCode == null || qrCode.isEmpty()) {
throw new IllegalStateException(
"预创建接口成功,但未返回 qr_code,out_trade_no=" + outTradeNo
);
}
System.out.println("qr_code=" + qrCode);
} else {
System.err.printf(
"当面付预创建失败:code=%s, msg=%s, sub_code=%s, sub_msg=%s, out_trade_no=%s%n",
response.getCode(),
response.getMsg(),
response.getSubCode(),
response.getSubMsg(),
outTradeNo
);
}
排查时应保留支付宝返回的原始错误码,不要根据错误文案自行猜测原因,也不要自动重复提交签约申请。
3. 区分接口失败和二维码渲染失败
如果响应中没有 qr_code,问题出在支付接口或商户权限侧,需要根据 code、sub_code 和 sub_msg 继续排查。
如果接口已经正常返回 qr_code,但页面仍未显示二维码,则检查:
- 前端是否收到了完整的二维码字符串。
- 二维码生成组件是否抛出异常。
- 接口响应是否被网关、反向代理或前端代码截断。
- 页面是否有 JavaScript 错误。
- 是否误将二维码内容作为图片 URL 直接加载。
- 是否因为缓存或发布异常,线上仍在运行旧代码。
可以暂时使用可信的二维码生成组件验证 qr_code 内容,但不要把生产环境的支付链接上传到公开网站。
4. 核对最近的配置变更
回查故障发生前是否做过以下操作:
- 更换应用私钥或支付宝公钥。
- 从普通公钥模式切换到证书模式。
- 更新应用证书、支付宝公钥证书或支付宝根证书。
- 修改
app_id、网关地址、签名算法或字符集。 - 切换商户账号、服务商账号或应用环境。
- 重新创建或下架应用,或者调整接口权限。
- 修改服务器时间、网络代理或防火墙策略。
使用证书模式时,还要确认加载的证书属于同一个应用,并检查证书文件是否被旧版本覆盖。
5. 使用唯一订单号重新测试
每次调用 alipay.trade.precreate 时,都应使用符合业务规则并且可以追踪的 out_trade_no。排查期间不要反复使用状态不明的旧订单号,否则订单状态可能影响判断。
同时保存以下信息,以便提交工单:
故障发生时间:
商户账号:
app_id:
接口名称:alipay.trade.precreate
out_trade_no:
code:
msg:
sub_code:
sub_msg:
签约状态截图:
近期配置或资质变更:
不要向公开社区或普通聊天窗口提交私钥、支付密码和完整证书内容。
如何处理
如果商家平台明确要求补充资料或确认协议,应按页面提示完成操作并等待审核。审核期间,重启服务器、清理缓存或重新生成二维码通常无法恢复接口权限。
如果平台没有说明原因,但接口返回了与权限、签约或风控有关的错误,请携带商户账号、app_id、订单号、调用时间和完整错误码,联系支付宝支持人员核查。
如果签约状态已经恢复正常,接口仍然失败,应继续检查应用权限、密钥和证书配置,并按接口返回的原始错误码处理。只有接口成功返回 qr_code 后,才需要排查前端二维码渲染问题。
注意事项
- “签约中”期间,不要无间隔地循环调用预创建接口。
- 不要只根据 HTTP 状态码判断支付接口是否成功,应读取支付宝的业务响应字段。
- 不要为了测试随意更换生产密钥或重新创建应用,以免扩大故障范围。
- 修复后应验证预创建、扫码支付、订单查询和异步通知的完整链路。
- 同一商户下存在多个应用时,必须确认线上请求使用了正确的
app_id和对应密钥。 - 签约审核、风控限制及恢复时间都属于平台侧状态,最终原因和处理结果以支付宝的实际核查为准。
备注:内容仅供参考。
