Skip to content

错误码参考

全局错误码

错误码说明处理建议
00000成功-
10001参数错误检查请求参数是否完整、格式是否正确
10002签名验证失败检查签名算法、密钥是否正确
10003服务商号不存在确认 service_id 是否正确
10004商户未开通该支付渠道联系平台开通相应渠道
10005订单号重复更换唯一的订单号
10006订单金额错误确认金额为正整数,单位:分
10007时间戳过期检查服务器时间是否同步
10008支付方式错误检查 pay_method 参数是否正确
10009sub_openid 无效确认 sub_openid 是否正确
10010系统繁忙稍后重试或联系客服

支付接口错误码

错误码说明处理建议
20001订单创建失败检查参数后重试
20002支付渠道异常联系平台处理
20003订单已支付无需重复支付
20004订单已关闭重新创建订单
20005订单已过期重新创建订单

退款接口错误码

错误码说明处理建议
40001订单不存在检查订单号
40002订单未支付只能退款已支付订单
40003退款金额超限退款金额超过订单金额
40004退款单号重复更换退款单号
40005退款失败联系平台处理

查询接口错误码

错误码说明处理建议
30001订单不存在检查订单号是否正确
30002订单不属于该商户确认商户号是否正确
50001退款订单不存在检查退款单号是否正确
50002退款不属于该商户确认商户号是否正确

常见错误处理

签名验证失败 (10002)

可能原因:

  1. 私钥与公钥不匹配
  2. 参数排序错误
  3. 拼接格式错误
  4. 字符编码不是 UTF-8

解决方法:

javascript
// 正确的签名流程
const sortedKeys = Object.keys(params)
  .filter(key => key !== 'sign' && params[key] !== null)
  .sort();

const signString = sortedKeys
  .map(key => `${key}=${params[key]}`)
  .join('&');

const sign = crypto
  .createSign('RSA-SHA256')
  .update(signString)
  .sign(privateKey, 'base64');

订单号重复 (10005)

原因: out_trade_no 在商户系统内必须唯一

解决方法:

javascript
// 使用唯一订单号
const outTradeNo = 'ORDER' + Date.now() + Math.random().toString(36).substr(2, 6);

时间戳过期 (10007)

原因: 服务器时间与标准时间相差超过 5 分钟

解决方法:

bash
# 同步服务器时间
sudo ntpdate ntp.aliyun.com

退款金额超限 (40003)

原因: 退款金额超过订单可退金额

解决方法:

javascript
// 检查订单可退金额
const order = await queryOrder(tradeNo);
const refundableAmount = order.total_amount - order.refunded_amount;

if (refundAmount > refundableAmount) {
  console.error('退款金额超限,可退金额:', refundableAmount);
  return;
}

调试建议

  1. 开启日志: 记录所有请求和响应
  2. 使用测试环境: 先在沙箱环境测试
  3. 检查签名: 使用平台提供的签名验证工具
  4. 查看文档: 确认参数格式和要求
  5. 联系客服: 提供完整的请求日志

米付科技版权所有,保留所有权利