PAYATHON 2026

支付宝报错ACQ.MERCHANT_STATUS_NOT_NORMAL如何重新签约

支付阿杰

结论

ACQ.MERCHANT_STATUS_NOT_NORMAL 表示支付宝判定当前商户的协议状态异常。这个问题通常与接口参数、签名或代码逻辑无关,反复重试支付接口也不会恢复。

先核对报错对应的商户账号、app_id 和支付宝商户号(PID),然后由商户管理员或签约主体登录支付宝官方商家平台,完成补签、续签或重新签约。如果后台没有签约入口,需要提交支付宝官方工单,或联系对应的支付宝业务经理,请支付宝核查协议状态并下发签约任务。协议状态恢复正常后,接口才能继续受理请求。

常见原因

出现该错误,通常是以下原因之一:

  • 商户合同已到期、被终止或正在等待补签。
  • 商户主体、营业执照或法人等信息发生变化,需要更新原协议。
  • 当前登录的账号不是合同签约账号,或者没有管理员权限。
  • 报错应用绑定的是另一个 PID,但排查时登录了其他商户账号。
  • 只有某项支付产品的协议异常,并非商户的全部支付宝服务都异常。
  • 支付宝正在审核商户的资质、合规情况或相关风险。
  • 服务商代商户调用接口时,实际存在异常的是被代调用的商户。

具体原因应以支付宝后台显示的状态或支付宝支持人员的核查结果为准。

处理步骤

1. 确认发生异常的商户身份

从接口请求和响应中整理以下信息:

  • app_id
  • 商户号(PID)
  • 商户主体名称
  • 调用的接口名称
  • 使用的产品,例如当面付、电脑网站支付、手机网站支付或 App 支付
  • 报错时间
  • 支付宝返回的 code、sub_code、sub_msg
  • 请求流水号、订单号和支付宝响应中的追踪信息

重点检查 app_id 实际绑定的 PID。在多个应用、多个商户主体或服务商代调用的场景中,很容易登录到错误的账号。

2. 使用正确账号检查签约状态

使用对应商户的管理员账号登录支付宝商家平台和开放平台,检查以下内容:

  • 商户主体和资质是否有效;
  • 应用是否绑定了正确的商户;
  • 对应的支付产品是否已经签约;
  • 是否有待签署、待确认、待补充材料或待整改的任务;
  • 账号消息、站内信和管理员邮箱中是否有续签通知。

签约入口可能只对管理员、法人或拥有相应权限的操作员开放。如果普通操作员看不到入口,应先切换到商户管理员账号检查。

3. 后台没有入口时提交官方核查

如果账号和权限都正确,但后台仍然没有签约入口,需要通过支付宝商家平台的官方客服或工单渠道处理。可以在工单中直接说明:

接口返回 ACQ.MERCHANT_STATUS_NOT_NORMAL,提示商户协议状态非正常。当前商户后台没有待签约任务或重新签约入口,请核查具体异常协议,并协助下发补签或重新签约任务。

同时提供以下信息:

  • 商户号(PID);
  • app_id;
  • 商户主体名称;
  • 接口名称和产品名称;
  • 完整错误码及错误信息;
  • 最近一次报错时间;
  • 已脱敏的响应日志或截图。

如果业务通过支付宝服务商接入,还需要同步联系服务商。部分协议需要由服务商发起签约,商户未必能在后台自行创建签约流程。

4. 按下发任务重新签署

支付宝核查后,通常会说明异常协议的名称、原因和处理方式,或者向管理员账号下发签约任务。按照页面要求完成以下操作:

  1. 核对签约主体和商户号;
  2. 补充或更新营业执照、法人、经营范围等资料;
  3. 由有权人员确认协议;
  4. 完成人脸验证、授权或盖章等签署流程;
  5. 等待支付宝审核并同步协议状态。

不要通过来源不明的邮件或短信链接签署合同。应从支付宝官方商家平台、开放平台的站内通知,或经官方客服确认的入口进入。

5. 确认恢复后再验证接口

协议签署完成后,接口状态可能不会立即同步。先在后台确认协议或产品状态已经变为正常、有效或已生效,再使用小金额订单验证。

如果后台显示协议已经生效,但接口仍然返回相同错误,请将新请求的时间、订单号和完整响应补充到原工单中,让支付宝继续检查状态同步或应用绑定关系。

代码中的处理方式

业务系统应将该错误识别为商户配置类异常,停止无效的自动重试并触发告警。以下是 Java 风格的处理示例:

AlipayTradePayResponse response = client.execute(request);

if (!response.isSuccess()) {
    String subCode = response.getSubCode();
    String subMsg = response.getSubMsg();

    if ("ACQ.MERCHANT_STATUS_NOT_NORMAL".equals(subCode)) {
        log.error(
            "支付宝商户协议状态异常,appId={}, orderNo={}, subCode={}, subMsg={}",
            appId,
            orderNo,
            subCode,
            subMsg
        );

        // 商户协议问题无法通过重试解决,应告警并转人工处理。
        alertService.notifyMerchantAgreementException(
            appId,
            orderNo,
            subCode,
            subMsg
        );

        throw new PaymentUnavailableException(
            "当前支付渠道暂不可用,请稍后再试或选择其他支付方式"
        );
    }

    throw new PaymentException(
        "支付宝调用失败:" + subCode + " - " + subMsg
    );
}

如果系统使用通用 JSON 响应解析,应按照实际返回的字段进行判断:

function handleAlipayError(response) {
  const subCode = response.sub_code;
  const subMsg = response.sub_msg;

  if (subCode === "ACQ.MERCHANT_STATUS_NOT_NORMAL") {
    console.error("支付宝商户协议状态异常", {
      subCode,
      subMsg
    });

    // 不自动重试,通知运营人员检查商户协议。
    throw new Error("PAYMENT_CHANNEL_UNAVAILABLE");
  }

  throw new Error(`ALIPAY_ERROR: ${subCode || response.code}`);
}

代码只能阻止重复请求并补充告警,无法修改支付宝侧的协议状态。

注意事项

  • 不要尝试通过更换订单号、重新签名或无限重试解决该错误。
  • 不要为了绕过错误而临时使用他人的 PID 或 app_id,否则可能带来资金结算和合规风险。
  • 提交工单时,截图和日志中应隐藏应用私钥、商户密钥、证书私钥及用户身份信息等敏感内容。
  • 如果商户主体已经注销或发生实质变更,原协议可能无法直接恢复,需要按照支付宝要求重新进件或重新开通产品。
  • 在多主体、多应用场景中,需要分别核对”登录账号、PID、app_id、签约产品”之间的对应关系。
  • 恢复时间取决于异常原因、资料补充情况和支付宝的审核进度,无法通过修改接口代码加快。

备注:内容仅供参考。