Files

94 lines
2.9 KiB
Go
Raw Permalink Normal View History

2026-06-01 14:39:45 +08:00
package haiyuapi
import (
"errors"
"fmt"
)
// 海宇API平台返回码
const (
CodeSuccess = 0 // 业务成功
CodeQueryEmpty = 1000 // 查询为空
CodeSystem = 1001 // 接口异常
CodeDecryptFail = 1002 // 参数解密失败
CodeRequestParam = 1003 // 基础参数校验不正确
CodeInvalidIP = 1004 // 未经授权的IP
CodeMissingAccessID = 1005 // 缺少Access-Id
CodeInvalidAccessID = 1006 // 未经授权的AccessId
CodeInsufficientBalance = 1007 // 账户余额不足,无法请求
CodeProductNotSubscribed = 1008 // 未开通此产品
CodeBusiness = 2001 // 业务失败
)
var (
ErrDatasource = errors.New("数据源异常")
ErrSystem = errors.New("系统异常")
ErrNotFound = errors.New("查询为空")
)
// haiyuapiAPIError 海宇API平台错误
type haiyuapiAPIError struct {
Code int
Message string
}
func (e *haiyuapiAPIError) Error() string {
return fmt.Sprintf("海宇API返回错误code: %dmessage: %s", e.Code, e.Message)
}
// NewHaiyuapiAPIError 创建平台错误
func NewHaiyuapiAPIError(code int, message string) *haiyuapiAPIError {
if message == "" {
if desc := GetPlatformCodeDesc(code); desc != "" {
message = desc
} else {
message = "海宇API返回未知错误"
}
}
return &haiyuapiAPIError{Code: code, Message: message}
}
// platformCodeDesc 平台 code -> 官方 message
var platformCodeDesc = map[int]string{
CodeSuccess: "业务成功",
CodeQueryEmpty: "查询为空",
CodeSystem: "接口异常",
CodeDecryptFail: "参数解密失败",
CodeRequestParam: "基础参数校验不正确",
CodeInvalidIP: "未经授权的IP",
CodeMissingAccessID: "缺少Access-Id",
CodeInvalidAccessID: "未经授权的AccessId",
CodeInsufficientBalance: "账户余额不足,无法请求",
CodeProductNotSubscribed: "未开通此产品",
CodeBusiness: "业务失败",
}
// GetPlatformCodeDesc 根据平台 code 获取描述
func GetPlatformCodeDesc(code int) string {
if desc, ok := platformCodeDesc[code]; ok {
return desc
}
return ""
}
// GetErrByCode 将海宇API code 映射为内部哨兵错误,供处理器 errors.Is 判断
//
// 1000 -> ErrNotFound查询为空可按产品约定当成功处理
// 1001, 1002, 1003 -> ErrSystem接口/解密/参数校验异常)
// 1004~1008, 2001 -> ErrDatasource鉴权、余额、产品、业务类上游错误
func GetErrByCode(code int) error {
switch code {
case CodeSuccess:
return nil
case CodeQueryEmpty:
return ErrNotFound
case CodeSystem, CodeDecryptFail, CodeRequestParam:
return ErrSystem
case CodeInvalidIP, CodeMissingAccessID, CodeInvalidAccessID,
CodeInsufficientBalance, CodeProductNotSubscribed, CodeBusiness:
return ErrDatasource
default:
return ErrDatasource
}
}