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
 | |
| }
 |