From 7c4bcefc8186fae66b7e4c61ad295f1a82301e9d Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Mon, 23 Mar 2026 12:59:45 +0800 Subject: [PATCH] f --- .../processors/qcxg/qcxggb2q_processor.go | 1 - .../external/jiguang/jiguang_service.go | 52 +++++++++++++++---- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/internal/domains/api/services/processors/qcxg/qcxggb2q_processor.go b/internal/domains/api/services/processors/qcxg/qcxggb2q_processor.go index 45261eb..371f6ca 100644 --- a/internal/domains/api/services/processors/qcxg/qcxggb2q_processor.go +++ b/internal/domains/api/services/processors/qcxg/qcxggb2q_processor.go @@ -75,6 +75,5 @@ func ProcessQCXGGB2QRequest(ctx context.Context, params []byte, deps *processors } } - // 极光服务已经返回了 data 字段的 JSON,直接返回即可 return respBytes, nil } diff --git a/internal/infrastructure/external/jiguang/jiguang_service.go b/internal/infrastructure/external/jiguang/jiguang_service.go index 9012f46..ea70a84 100644 --- a/internal/infrastructure/external/jiguang/jiguang_service.go +++ b/internal/infrastructure/external/jiguang/jiguang_service.go @@ -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) }