diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index 223d80e..10ece55 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -133,6 +133,10 @@ type YYSYK9R4Req struct { Name string `json:"name" validate:"required,min=1,validName"` } +type YYSY35TAReq struct { + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + type QCXG9F5CReq struct { PlateNo string `json:"plate_no" validate:"required"` } diff --git a/internal/domains/api/services/api_request_service.go b/internal/domains/api/services/api_request_service.go index 557c343..17e314c 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -182,6 +182,7 @@ func registerAllProcessors(combService *comb.CombService) { "QYGL5S1I": qygl.ProcessQYGL5S1IRequest, //企业司法涉诉I "QYGLJ0Q1": qygl.ProcessQYGLJ0Q1Request, //企业股权结构全景查询 "QYGLUY3S": qygl.ProcessQYGLUY3SRequest, //企业经营状态全景查询 + "YYSY35TA": yysy.ProcessYYSY35TARequest, //运营商归属地数卖 // YYSY系列处理器 "YYSYD50F": yysy.ProcessYYSYD50FRequest, diff --git a/internal/domains/api/services/form_config_service.go b/internal/domains/api/services/form_config_service.go index b62f6a5..10f6996 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -261,6 +261,7 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string "QYGLUY3S": &dto.QYGLUY3SReq{}, //企业全量信息核验V2 可用 "JRZQOCRE": &dto.JRZQOCREReq{}, //银行卡OCR数卖 "JRZQOCRY": &dto.JRZQOCRYReq{}, //银行卡OCR数据宝 + "YYSY35TA": &dto.YYSY35TAReq{}, //运营商归属地数卖 } // 优先返回已配置的DTO diff --git a/internal/domains/api/services/processors/yysy/yysy35ta_processor.go b/internal/domains/api/services/processors/yysy/yysy35ta_processor.go new file mode 100644 index 0000000..f65d235 --- /dev/null +++ b/internal/domains/api/services/processors/yysy/yysy35ta_processor.go @@ -0,0 +1,48 @@ +package yysy + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/shumai" +) + +// ProcessYYSY35TARequest YYSY35TA API 运营商归属地数卖处理方法数脉 +func ProcessYYSY35TARequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.YYSY35TAReq + 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) + } + + reqFormData := map[string]interface{}{ + "mobile": paramsDto.MobileNo, + } + + // 以表单方式调用数脉 API;参数在 CallAPIForm 内转为 application/x-www-form-urlencoded + apiPath := "/v4/phone/number" // 接口路径,根据数脉文档填写(如 v4/xxx) + respBytes, err := deps.ShumaiService.CallAPIForm(ctx, apiPath, reqFormData) + if err != nil { + 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) + } else { + // 其他未知错误 + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +}