Skip to content

错误码参考

全局错误码

错误码说明处理建议
0000成功-
1001参数错误检查请求参数是否完整、格式是否正确
1002签名验证失败检查签名算法、密钥是否正确
1003商户号不存在确认商户号是否正确
1004商户未开通该支付渠道联系平台开通相应渠道
1005订单号重复更换唯一的订单号
1006订单金额错误确认金额为正整数,单位:分
1007时间戳过期检查服务器时间是否同步
1008支付渠道错误检查 channel 参数是否正确
1009openid 无效确认 openid 是否正确
1010系统繁忙稍后重试或联系客服

支付接口错误码

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

退款接口错误码

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

查询接口错误码

错误码说明处理建议
3001订单不存在检查订单号是否正确
3002订单不属于该商户确认商户号是否正确
5001退款订单不存在检查退款单号是否正确
5002退款不属于该商户确认商户号是否正确

常见错误处理

签名验证失败 (1002)

可能原因:

  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');

订单号重复 (1005)

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

解决方法:

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

时间戳过期 (1007)

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

解决方法:

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

退款金额超限 (4003)

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

解决方法:

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. 联系客服: 提供完整的请求日志

Copyright © 2024 米付科技