From 5771fcfd311eff80578db39461415cef05cf0d34 Mon Sep 17 00:00:00 2001 From: Mrxs <18278715334@163.com> Date: Mon, 22 Jun 2026 21:14:36 +0800 Subject: [PATCH] add --- internal/domains/api/dto/api_request_dto.go | 13 +++++ .../api/services/api_request_service.go | 3 ++ .../api/services/form_config_service.go | 3 ++ .../processors/ivyz/jrzqx7j9_processor.go | 49 +++++++++++++++++++ .../processors/jrzq/jrzqfc59_processor.go | 48 ++++++++++++++++++ .../processors/jrzq/jrzqgj99_processor.go | 49 +++++++++++++++++++ .../external/nuoer/nuoer_service.go | 1 + 7 files changed, 166 insertions(+) create mode 100644 internal/domains/api/services/processors/ivyz/jrzqx7j9_processor.go create mode 100644 internal/domains/api/services/processors/jrzq/jrzqfc59_processor.go create mode 100644 internal/domains/api/services/processors/jrzq/jrzqgj99_processor.go diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index 7d89b5f..d06b0cb 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -178,6 +178,19 @@ type JRZQ7D1XReq struct { IDCard string `json:"id_card" validate:"required,validIDCard"` MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` } + +type JRZQGJ99Req struct { + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type JRZQFC59Req struct { + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type IVYZX7J9Req struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` +} type JRZQTH74Req struct { Name string `json:"name" validate:"required,min=1,validName"` IDCard string `json:"id_card" validate:"required,validIDCard"` diff --git a/internal/domains/api/services/api_request_service.go b/internal/domains/api/services/api_request_service.go index e565f7c..afd2fc2 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -191,6 +191,8 @@ func registerAllProcessors(combService *comb.CombService) { "JRZQML9G": jrzq.ProcessJRZQML9GRequest, //坤羽模型V3-标签版 "JRZQ7D1X": jrzq.ProcessJRZQ7D1XRequest, //借贷意向V2 "JRZQTH74": jrzq.ProcessJRZQTH74Request, //团伙欺诈 + "JRZQGJ99": jrzq.ProcessJRZQGJ99Request, //公积金核验 + "JRZQFC59": jrzq.ProcessJRZQFC59Request, //房产核验 // QYGL系列处理器 "QYGL7HBN": qygl.ProcessQYGL7HBNRequest, //企业全景报告(聚合 QYGLUY3S/QYGLJ0Q1/QYGL5S1I) @@ -238,6 +240,7 @@ func registerAllProcessors(combService *comb.CombService) { "IVYZOQFB": ivyz.ProcessIVYZOQFBRequest, //身份风险V106 "IVYZBI6F": ivyz.ProcessIVYZBI6FRequest, //消费能力 "IVYZ6W0U": ivyz.ProcessIVYZ6W0URequest, //收入等级 + "IVYZX7J9": ivyz.ProcessIVYZX7J9Request, //学籍核验 // COMB系列处理器 - 只注册有自定义逻辑的组合包 diff --git a/internal/domains/api/services/form_config_service.go b/internal/domains/api/services/form_config_service.go index f0714e7..3a6cc2c 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -307,6 +307,9 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string "YYSYS7Y1": &dto.YYSYS7Y1Req{}, //移动手机号易诉分 "JRZQ7D1X": &dto.JRZQ7D1XReq{}, //借贷意向V2 "JRZQTH74": &dto.JRZQTH74Req{}, //团伙欺诈 + "JRZQGJ99": &dto.JRZQGJ99Req{}, //公积金核验 + "JRZQFC59": &dto.JRZQFC59Req{}, //房产核验 + "IVYZX7J9": &dto.IVYZX7J9Req{}, //学籍核验 } // 优先返回已配置的DTO diff --git a/internal/domains/api/services/processors/ivyz/jrzqx7j9_processor.go b/internal/domains/api/services/processors/ivyz/jrzqx7j9_processor.go new file mode 100644 index 0000000..157b898 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/jrzqx7j9_processor.go @@ -0,0 +1,49 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + + "hyapi-server/internal/domains/api/dto" + "hyapi-server/internal/domains/api/services/processors" + "hyapi-server/internal/infrastructure/external/nuoer" +) + +// ProcessIVYZX7J9Request IVYZX7J9 API处理方法 - 学籍核验 +func ProcessIVYZX7J9Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZX7J9Req + 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) + } + + body := map[string]string{ + "name": paramsDto.Name, + "idCard": paramsDto.IDCard, + } + + nuoerDoCheckAPIKey := "idVerify125" + ApiPath := "/v1/doCheck" + + resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body) + if err != nil { + if errors.Is(err, nuoer.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, nuoer.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(resp.Data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzqfc59_processor.go b/internal/domains/api/services/processors/jrzq/jrzqfc59_processor.go new file mode 100644 index 0000000..8aa89ef --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzqfc59_processor.go @@ -0,0 +1,48 @@ +package jrzq + +import ( + "context" + "encoding/json" + "errors" + + "hyapi-server/internal/domains/api/dto" + "hyapi-server/internal/domains/api/services/processors" + "hyapi-server/internal/infrastructure/external/nuoer" +) + +// ProcessJRZQFC59Request JRZQFC59 API处理方法 - 房产核验 +func ProcessJRZQFC59Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQFC59Req + 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) + } + + body := map[string]string{ + "mobileNo": paramsDto.MobileNo, + } + + nuoerDoCheckAPIKey := "idVerify126" + ApiPath := "/v1/doCheck" + + resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body) + if err != nil { + if errors.Is(err, nuoer.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, nuoer.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(resp.Data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzqgj99_processor.go b/internal/domains/api/services/processors/jrzq/jrzqgj99_processor.go new file mode 100644 index 0000000..cb9b06b --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzqgj99_processor.go @@ -0,0 +1,49 @@ +package jrzq + +import ( + "context" + "encoding/json" + "errors" + + "hyapi-server/internal/domains/api/dto" + "hyapi-server/internal/domains/api/services/processors" + "hyapi-server/internal/infrastructure/external/nuoer" +) + +// ProcessJRZQGJ99Request JRZQGJ99 API处理方法 - 公积金核验 +func ProcessJRZQGJ99Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQGJ99Req + 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) + } + + body := map[string]string{ + "mobileNo": paramsDto.MobileNo, + } + + nuoerDoCheckAPIKey := "idVerify127" + ApiPath := "/v1/doCheck" + + // 该产品仅支持 MD5 入参(encryptionType=2) + resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body, 2) + if err != nil { + if errors.Is(err, nuoer.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, nuoer.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(resp.Data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/infrastructure/external/nuoer/nuoer_service.go b/internal/infrastructure/external/nuoer/nuoer_service.go index fd7c03d..5d4f991 100644 --- a/internal/infrastructure/external/nuoer/nuoer_service.go +++ b/internal/infrastructure/external/nuoer/nuoer_service.go @@ -31,6 +31,7 @@ var queryBillingAPIKeys = map[string]struct{}{ "loanRiskTagV8": {}, // 风险变量V8 loanRiskTagV8 "loanRiskTagV9": {}, // 风险变量V9 loanRiskTagV9 "loanRiskTagV10": {}, // 风险变量V10 loanRiskTagV10 + "idVerify125": {}, // 学籍核验 idVerify125 } func isQueryBillingAPIKey(apiKey string) bool {