diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index 99ddd67..b9595f4 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -170,6 +170,24 @@ type YYSYD50FReq struct { MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` IDCard string `json:"id_card" validate:"required,validIDCard"` } + +type IVYZZQT3Req struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + PhotoData string `json:"photo_data" validate:"required,validBase64Image"` +} + +type IVYZSFELReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + PhotoData string `json:"photo_data" validate:"required,validBase64Image"` + AuthAuthorizeFileCode string `json:"auth_authorize_file_code" validate:"required"` +} +type IVYZBPQ2Req struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + PhotoData string `json:"photo_data" validate:"required,validBase64Image"` +} type YYSYF7DBReq struct { MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` StartDate string `json:"start_date" validate:"required,validDate" encrypt:"false"` diff --git a/internal/domains/api/services/api_request_service.go b/internal/domains/api/services/api_request_service.go index fd01452..0dfdddc 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -206,6 +206,9 @@ func registerAllProcessors(combService *comb.CombService) { "IVYZ2B2T": ivyz.ProcessIVYZ2B2TRequest, //能力资质核验(学历) "IVYZ5A9O": ivyz.ProcessIVYZ5A9ORequest, //全国⾃然⼈⻛险评估评分模型 "IVYZ6M8P": ivyz.ProcessIVYZ6M8PRequest, //职业资格证书 + "IVYZZQT3": ivyz.ProcessIVYZZQT3Request, //人脸比对V3 + "IVYZBPQ2": ivyz.ProcessIVYZBPQ2Request, //人脸比对V2 + "IVYZSFEL": ivyz.ProcessIVYZSFELRequest, //全国自然人人像三要素核验_V1 // COMB系列处理器 - 只注册有自定义逻辑的组合包 "COMB86PM": comb.ProcessCOMB86PMRequest, // 有自定义逻辑:重命名ApiCode diff --git a/internal/domains/api/services/form_config_service.go b/internal/domains/api/services/form_config_service.go index 9a6a88f..a60b8b4 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -200,6 +200,9 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string "IVYZ6M8P": &dto.IVYZ6M8PReq{}, //职业资格证书 "QYGL5CMP": &dto.QYGL5CMPReq{}, //企业五要素验证 "QCXG4896": &dto.QCXG4896Req{}, //网约车风险查询 + "IVYZZQT3": &dto.IVYZZQT3Req{}, //人脸比对V3 + "IVYZBPQ2": &dto.IVYZBPQ2Req{}, //人脸比对V2 + "IVYZSFEL": &dto.IVYZSFELReq{}, //全国自然人人像三要素核验_V1 } // 优先返回已配置的DTO diff --git a/internal/domains/api/services/processors/ivyz/ivyzbpq2_processor.go b/internal/domains/api/services/processors/ivyz/ivyzbpq2_processor.go new file mode 100644 index 0000000..6178533 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyzbpq2_processor.go @@ -0,0 +1,51 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessIVYZBPQ2Request IVYZBPQ2 人脸比对V2API处理方法 +func ProcessIVYZBPQ2Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZBPQ2Req + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + // 构建请求数据,使用xingwei服务的正确字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "image": paramsDto.PhotoData, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1104321425593790464" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + // 查空情况,返回特定的查空错误 + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + // 数据源错误 + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + // 系统错误 + return nil, errors.Join(processors.ErrSystem, err) + } else { + // 其他未知错误 + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/ivyz/ivyzsfel_processor.go b/internal/domains/api/services/processors/ivyz/ivyzsfel_processor.go new file mode 100644 index 0000000..c6d1307 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyzsfel_processor.go @@ -0,0 +1,52 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessIVYZSFELRequest IVYZSFEL 全国自然人人像三要素核验_V1API处理方法 +func ProcessIVYZSFELRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZSFELReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + // 构建请求数据,使用xingwei服务的正确字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "photo": paramsDto.PhotoData, + "authAuthorizeFileCode": paramsDto.AuthAuthorizeFileCode, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1068350101927161856" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + // 查空情况,返回特定的查空错误 + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + // 数据源错误 + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + // 系统错误 + return nil, errors.Join(processors.ErrSystem, err) + } else { + // 其他未知错误 + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/ivyz/ivyzzqt3_processor.go b/internal/domains/api/services/processors/ivyz/ivyzzqt3_processor.go new file mode 100644 index 0000000..00f50f1 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyzzqt3_processor.go @@ -0,0 +1,51 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessIVYZZQT3Request IVYZZQT3 人脸比对V3API处理方法 +func ProcessIVYZZQT3Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZZQT3Req + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + // 构建请求数据,使用xingwei服务的正确字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "image": paramsDto.PhotoData, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1104321430396268544" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + // 查空情况,返回特定的查空错误 + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + // 数据源错误 + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + // 系统错误 + return nil, errors.Join(processors.ErrSystem, err) + } else { + // 其他未知错误 + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +}