171 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			171 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package zhicha | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | ) | ||
|  | 
 | ||
|  | // ZhichaError 智查金控服务错误 | ||
|  | type ZhichaError struct { | ||
|  | 	Code    string `json:"code"` | ||
|  | 	Message string `json:"message"` | ||
|  | } | ||
|  | 
 | ||
|  | // Error 实现error接口 | ||
|  | func (e *ZhichaError) Error() string { | ||
|  | 	return fmt.Sprintf("智查金控错误 [%s]: %s", e.Code, e.Message) | ||
|  | } | ||
|  | 
 | ||
|  | // IsSuccess 检查是否成功 | ||
|  | func (e *ZhichaError) IsSuccess() bool { | ||
|  | 	return e.Code == "200" | ||
|  | } | ||
|  | 
 | ||
|  | // IsNoRecord 检查是否查询无记录 | ||
|  | func (e *ZhichaError) IsNoRecord() bool { | ||
|  | 	return e.Code == "201" | ||
|  | } | ||
|  | 
 | ||
|  | // IsBusinessError 检查是否是业务错误(非系统错误) | ||
|  | func (e *ZhichaError) IsBusinessError() bool { | ||
|  | 	return e.Code >= "302" && e.Code <= "320" | ||
|  | } | ||
|  | 
 | ||
|  | // IsSystemError 检查是否是系统错误 | ||
|  | func (e *ZhichaError) IsSystemError() bool { | ||
|  | 	return e.Code == "500" | ||
|  | } | ||
|  | 
 | ||
|  | // IsAuthError 检查是否是认证相关错误 | ||
|  | func (e *ZhichaError) IsAuthError() bool { | ||
|  | 	return e.Code == "304" || e.Code == "318" || e.Code == "319" || e.Code == "320" | ||
|  | } | ||
|  | 
 | ||
|  | // IsParamError 检查是否是参数相关错误 | ||
|  | func (e *ZhichaError) IsParamError() bool { | ||
|  | 	return e.Code == "302" || e.Code == "303" || e.Code == "305" || e.Code == "306" || e.Code == "307" || e.Code == "316" || e.Code == "317" | ||
|  | } | ||
|  | 
 | ||
|  | // IsServiceError 检查是否是服务相关错误 | ||
|  | func (e *ZhichaError) IsServiceError() bool { | ||
|  | 	return e.Code == "308" || e.Code == "309" || e.Code == "310" || e.Code == "311" | ||
|  | } | ||
|  | 
 | ||
|  | // IsUserError 检查是否是用户相关错误 | ||
|  | func (e *ZhichaError) IsUserError() bool { | ||
|  | 	return e.Code == "312" || e.Code == "313" || e.Code == "314" || e.Code == "315" | ||
|  | } | ||
|  | 
 | ||
|  | // 预定义错误常量 | ||
|  | var ( | ||
|  | 	// 成功状态 | ||
|  | 	ErrSuccess = &ZhichaError{Code: "200", Message: "请求成功"} | ||
|  | 	ErrNoRecord = &ZhichaError{Code: "201", Message: "查询无记录"} | ||
|  | 
 | ||
|  | 	// 业务参数错误 | ||
|  | 	ErrBusinessParamMissing = &ZhichaError{Code: "302", Message: "业务参数缺失"} | ||
|  | 	ErrParamError = &ZhichaError{Code: "303", Message: "参数错误"} | ||
|  | 	ErrHeaderParamMissing = &ZhichaError{Code: "304", Message: "请求头参数缺失"} | ||
|  | 	ErrNameError = &ZhichaError{Code: "305", Message: "姓名错误"} | ||
|  | 	ErrPhoneError = &ZhichaError{Code: "306", Message: "手机号错误"} | ||
|  | 	ErrIDCardError = &ZhichaError{Code: "307", Message: "身份证号错误"} | ||
|  | 
 | ||
|  | 	// 服务相关错误 | ||
|  | 	ErrServiceNotExist = &ZhichaError{Code: "308", Message: "服务不存在"} | ||
|  | 	ErrServiceNotEnabled = &ZhichaError{Code: "309", Message: "服务未开通"} | ||
|  | 	ErrInsufficientBalance = &ZhichaError{Code: "310", Message: "余额不足"} | ||
|  | 	ErrRemoteDataError = &ZhichaError{Code: "311", Message: "调用远程数据异常"} | ||
|  | 
 | ||
|  | 	// 用户相关错误 | ||
|  | 	ErrUserNotExist = &ZhichaError{Code: "312", Message: "用户不存在"} | ||
|  | 	ErrUserStatusError = &ZhichaError{Code: "313", Message: "用户状态异常"} | ||
|  | 	ErrUserUnauthorized = &ZhichaError{Code: "314", Message: "用户未授权"} | ||
|  | 	ErrWhitelistError = &ZhichaError{Code: "315", Message: "白名单错误"} | ||
|  | 
 | ||
|  | 	// 时间戳和认证错误 | ||
|  | 	ErrTimestampInvalid = &ZhichaError{Code: "316", Message: "timestamp不合法"} | ||
|  | 	ErrTimestampExpired = &ZhichaError{Code: "317", Message: "timestamp已过期"} | ||
|  | 	ErrSignVerifyFailed = &ZhichaError{Code: "318", Message: "验签失败"} | ||
|  | 	ErrDecryptFailed = &ZhichaError{Code: "319", Message: "解密失败"} | ||
|  | 	ErrUnauthorized = &ZhichaError{Code: "320", Message: "未授权"} | ||
|  | 
 | ||
|  | 	// 系统错误 | ||
|  | 	ErrSystemError = &ZhichaError{Code: "500", Message: "系统异常,请联系管理员"} | ||
|  | ) | ||
|  | 
 | ||
