跳到主要内容

错误代码 (Error Codes)

AXBlade API 使用标准的 HTTP 状态码来表示请求的成功或失败,并在响应体中提供具体的错误信息。

响应格式

{
"error": "ERROR_CODE",
"message": "Human readable error description",
"code": 400
}

常用 HTTP 状态码

状态码说明常见场景
200OK请求成功
400Bad Request参数错误、逻辑不通过(如余额不足)
401Unauthorized未提供 Token 或 Token 已过期
403Forbidden签名验证失败、权限不足
404Not Found资源不存在
429Too Many Requests触发限流
500Internal Error服务器内部故障

业务错误码 (Error Codes)

认证相关

错误码说明
INVALID_SIGNATUREEIP-712 签名验证失败
TIMESTAMP_EXPIRED签名时间戳过期 (5分钟内有效)
UNAUTHORIZEDJWT Token 无效或已过期
INVALID_ADDRESS无效的钱包地址格式

交易相关

错误码说明
INSUFFICIENT_BALANCE账户余额不足
INVALID_AMOUNT无效的金额参数
INVALID_SYMBOL不支持的交易对
INVALID_LEVERAGE杠杆倍数超出范围 (1-50)
PRICE_REQUIRED限价单需要指定价格
ORDER_NOT_FOUND订单不存在或已被取消
ORDER_NOT_OWNED无权操作此订单
ORDER_NOT_CANCELLABLE订单无法取消
POSITION_NOT_FOUND持仓不存在
MAX_LEVERAGE_EXCEEDED超过了交易对允许的最大杠杆
MARGIN_TOO_LOW剩余保证金不足以维持仓位
MATCHING_ERROR撮合引擎错误

充提相关

错误码说明
WITHDRAWAL_NOT_FOUND提现记录不存在
INVALID_STATUS状态不正确,只能取消 signed 状态的提现
CHAIN_ERROR链上调用失败

推荐系统相关

错误码说明
CODE_EXISTS推荐码已存在
ALREADY_BOUND用户已绑定推荐码
INVALID_CODE无效的推荐码

通用错误

错误码说明
REQUEST_FAILED通用的请求执行失败
MARKET_NOT_FOUND交易对不存在
RATE_LIMIT_EXCEEDED请求频率超限

错误处理示例

TypeScript

interface APIError {
error: string;
message: string;
code: number;
}

async function fetchWithErrorHandling<T>(url: string, options?: RequestInit): Promise<T> {
const response = await fetch(url, options);

if (!response.ok) {
const error: APIError = await response.json();

switch (error.error) {
case 'UNAUTHORIZED':
// Token 过期,重新登录
await refreshToken();
return fetchWithErrorHandling(url, options);

case 'INSUFFICIENT_BALANCE':
throw new Error(`余额不足: ${error.message}`);

case 'TIMESTAMP_EXPIRED':
throw new Error('签名已过期,请重新签名');

default:
throw new Error(error.message || '请求失败');
}
}

return response.json();
}

React Hook

import { useState, useCallback } from 'react';

export function useAPIError() {
const [error, setError] = useState<string | null>(null);

const handleError = useCallback((err: any) => {
if (err.error) {
switch (err.error) {
case 'INSUFFICIENT_BALANCE':
setError('余额不足,请先充值');
break;
case 'INVALID_SIGNATURE':
setError('签名验证失败,请重试');
break;
case 'UNAUTHORIZED':
setError('登录已过期,请重新登录');
break;
default:
setError(err.message || '操作失败');
}
} else {
setError(err.message || '未知错误');
}
}, []);

const clearError = useCallback(() => setError(null), []);

return { error, handleError, clearError };
}