package shujubao import ( "fmt" ) // ShujubaoError 数据宝服务错误 type ShujubaoError struct { Code string `json:"code"` Message string `json:"message"` } // Error 实现 error 接口 func (e *ShujubaoError) Error() string { return fmt.Sprintf("数据宝错误 [%s]: %s", e.Code, e.Message) } // IsSuccess 检查是否成功 func (e *ShujubaoError) IsSuccess() bool { return e.Code == "200" || e.Code == "0" || e.Code == "10000" } // NewShujubaoError 创建新的数据宝错误 func NewShujubaoError(code, message string) *ShujubaoError { return &ShujubaoError{ Code: code, Message: message, } } // 数据宝全系统错误码与描述映射(Code -> Desc) var systemErrorCodeDesc = map[string]string{ "10000": "成功", "10001": "参数传入有误", "10002": "查询失败", "10003": "系统处理异常", "10004": "系统处理超时", "10005": "服务异常", "10006": "查无", "10020": "同一参数请求次数超限", "99999": "其他错误", "999": "接口处理异常", "000": "key参数不能为空", "001": "找不到这个key", "002": "调用次数已用完", "003": "用户该接口状态不可用", "004": "接口信息不存在", "005": "你没有认证信息", "008": "当前接口只允许“企业认证”通过的账户进行调用,请在数据宝官网个人中心进行企业认证后再进行调用,谢谢!", "009": "触发风控", "011": "接口缺少参数", "012": "没有ip访问权限", "013": "接口模板不存在", "015": "该接口已下架", "020": "调用第三方产生异常", "022": "调用第三方返回的数据格式错误", "025": "你没有购买此接口", "026": "用户信息不存在", "027": "请求第三方地址超时,请稍后再试", "028": "请求第三方地址被拒绝,请稍后再试", "034": "签名不合法", "035": "请求参数加密有误", "036": "验签失败", "037": "timestamp不能为空", "038": "请求繁忙,请稍后联系管理员再试", "039": "请在个人中心接口设置加密状态", "040": "timestamp不合法", "041": "timestamp已过期", "042": "身份证手机号姓名银行卡等不符合规则", "043": "该号段不支持验证", "047": "请在个人中心获取密钥", "048": "找不到这个secretKey", "049": "用户还未申购该产品", "050": "请联系客服开启验签", "051": "超过当日调用次数", "052": "机房限制调用,请联系客服切换其他机房", "053": "系统错误", "054": "token无效", "055": "配置信息未完善,请联系数据宝工作人员", "056": "apiName参数不能为空", "057": "并发量超过限制,请联系客服", "058": "撞库风控预警,请联系客服", } // GetSystemErrorDesc 根据错误码获取系统错误描述(支持带 SYSTEM_ 前缀或纯数字) func GetSystemErrorDesc(code string) string { // 去掉 SYSTEM_ 前缀 key := code if len(code) > 7 && code[:7] == "SYSTEM_" { key = code[7:] } if desc, ok := systemErrorCodeDesc[key]; ok { return desc } return "" } // NewShujubaoErrorFromCode 根据状态码创建错误 func NewShujubaoErrorFromCode(code, message string) *ShujubaoError { if message != "" { return NewShujubaoError(code, message) } if desc := GetSystemErrorDesc(code); desc != "" { return NewShujubaoError(code, desc) } return NewShujubaoError(code, "未知错误") } // IsShujubaoError 检查是否是数据宝错误 func IsShujubaoError(err error) bool { _, ok := err.(*ShujubaoError) return ok } // GetShujubaoError 获取数据宝错误 func GetShujubaoError(err error) *ShujubaoError { if shujubaoErr, ok := err.(*ShujubaoError); ok { return shujubaoErr } return nil }