From 9438ccee5e1e23a7240a4d94364324e7d55172a4 Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Wed, 25 Mar 2026 11:07:58 +0800 Subject: [PATCH] f --- .../processors/ivyz/ivyzn2p8_processor.go | 158 ++++++++++-------- 1 file changed, 89 insertions(+), 69 deletions(-) diff --git a/internal/domains/api/services/processors/ivyz/ivyzn2p8_processor.go b/internal/domains/api/services/processors/ivyz/ivyzn2p8_processor.go index 5e368ef..bfb6e27 100644 --- a/internal/domains/api/services/processors/ivyz/ivyzn2p8_processor.go +++ b/internal/domains/api/services/processors/ivyz/ivyzn2p8_processor.go @@ -4,12 +4,10 @@ import ( "context" "encoding/json" "errors" - "strconv" - "strings" "tyapi-server/internal/domains/api/dto" "tyapi-server/internal/domains/api/services/processors" - "tyapi-server/internal/infrastructure/external/alicloud" + "tyapi-server/internal/infrastructure/external/shumai" ) // ProcessIVYZN2P8Request IVYZN2P8 身份证实名认证政务版 API处理方法 @@ -27,75 +25,97 @@ func ProcessIVYZN2P8Request(ctx context.Context, params []byte, deps *processors "name": paramsDto.Name, "idcard": paramsDto.IDCard, } - respBytes, err := deps.AlicloudService.CallAPI("api-mall/api/id_card/check", reqData) + + // 以表单方式调用数脉 API;参数在 CallAPIForm 内转为 application/x-www-form-urlencoded + apiPath := "/v4/id_card/check" + + // 先尝试使用政务接口(app_id2 和 app_secret2) + respBytes, err := deps.ShumaiService.CallAPIForm(ctx, apiPath, reqData, true) if err != nil { - if errors.Is(err, alicloud.ErrDatasource) { + if errors.Is(err, shumai.ErrNotFound) { + // 查无记录情况 + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, shumai.ErrDatasource) { + // 数据源错误 return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, shumai.ErrSystem) { + // 系统错误 + return nil, errors.Join(processors.ErrSystem, err) } - return nil, errors.Join(processors.ErrSystem, err) } - - // 对齐 yysybe08test 的原始响应结构,取 data 字段映射为 ivyzn2p8 返回 - var aliyunData struct { - Code int `json:"code"` - Data struct { - Birthday string `json:"birthday"` - Result interface{} `json:"result"` - Address string `json:"address"` - OrderNo string `json:"orderNo"` - Sex string `json:"sex"` - Desc string `json:"desc"` - } `json:"data"` - Result interface{} `json:"result"` - Desc string `json:"desc"` - } - if err := json.Unmarshal(respBytes, &aliyunData); err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } - - rawResult := aliyunData.Result - rawDesc := aliyunData.Desc - if aliyunData.Code == 200 { - rawResult = aliyunData.Data.Result - rawDesc = aliyunData.Data.Desc - } - - response := map[string]interface{}{ - "result": normalizeResult(rawResult), - "order_no": aliyunData.Data.OrderNo, - "desc": rawDesc, - "sex": aliyunData.Data.Sex, - "birthday": aliyunData.Data.Birthday, - "address": aliyunData.Data.Address, - } - return json.Marshal(response) + return respBytes, nil } -func normalizeResult(v interface{}) int { - switch r := v.(type) { - case float64: - return int(r) - case int: - return r - case int32: - return int(r) - case int64: - return int(r) - case json.Number: - n, err := r.Int64() - if err == nil { - return int(n) - } - case string: - s := strings.TrimSpace(r) - if s == "" { - return 1 - } - n, err := strconv.Atoi(s) - if err == nil { - return n - } - } - // 默认按不一致处理 - return 1 -} +// respBytes, err := deps.AlicloudService.CallAPI("api-mall/api/id_card/check", reqData) +// if err != nil { +// if errors.Is(err, alicloud.ErrDatasource) { +// return nil, errors.Join(processors.ErrDatasource, err) +// } +// return nil, errors.Join(processors.ErrSystem, err) +// } + +// return respBytes, nil +// // 对齐 yysybe08test 的原始响应结构,取 data 字段映射为 ivyzn2p8 返回 +// var aliyunData struct { +// Code int `json:"code"` +// Data struct { +// Birthday string `json:"birthday"` +// Result interface{} `json:"result"` +// Address string `json:"address"` +// OrderNo string `json:"orderNo"` +// Sex string `json:"sex"` +// Desc string `json:"desc"` +// } `json:"data"` +// Result interface{} `json:"result"` +// Desc string `json:"desc"` +// } +// if err := json.Unmarshal(respBytes, &aliyunData); err != nil { +// return nil, errors.Join(processors.ErrSystem, err) +// } + +// rawResult := aliyunData.Result +// rawDesc := aliyunData.Desc +// if aliyunData.Code == 200 { +// rawResult = aliyunData.Data.Result +// rawDesc = aliyunData.Data.Desc +// } + +// response := map[string]interface{}{ +// "result": normalizeResult(rawResult), +// "order_no": aliyunData.Data.OrderNo, +// "desc": rawDesc, +// "sex": aliyunData.Data.Sex, +// "birthday": aliyunData.Data.Birthday, +// "address": aliyunData.Data.Address, +// } +// return json.Marshal(response) +// } + +// func normalizeResult(v interface{}) int { +// switch r := v.(type) { +// case float64: +// return int(r) +// case int: +// return r +// case int32: +// return int(r) +// case int64: +// return int(r) +// case json.Number: +// n, err := r.Int64() +// if err == nil { +// return int(n) +// } +// case string: +// s := strings.TrimSpace(r) +// if s == "" { +// return 1 +// } +// n, err := strconv.Atoi(s) +// if err == nil { +// return n +// } +// } +// // 默认按不一致处理 +// return 1 +// }