150 lines
4.2 KiB
Go
150 lines
4.2 KiB
Go
package jiguang
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// JiguangError 极光服务错误
|
|
type JiguangError struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// Error 实现error接口
|
|
func (e *JiguangError) Error() string {
|
|
return fmt.Sprintf("极光错误 [%d]: %s", e.Code, e.Message)
|
|
}
|
|
|
|
// IsSuccess 检查是否成功
|
|
func (e *JiguangError) IsSuccess() bool {
|
|
return e.Code == 0
|
|
}
|
|
|
|
// IsQueryFailed 检查是否查询失败
|
|
func (e *JiguangError) IsQueryFailed() bool {
|
|
return e.Code == 922
|
|
}
|
|
|
|
// IsNoRecord 检查是否查无记录
|
|
func (e *JiguangError) IsNoRecord() bool {
|
|
return e.Code == 921
|
|
}
|
|
|
|
// IsParamError 检查是否是参数相关错误
|
|
func (e *JiguangError) IsParamError() bool {
|
|
return e.Code == 400 || e.Code == 906 || e.Code == 914 || e.Code == 918
|
|
}
|
|
|
|
// IsAuthError 检查是否是认证相关错误
|
|
func (e *JiguangError) IsAuthError() bool {
|
|
return e.Code == 902 || e.Code == 903 || e.Code == 904 || e.Code == 905
|
|
}
|
|
|
|
// IsSystemError 检查是否是系统错误
|
|
func (e *JiguangError) IsSystemError() bool {
|
|
return e.Code == 405 || e.Code == 911 || e.Code == 912 || e.Code == 915 || e.Code == 916 || e.Code == 917 || e.Code == 919 || e.Code == 923
|
|
}
|
|
|
|
// 预定义错误常量
|
|
var (
|
|
// 成功状态
|
|
ErrSuccess = &JiguangError{Code: 0, Message: "请求成功"}
|
|
|
|
// 参数错误
|
|
ErrParamInvalid = &JiguangError{Code: 400, Message: "请求参数不正确"}
|
|
ErrMethodInvalid = &JiguangError{Code: 405, Message: "请求方法不正确"}
|
|
ErrParamFormInvalid = &JiguangError{Code: 906, Message: "请求参数形式不正确"}
|
|
ErrBodyIncomplete = &JiguangError{Code: 914, Message: "Body 请求参数不完整"}
|
|
ErrBodyNotSupported = &JiguangError{Code: 918, Message: "Body 请求参数不支持"}
|
|
|
|
// 认证错误
|
|
ErrAppIDInvalid = &JiguangError{Code: 902, Message: "错误的 appId/账户已删除"}
|
|
ErrTimestampInvalid = &JiguangError{Code: 903, Message: "错误的时间戳/时间误差大于 10 分钟"}
|
|
ErrSignMethodInvalid = &JiguangError{Code: 904, Message: "无法识别的签名方法"}
|
|
ErrSignInvalid = &JiguangError{Code: 905, Message: "签名不合法"}
|
|
|
|
// 系统错误
|
|
ErrAccountStatusError = &JiguangError{Code: 911, Message: "账户状态异常"}
|
|
ErrInterfaceDisabled = &JiguangError{Code: 912, Message: "接口状态不可用"}
|
|
ErrAPICallError = &JiguangError{Code: 915, Message: "API 接口调用有误"}
|
|
ErrInternalError = &JiguangError{Code: 916, Message: "内部接口调用错误,请联系相关人员"}
|
|
ErrTimeout = &JiguangError{Code: 917, Message: "请求超时"}
|
|
ErrBusinessDisabled = &JiguangError{Code: 919, Message: "业务状态不可用"}
|
|
ErrInterfaceException = &JiguangError{Code: 923, Message: "接口异常"}
|
|
|
|
// 业务错误
|
|
ErrNoRecord = &JiguangError{Code: 921, Message: "查无记录"}
|
|
ErrQueryFailed = &JiguangError{Code: 922, Message: "查询失败"}
|
|
)
|
|
|
|
// NewJiguangError 创建新的极光错误
|
|
func NewJiguangError(code int, message string) *JiguangError {
|
|
return &JiguangError{
|
|
Code: code,
|
|
Message: message,
|
|
}
|
|
}
|
|
|
|
// NewJiguangErrorFromCode 根据状态码创建错误
|
|
func NewJiguangErrorFromCode(code int) *JiguangError {
|
|
switch code {
|
|
case 0:
|
|
return ErrSuccess
|
|
case 400:
|
|
return ErrParamInvalid
|
|
case 405:
|
|
return ErrMethodInvalid
|
|
case 902:
|
|
return ErrAppIDInvalid
|
|
case 903:
|
|
return ErrTimestampInvalid
|
|
case 904:
|
|
return ErrSignMethodInvalid
|
|
case 905:
|
|
return ErrSignInvalid
|
|
case 906:
|
|
return ErrParamFormInvalid
|
|
case 911:
|
|
return ErrAccountStatusError
|
|
case 912:
|
|
return ErrInterfaceDisabled
|
|
case 914:
|
|
return ErrBodyIncomplete
|
|
case 915:
|
|
return ErrAPICallError
|
|
case 916:
|
|
return ErrInternalError
|
|
case 917:
|
|
return ErrTimeout
|
|
case 918:
|
|
return ErrBodyNotSupported
|
|
case 919:
|
|
return ErrBusinessDisabled
|
|
case 921:
|
|
return ErrNoRecord
|
|
case 922:
|
|
return ErrQueryFailed
|
|
case 923:
|
|
return ErrInterfaceException
|
|
default:
|
|
return &JiguangError{
|
|
Code: code,
|
|
Message: fmt.Sprintf("未知错误码: %d", code),
|
|
}
|
|
}
|
|
}
|
|
|
|
// IsJiguangError 检查是否是极光错误
|
|
func IsJiguangError(err error) bool {
|
|
_, ok := err.(*JiguangError)
|
|
return ok
|
|
}
|
|
|
|
// GetJiguangError 获取极光错误
|
|
func GetJiguangError(err error) *JiguangError {
|
|
if jiguangErr, ok := err.(*JiguangError); ok {
|
|
return jiguangErr
|
|
}
|
|
return nil
|
|
}
|