PAYATHON 2026

支付报错 ACQ.NO_PAYMENT_INSTRUMENTS_AVAILABLE 如何处理?

支付阿杰

结论

ACQ.NO_PAYMENT_INSTRUMENTS_AVAILABLE 表示当前交易没有可用的付款工具。支付请求可能已正常受理,但付款方账户中没有符合本次交易条件的余额、银行卡或其他支付方式。

遇到这个错误时,应先引导用户添加或更换付款方式,再检查交易币种、金额、支付场景和商户已开通的支付能力。反复调用支付接口通常解决不了问题。

常见原因

常见原因有:

  • 付款方未绑定银行卡,也没有其他可用的付款方式。
  • 账户余额不足,绑定的银行卡也不可用。
  • 现有付款工具不支持本次交易的币种、金额或业务场景。
  • 银行卡已过期、被冻结、超过限额,或尚未完成必要的身份验证。
  • 商户未开通对应的支付产品,限制了用户可选择的付款工具。
  • 交易所在的国家或地区、终端类型、订单类型超出付款工具的支持范围。
  • 支付渠道的风控或合规规则暂时限制了部分付款方式。

支付渠道会根据账户和交易信息判断具体原因及可用工具。仅凭这个错误码,通常无法确定是哪张银行卡或哪项规则导致付款工具不可用。

排查步骤

1. 检查接口返回内容

完整保存支付接口的响应信息,重点检查:

  • code
  • sub_code
  • msg
  • sub_msg
  • 商户订单号
  • 支付平台交易号
  • 请求时间
  • 支付产品或渠道
  • 币种和金额

具体字段名称以实际接入接口的响应结构为准。排查日志中不要记录银行卡号、验证码、完整身份信息等敏感数据。

2. 确认付款方是否有可用的付款方式

请用户进入付款账户,确认以下情况:

  • 是否已添加银行卡或其他付款方式;
  • 银行卡是否过期、冻结或受到银行限制;
  • 余额或信用额度是否充足;
  • 是否存在单笔限额、单日限额或跨境支付限制;
  • 是否需要完成实名认证、3-D Secure 等验证;
  • 当前付款工具是否支持订单币种和交易类型。

如果账户中没有可用工具,应引导用户添加新的付款方式。如果已有多个付款工具,可以更换后再试。

3. 核对支付请求

检查请求中的业务参数是否符合商户的签约能力:

  • 金额是否正确,最小货币单位是否换算无误;
  • 币种是否在商户和支付产品的支持范围内;
  • 支付产品、支付场景和终端类型是否匹配;
  • 买家所在的国家或地区是否受支持;
  • 商户是否已开通对应的银行卡、余额或跨境支付能力;
  • 测试环境是否使用了平台规定的测试账户和测试付款工具。

例如,接口要求以”分”为单位时,100 可能表示 1.00 元,而不是 100.00 元。金额单位应以所接入接口的文档为准。

4. 区分用户侧问题和商户配置问题

如果只有个别用户遇到这个错误,原因通常更可能出在用户账户、银行卡状态、额度或风控限制上。

如果大量用户在同一时间、使用同一币种或同一支付产品时均告失败,则需要进一步检查:

  • 商户签约状态;
  • 支付产品是否启用;
  • 渠道路由配置;
  • 币种和地区配置;
  • 支付渠道是否出现服务异常。

5. 必要时联系支付平台

如果用户确认已经添加有效的付款方式,但错误仍然持续出现,可以向支付平台提交工单,并提供:

  • 商户号;
  • 商户订单号;
  • 支付平台交易号;
  • 错误码和错误信息;
  • 发生时间及时区;
  • 币种和金额;
  • 支付场景;
  • 已脱敏的请求与响应日志。

不要在工单或普通日志中提交完整银行卡号、CVV、安全验证码、私钥或访问令牌。

代码处理示例

业务系统应将这个错误归类为需要用户操作的支付失败,不要无限自动重试。

String subCode = response.getSubCode();

if ("ACQ.NO_PAYMENT_INSTRUMENTS_AVAILABLE".equals(subCode)) {
    paymentOrder.markFailed(subCode);

    return PaymentResult.failed(
        "当前没有可用的付款方式,请添加或更换付款方式后重试。"
    );
}

如果接口把错误码放在 code 字段中,应按照实际响应结构读取:

function handlePaymentResponse(response) {
  const errorCode = response.sub_code || response.code;

  if (errorCode === "ACQ.NO_PAYMENT_INSTRUMENTS_AVAILABLE") {
    return {
      success: false,
      retryable: false,
      action: "CHANGE_PAYMENT_METHOD",
      message: "当前没有可用的付款方式,请添加或更换付款方式后重试。"
    };
  }

  return handleOtherPaymentResult(response);
}

前端可以根据业务动作给出明确提示:

if (result.action === "CHANGE_PAYMENT_METHOD") {
  showPaymentError("当前付款方式不可用,请添加或更换付款方式。");
  showChangePaymentMethodButton();
}

这里的 retryable: false 表示系统不应在条件完全相同的情况下立即自动重试。用户添加付款方式、更换银行卡或调整订单后,可以重新发起支付。

注意事项

  • 不要把这个错误直接解释成”接口参数错误”或”系统故障”。它主要表示当前交易没有可用的付款工具。
  • 不建议在后台连续重试,以免产生重复请求、触发限流或增加触发风控的概率。
  • 用户重新支付时,应继续使用唯一的商户订单号,或按照接口规则创建新的支付请求,避免重复扣款。
  • 不要只根据前端跳转页面判断支付结果。最终状态应结合接口响应、异步通知和主动查询来确认。
  • 不要向用户展示过多支付渠道的内部信息。提示用户”添加或更换付款方式”通常更容易理解。
  • 不同支付产品对这个错误码的处理建议可能不同,最终应以当前接入接口的错误码文档和支付平台的排查结果为准。

备注:内容仅供参考。