This commit is contained in:
2026-06-22 21:14:36 +08:00
parent c2ccdb0226
commit 5771fcfd31
7 changed files with 166 additions and 0 deletions

View File

@@ -178,6 +178,19 @@ type JRZQ7D1XReq struct {
IDCard string `json:"id_card" validate:"required,validIDCard"` IDCard string `json:"id_card" validate:"required,validIDCard"`
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` 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 { type JRZQTH74Req struct {
Name string `json:"name" validate:"required,min=1,validName"` Name string `json:"name" validate:"required,min=1,validName"`
IDCard string `json:"id_card" validate:"required,validIDCard"` IDCard string `json:"id_card" validate:"required,validIDCard"`

View File

@@ -191,6 +191,8 @@ func registerAllProcessors(combService *comb.CombService) {
"JRZQML9G": jrzq.ProcessJRZQML9GRequest, //坤羽模型V3-标签版 "JRZQML9G": jrzq.ProcessJRZQML9GRequest, //坤羽模型V3-标签版
"JRZQ7D1X": jrzq.ProcessJRZQ7D1XRequest, //借贷意向V2 "JRZQ7D1X": jrzq.ProcessJRZQ7D1XRequest, //借贷意向V2
"JRZQTH74": jrzq.ProcessJRZQTH74Request, //团伙欺诈 "JRZQTH74": jrzq.ProcessJRZQTH74Request, //团伙欺诈
"JRZQGJ99": jrzq.ProcessJRZQGJ99Request, //公积金核验
"JRZQFC59": jrzq.ProcessJRZQFC59Request, //房产核验
// QYGL系列处理器 // QYGL系列处理器
"QYGL7HBN": qygl.ProcessQYGL7HBNRequest, //企业全景报告(聚合 QYGLUY3S/QYGLJ0Q1/QYGL5S1I "QYGL7HBN": qygl.ProcessQYGL7HBNRequest, //企业全景报告(聚合 QYGLUY3S/QYGLJ0Q1/QYGL5S1I
@@ -238,6 +240,7 @@ func registerAllProcessors(combService *comb.CombService) {
"IVYZOQFB": ivyz.ProcessIVYZOQFBRequest, //身份风险V106 "IVYZOQFB": ivyz.ProcessIVYZOQFBRequest, //身份风险V106
"IVYZBI6F": ivyz.ProcessIVYZBI6FRequest, //消费能力 "IVYZBI6F": ivyz.ProcessIVYZBI6FRequest, //消费能力
"IVYZ6W0U": ivyz.ProcessIVYZ6W0URequest, //收入等级 "IVYZ6W0U": ivyz.ProcessIVYZ6W0URequest, //收入等级
"IVYZX7J9": ivyz.ProcessIVYZX7J9Request, //学籍核验
// COMB系列处理器 - 只注册有自定义逻辑的组合包 // COMB系列处理器 - 只注册有自定义逻辑的组合包

View File

@@ -307,6 +307,9 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string
"YYSYS7Y1": &dto.YYSYS7Y1Req{}, //移动手机号易诉分 "YYSYS7Y1": &dto.YYSYS7Y1Req{}, //移动手机号易诉分
"JRZQ7D1X": &dto.JRZQ7D1XReq{}, //借贷意向V2 "JRZQ7D1X": &dto.JRZQ7D1XReq{}, //借贷意向V2
"JRZQTH74": &dto.JRZQTH74Req{}, //团伙欺诈 "JRZQTH74": &dto.JRZQTH74Req{}, //团伙欺诈
"JRZQGJ99": &dto.JRZQGJ99Req{}, //公积金核验
"JRZQFC59": &dto.JRZQFC59Req{}, //房产核验
"IVYZX7J9": &dto.IVYZX7J9Req{}, //学籍核验
} }
// 优先返回已配置的DTO // 优先返回已配置的DTO

View File

@@ -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, &paramsDto); 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
}

View File

@@ -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, &paramsDto); 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
}

View File

@@ -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, &paramsDto); 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
}

View File

@@ -31,6 +31,7 @@ var queryBillingAPIKeys = map[string]struct{}{
"loanRiskTagV8": {}, // 风险变量V8 loanRiskTagV8 "loanRiskTagV8": {}, // 风险变量V8 loanRiskTagV8
"loanRiskTagV9": {}, // 风险变量V9 loanRiskTagV9 "loanRiskTagV9": {}, // 风险变量V9 loanRiskTagV9
"loanRiskTagV10": {}, // 风险变量V10 loanRiskTagV10 "loanRiskTagV10": {}, // 风险变量V10 loanRiskTagV10
"idVerify125": {}, // 学籍核验 idVerify125
} }
func isQueryBillingAPIKey(apiKey string) bool { func isQueryBillingAPIKey(apiKey string) bool {