diff --git a/apps/api/internal/logic/COMB/comb298ylogic.go b/apps/api/internal/logic/COMB/comb298ylogic.go index 2f8bf41..8c4e299 100644 --- a/apps/api/internal/logic/COMB/comb298ylogic.go +++ b/apps/api/internal/logic/COMB/comb298ylogic.go @@ -145,6 +145,14 @@ func (l *COMB298YLogic) COMB298Y(req *types.Request) (resp string, err *errs.App return "", errs.ErrSystem } apiRequests[i].Request = common.MapStructToAPIRequest(dataMap, apiRequests[i].Mapping, apiRequests[i].Wrap) + + // 如果是 RIS031,添加 type: 3 + if apiRequests[i].SourceId == "RIS031" { + if apiRequests[i].Request == nil { + apiRequests[i].Request = make(map[string]interface{}) + } + apiRequests[i].Request["type"] = 3 + } } logx.Infof("sourceId:%s,请求参数:%v", apiRequests[i].SourceId, apiRequests[i].Request) } diff --git a/apps/api/internal/logic/IVYZ/ivyz5733logic.go b/apps/api/internal/logic/IVYZ/ivyz5733logic.go index 46b3d39..da0048c 100644 --- a/apps/api/internal/logic/IVYZ/ivyz5733logic.go +++ b/apps/api/internal/logic/IVYZ/ivyz5733logic.go @@ -3,11 +3,14 @@ package IVYZ import ( "context" "encoding/hex" - "errors" - "tianyuan-api/apps/api/internal/service" + "encoding/json" + "fmt" + "strings" + "tianyuan-api/apps/api/internal/common" "tianyuan-api/apps/api/internal/svc" "tianyuan-api/apps/api/internal/types" "tianyuan-api/apps/api/internal/validator" + "tianyuan-api/apps/api/internal/westmodel" "tianyuan-api/pkg/crypto" "tianyuan-api/pkg/errs" @@ -49,6 +52,7 @@ func (l *IVYZ5733Logic) IVYZ5733(req *types.Request) (resp string, err *errs.App if !productCodeOk || productCode == "" { return "", errs.ErrSystem } + defer func() { if err != nil { status = "failed" @@ -79,68 +83,60 @@ func (l *IVYZ5733Logic) IVYZ5733(req *types.Request) (resp string, err *errs.App } // 3、西部加密 - // westConfig := l.svcCtx.Config.WestConfig - // encryptedFields, encryptStructFieldsErr := common.EncryptStructFields(data, westConfig.Key) - // if encryptStructFieldsErr != nil { - // logx.Errorf("西部加密错误:%v", encryptStructFieldsErr) - // return "", errs.ErrSystem - // } + westConfig := l.svcCtx.Config.WestConfig + encryptedFields, encryptStructFieldsErr := common.EncryptStructFields(data, westConfig.Key) + if encryptStructFieldsErr != nil { + logx.Errorf("西部加密错误:%v", encryptStructFieldsErr) + return "", errs.ErrSystem + } // 4、发送请求到西部 logx.Infof("交易号:%s", transactionID) - // apiRequest := common.MapStructToAPIRequest(encryptedFields, westmodel.IVYZ5733FieldMapping, "data") + apiRequest := common.MapStructToAPIRequest(encryptedFields, westmodel.IVYZ5733FieldMapping, "data") - // westResp, callAPIErr := l.svcCtx.WestDexService.CallAPI("G09SC02", apiRequest, l.svcCtx.Config.WestConfig.SecretId) - // if callAPIErr != nil { - // if callAPIErr.Code == errs.ErrDataSource.Code { - // encryptData, aesEncrypt := crypto.AesEncrypt(westResp, key) - // if aesEncrypt != nil { - // return "", errs.ErrSystem - // } - - // return encryptData, callAPIErr - // } - // return "", callAPIErr - // } - apiRequest := map[string]interface{}{ - "cardNo": data.IDCard, - "name": data.Name, - } - respData, callAPIErr := l.svcCtx.YushanService.Request("IDV044", apiRequest) + westResp, callAPIErr := l.svcCtx.WestDexService.CallAPI("G34BJ03", apiRequest, l.svcCtx.Config.WestConfig.SecretId) if callAPIErr != nil { - if errors.Is(callAPIErr, service.NotFound) { - return "", errs.ErrNotFound + if callAPIErr.Code == errs.ErrDataSource.Code { + return "", callAPIErr } - return "", errs.ErrSystem + return "", callAPIErr } - // 使用gjson判断respData是否有status字段 - statusField := gjson.GetBytes(respData, "status") - if !statusField.Exists() { - logx.Errorf("羽山返回数据中缺少status字段: %s", string(respData)) - return "", errs.ErrNotFound - } - encryptData, aesEncrypt := crypto.AesEncrypt(respData, key) + encryptData, aesEncrypt := crypto.AesEncrypt(westResp, key) if aesEncrypt != nil { return "", errs.ErrSystem } - - // 解析加密后的数据 - // var response map[string]interface{} - // unmarshalErr := json.Unmarshal([]byte(encryptData), &response) - // if unmarshalErr != nil { - // return "", errs.ErrSystem - // } - - // // 判断是否包含 "data" 字段 - // responseData, dataOk := response["data"].([]interface{}) - // if !dataOk || len(responseData) == 0 { - // return "", errs.ErrSystem - // } - - // 判断 "data" 中是否包含 "maritalStatus" - // maritalStatus := response.(map[string]interface{})["maritalStatus"] - // if maritalStatus == nil { - // return "", errs.ErrSystem - // } return encryptData, nil } +func handleResponse(resp []byte) ([]byte, error) { + result := gjson.GetBytes(resp, "data.data") + if !result.Exists() { + return nil, fmt.Errorf("婚姻状态查询失败") + } + + // 获取原始结果 + rawResult := result.String() + + // 根据结果转换状态码 + var statusCode string + switch { + case strings.HasPrefix(rawResult, "INR"): + statusCode = "0" // 匹配不成功 + case strings.HasPrefix(rawResult, "IA"): + statusCode = "1" // 结婚 + case strings.HasPrefix(rawResult, "IB"): + statusCode = "2" // 离婚 + default: + return nil, fmt.Errorf("婚姻状态查询失败,未知状态码: %s", statusCode) + } + + // 构建新的返回结果 + response := map[string]string{ + "status": statusCode, + } + // 序列化为JSON + jsonResponse, err := json.Marshal(response) + if err != nil { + return nil, fmt.Errorf("序列化结果失败: %v", err) + } + return jsonResponse, nil +} diff --git a/apps/api/internal/service/west_dex_service.go b/apps/api/internal/service/west_dex_service.go index 513b295..e69ed90 100644 --- a/apps/api/internal/service/west_dex_service.go +++ b/apps/api/internal/service/west_dex_service.go @@ -104,7 +104,7 @@ func (w *WestDexService) CallAPI(code string, reqData map[string]interface{}, se logx.Infof("西部流水号: %s", westDexResp.ID) - if westDexResp.Code != "00000" && westDexResp.Code != "200" { + if westDexResp.Code != "00000" && westDexResp.Code != "200" && westDexResp.Code != "0" { if westDexResp.Data == "" { logx.Errorf("【西部数据请求】业务失败时响应数据为空: %s %s", westDexResp.Message, westDexResp.Reason) return nil, errs.ErrSystem diff --git a/apps/api/internal/validator/structs.go b/apps/api/internal/validator/structs.go index 470ebaa..e5d8aa5 100644 --- a/apps/api/internal/validator/structs.go +++ b/apps/api/internal/validator/structs.go @@ -167,4 +167,5 @@ type COMB298YRequest struct { IDCard string `json:"id_card" validate:"required,validIDCard"` Name string `json:"name" validate:"required,min=1,validName"` MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` + AuthDate string `json:"auth_date" validate:"required,validAuthDate" encrypt:"false"` } diff --git a/apps/api/internal/westmodel/fieldMapping.go b/apps/api/internal/westmodel/fieldMapping.go index 7e96b71..d6e881d 100644 --- a/apps/api/internal/westmodel/fieldMapping.go +++ b/apps/api/internal/westmodel/fieldMapping.go @@ -43,17 +43,16 @@ var FLXGC9D1FieldMapping = map[string]string{ "MobileNo": "cell", } var FLXGCA3DFieldMapping = map[string]string{ - "IDCard": "id_card", - "Name": "name", + "IDCard": "id_card", + "Name": "name", + "AuthDate": "inquired_auth", } var FLXGDEC7FieldMapping = map[string]string{ "IDCard": "id_card", "Name": "name", } var FLXG8UI0FieldMapping = map[string]string{ - "IDCard": "id", - "Name": "name", - "MobileNo": "cell", + "IDCard": "keyWord", } var IVYZ385EFieldMapping = map[string]string{ "IDCard": "gmsfzhm", @@ -61,8 +60,8 @@ var IVYZ385EFieldMapping = map[string]string{ } var IVYZ5733FieldMapping = map[string]string{ - "IDCard": "certNumMan", - "Name": "nameMan", + "IDCard": "idCard", + "Name": "name", } var IVYZ9363FieldMapping = map[string]string{ "ManName": "nameMan",