PAYATHON 2026

当面付二维码突然无法生成,签约状态显示“签约中”

支付小周

结论

“当面付”显示为“签约中”,通常说明产品尚未处于签约生效、可以正常使用的状态。如果之前能正常生成二维码,现在突然失败,更可能与商户签约、账户风控、资质复核或应用权限变化有关,不要一开始就认定是二维码生成代码出了问题。

先登录支付宝商家平台,确认签约状态和待处理事项,再查看 alipay.trade.precreate 接口返回的 code、sub_code 和 sub_msg。相比页面上的状态文字,这些字段更能说明具体原因。

可能原因

常见原因有:

  • 商户资料、营业执照、经营类目或结算信息正在复核。
  • 当面付协议有变更,需要确认协议、补充资料或重新签约。
  • 支付宝正在对账户进行风险审核,暂时限制了相关收款能力。
  • 应用与商户账号的绑定关系、接口权限或上线状态发生了变化。
  • 调用了错误的应用、商户账号或支付宝网关,例如误用了沙箱配置。
  • 更换应用密钥、支付宝公钥或应用证书后,本地配置没有同步更新。
  • 接口调用已经失败,但程序没有记录响应内容,最终只表现为“二维码刷不出来”。
  • 接口已经返回二维码内容,但前端二维码组件、网络请求或页面渲染出现异常。

签约审核和风险控制的具体原因,只能以商家平台显示的信息和支付宝支持渠道的核查结果为准。仅凭“签约中”三个字无法确定原因。

排查步骤

1. 检查商户签约状态

登录实际收款商户对应的支付宝商家平台,逐项确认:

  • 当面付产品是否已经生效并处于可用状态。
  • 页面是否提示待确认协议、待补充资料或审核失败。
  • 商户账号是否有风险提醒或功能限制。
  • 营业执照、法人信息、经营类目和结算账户是否需要更新。
  • 当前使用的 app_id 是否属于该商户,并且已经取得当面付相关权限。

如果状态长期停留在“签约中”,应通过平台提供的客服或工单入口查询审核进度。具体审核时间和恢复条件以支付宝的实际反馈为准。

2. 查看预创建接口的完整响应

当面付二维码通常由 alipay.trade.precreate 接口创建。不要只检查 qr_code 是否为空,还应完整记录以下字段:

  • code
  • msg
  • sub_code
  • sub_msg
  • out_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 和对应密钥。
  • 签约审核、风控限制及恢复时间都属于平台侧状态,最终原因和处理结果以支付宝的实际核查为准。

备注:内容仅供参考。