|  | // NewZhichaError 创建新的智查金控错误 | ||
|  | func NewZhichaError(code, message string) *ZhichaError { | ||
|  | 	return &ZhichaError{ | ||
|  | 		Code:    code, | ||
|  | 		Message: message, | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // NewZhichaErrorFromCode 根据状态码创建错误 | ||
|  | func NewZhichaErrorFromCode(code string) *ZhichaError { | ||
|  | 	switch code { | ||
|  | 	case "200": | ||
|  | 		return ErrSuccess | ||
|  | 	case "201": | ||
|  | 		return ErrNoRecord | ||
|  | 	case "302": | ||
|  | 		return ErrBusinessParamMissing | ||
|  | 	case "303": | ||
|  | 		return ErrParamError | ||
|  | 	case "304": | ||
|  | 		return ErrHeaderParamMissing | ||
|  | 	case "305": | ||
|  | 		return ErrNameError | ||
|  | 	case "306": | ||
|  | 		return ErrPhoneError | ||
|  | 	case "307": | ||
|  | 		return ErrIDCardError | ||
|  | 	case "308": | ||
|  | 		return ErrServiceNotExist | ||
|  | 	case "309": | ||
|  | 		return ErrServiceNotEnabled | ||
|  | 	case "310": | ||
|  | 		return ErrInsufficientBalance | ||
|  | 	case "311": | ||
|  | 		return ErrRemoteDataError | ||
|  | 	case "312": | ||
|  | 		return ErrUserNotExist | ||
|  | 	case "313": | ||
|  | 		return ErrUserStatusError | ||
|  | 	case "314": | ||
|  | 		return ErrUserUnauthorized | ||
|  | 	case "315": | ||
|  | 		return ErrWhitelistError | ||
|  | 	case "316": | ||
|  | 		return ErrTimestampInvalid | ||
|  | 	case "317": | ||
|  | 		return ErrTimestampExpired | ||
|  | 	case "318": | ||
|  | 		return ErrSignVerifyFailed | ||
|  | 	case "319": | ||
|  | 		return ErrDecryptFailed | ||
|  | 	case "320": | ||
|  | 		return ErrUnauthorized | ||
|  | 	case "500": | ||
|  | 		return ErrSystemError | ||
|  | 	default: | ||
|  | 		return &ZhichaError{ | ||
|  | 			Code:    code, | ||
|  | 			Message: "未知错误", | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // IsZhichaError 检查是否是智查金控错误 | ||
|  | func IsZhichaError(err error) bool { | ||
|  | 	_, ok := err.(*ZhichaError) | ||
|  | 	return ok | ||
|  | } | ||
|  | 
 | ||
|  | // GetZhichaError 获取智查金控错误 | ||
|  | func GetZhichaError(err error) *ZhichaError { | ||
|  | 	if zhichaErr, ok := err.(*ZhichaError); ok { | ||
|  | 		return zhichaErr | ||
|  | 	} | ||
|  | 	return nil | ||
|  | } |