Files
2026-06-01 14:39:45 +08:00

94 lines
2.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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