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