This commit is contained in:
Mrx
2026-03-23 12:59:45 +08:00
parent 8eec9685db
commit 7c4bcefc81
2 changed files with 42 additions and 11 deletions

View File

@@ -22,12 +22,31 @@ var (
ErrNotFound = errors.New("查询为空")
)
// JiguangResponse 极光API响应结构
// JiguangResponse 极光API响应结构(兼容两套字段命名)
//
// 格式一ordernum、message、result定位/查询类接口常见)
// 格式二order_id、msg、data文档中的 code/msg/order_id/data
type JiguangResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
OrderID string `json:"order_id"`
Data interface{} `json:"data"`
Code int `json:"code"`
Msg string `json:"msg"`
Message string `json:"message"`
OrderID string `json:"order_id"`
OrderNum string `json:"ordernum"`
Data interface{} `json:"data"`
Result interface{} `json:"result"`
}
// normalize 将异名字段合并到 OrderID、Msg便于后续统一分支使用
func (r *JiguangResponse) normalize() {
if r == nil {
return
}
if r.OrderID == "" && r.OrderNum != "" {
r.OrderID = r.OrderNum
}
if r.Msg == "" && r.Message != "" {
r.Msg = r.Message
}
}
// JiguangConfig 极光服务配置
@@ -211,6 +230,7 @@ func (j *JiguangService) CallAPI(ctx context.Context, apiCode string, apiPath st
}
return nil, err
}
jiguangResp.normalize()
// 记录响应日志(不记录具体响应数据)
if j.logger != nil {
@@ -225,8 +245,12 @@ func (j *JiguangService) CallAPI(ctx context.Context, apiCode string, apiPath st
if jiguangResp.Code != 0 && jiguangResp.Code != 200 && jiguangResp.Code != 400 {
// 创建极光错误
jiguangErr := NewJiguangErrorFromCode(jiguangResp.Code)
if jiguangErr.Message == fmt.Sprintf("未知错误码: %d", jiguangResp.Code) && jiguangResp.Msg != "" {
jiguangErr.Message = jiguangResp.Msg
if jiguangErr.Message == fmt.Sprintf("未知错误码: %d", jiguangResp.Code) {
if jiguangResp.Msg != "" {
jiguangErr.Message = jiguangResp.Msg
} else if jiguangResp.Message != "" {
jiguangErr.Message = jiguangResp.Message
}
}
// 根据错误类型返回不同的错误
if jiguangErr.IsNoRecord() {
@@ -265,10 +289,18 @@ func (j *JiguangService) CallAPI(ctx context.Context, apiCode string, apiPath st
}
}
// 将data转换为JSON字节
dataBytes, err := json.Marshal(jiguangResp.Data)
// 成功时业务体在 data 或 result
payload := jiguangResp.Data
if payload == nil {
payload = jiguangResp.Result
}
if payload == nil {
return []byte("{}"), nil
}
dataBytes, err := json.Marshal(payload)
if err != nil {
err = errors.Join(ErrSystem, fmt.Errorf("data字段序列化失败: %w", err))
err = errors.Join(ErrSystem, fmt.Errorf("业务数据序列化失败: %w", err))
if j.logger != nil {
j.logger.LogErrorWithResponseID(requestID, transactionID, apiCode, err, params, jiguangResp.OrderID)
}