错误处理

SDK 错误类型

Node.js / PythonGoJava含义处理
WantuPayConfigError*ConfigErrorWantuPay.ConfigException本地入参或配置错误,请求未发出修正参数,不要重试
WantuPayHttpError*HTTPErrorWantuPay.HttpException网络失败或响应异常查询类接口可重试
WantuPayApiError*APIErrorWantuPay.ApiException网关返回业务失败,看 code按下方错误码处理
WantuWebhookVerifyError*WebhookVerifyErrorWantuPay.WebhookVerifyException回调验签失败不处理业务,返回非 2xx

Go 的错误用 errors.As 判别;Java 的四个异常都是非受检的,基类是 WantuPay.PayException。

Node.js
Python
Go
Java
import { WantuPayApiError, WantuPayHttpError } from 'wantu-merchant-sdk'

try {
  await pay.create_refund({ out_trade_no, out_refund_no, amount })
} catch (err) {
  if (err instanceof WantuPayApiError) {
    // 业务失败:err.code / err.channel_code(渠道原因,仅排障用)
    logger.error('退款失败', { code: err.code, message: err.message })
  } else if (err instanceof WantuPayHttpError) {
    // 网络问题:退款用同一 out_refund_no 重试是安全的
  } else {
    throw err
  }
}

错误码

codeHTTP含义处理
40001401签名错误检查 api_secret 与签名实现
40002401时间戳超窗或重放校准服务器时间后重试
40003403商户不存在或已禁用联系顽兔
40004400参数错误按 message 提示修改
40401404单据不存在检查单号
40901409单号冲突(同号不同参数)更换单号
40902409关单时订单已支付按已支付处理:入账或走退款接口
42201422业务不可行:渠道未开通、退款超额等按 message 处理;渠道拒绝时看 channel_code 排障
42202422notify_url 和商户后台的回调配置对不上:统一地址模式下传了,或者地址不在白名单里去商户后台「接入配置」核对回调方式和白名单,该改配置改配置,该改代码改代码,见支付回调
42901429触发限流退避后重试
50001500网关内部错误查询类重试;下单用原单号重试
50002502支付渠道暂不可用退避后重试

channel_code 与 channel_message 只用于排障展示,业务逻辑不要依赖它们。

重试原则

  • 查询类接口失败可以直接重试
  • 下单、退款用原单号重试,不会产生重复订单或重复退款
  • 40001 到 40004、42202 是配置或参数问题,重试无效,修正后再调

按症状定位问题走常见问题排查。