diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index 0b12994..21f431f 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -149,6 +149,19 @@ type YYSYTJC4Req struct { MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` } +type YYSYT7C4Req struct { + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} +type QCXG1S2LReq struct { + VinCode string `json:"vin_code" validate:"required"` +} +type YYSYXF7JReq struct { + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} +type QCXGA8V3Req struct { + VinCode string `json:"vin_code" validate:"required"` +} + type YYSYP72DReq struct { MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` } diff --git a/internal/domains/api/services/api_request_service.go b/internal/domains/api/services/api_request_service.go index 9d480a2..36b6d29 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -312,6 +312,8 @@ func registerAllProcessors(combService *comb.CombService) { "YYSYF2T7": yysy.ProcessYYSYF2T7Request, //手机二次放号检测查询 "YYSYTJC4": yysy.ProcessYYSYTJC4Request, //运营商近三个月欠费次数脉 "YYSYP72D": yysy.ProcessYYSYP72DRequest, //运营商近三个月平均账单 + "YYSYT7C4": yysy.ProcessYYSYT7C4Request, //手机停机验证 + "YYSYXF7J": yysy.ProcessYYSYXF7JRequest, //手机消费区间验证 // IVYZ系列处理器 "IVYZ0B03": ivyz.ProcessIVYZ0B03Request, @@ -402,6 +404,8 @@ func registerAllProcessors(combService *comb.CombService) { "QCXG3M7Z": qcxg.ProcessQCXG3M7ZRequest, //人车关系核验(ETC)10093 月更 "QCXGM4CL": qcxg.ProcessQCXGM4CLRequest, //名下车辆诺尔 "QYGLVR76": qygl.ProcessQYGLVR76Request, //名下企业诺尔 + "QCXG1S2L": qcxg.ProcessQCXG1S2LRequest, //车辆车五项信息核验V2 + "QCXGA8V3": qcxg.ProcessQCXGA8V3Request, //全国车辆配置查验(车五项+使用性质+承保) // DWBG系列处理器 - 多维报告 "DWBG6A2C": dwbg.ProcessDWBG6A2CRequest, "DWBG8B4D": dwbg.ProcessDWBG8B4DRequest, diff --git a/internal/domains/api/services/form_config_service.go b/internal/domains/api/services/form_config_service.go index 767deea..8610273 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -302,6 +302,10 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string "DWBG3BF9": &dto.DWBG3BF9Req{}, // 个人风险档案max "DWBG9FB3": &dto.DWBG9FB3Req{}, // 个人风险档案1 "DWBG9FB2": &dto.DWBG9FB2Req{}, // 个人风险档案2 + "YYSYT7C4": &dto.YYSYT7C4Req{}, //手机停机验证 + "YYSYXF7J": &dto.YYSYXF7JReq{}, //手机消费区间验证 + "QCXG1S2L": &dto.QCXG1S2LReq{}, //车辆车五项信息核验V2 + "QCXGA8V3": &dto.QCXGA8V3Req{}, //全国车辆配置查验(车五项+使用性质+承保) } diff --git a/internal/domains/api/services/processors/qcxg/qcxg1s2l_processor.go b/internal/domains/api/services/processors/qcxg/qcxg1s2l_processor.go new file mode 100644 index 0000000..5299059 --- /dev/null +++ b/internal/domains/api/services/processors/qcxg/qcxg1s2l_processor.go @@ -0,0 +1,48 @@ +package qcxg + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/shujubao" +) + +// ProcessQCXG1S2LRequest QCXG1S2L 车辆车五项信息核验V2 API 处理方法(使用数据宝服务示例) +func ProcessQCXG1S2LRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.QCXG1S2LReq + 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) + } + + // 构建数据宝入参:姓名、身份证、手机号、银行卡号(sign 外的业务参数可按需 AES 加密后作为 bodyData) + reqParams := map[string]interface{}{ + "key": "7cddec187d11f66eb2d30d5fd1430fa3", + "vinList": paramsDto.VinCode, + } + + // 最终请求 URL = https://api.chinadatapay.com/communication + 拼接接口地址值,如 personal/197 + apiPath := "/communication/personal/10480" + data, err := deps.ShujubaoService.CallAPI(ctx, apiPath, reqParams) + if err != nil { + if errors.Is(err, shujubao.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, shujubao.ErrQueryEmpty) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/qcxg/qcxga8v3_processor.go b/internal/domains/api/services/processors/qcxg/qcxga8v3_processor.go new file mode 100644 index 0000000..152aa42 --- /dev/null +++ b/internal/domains/api/services/processors/qcxg/qcxga8v3_processor.go @@ -0,0 +1,48 @@ +package qcxg + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/shujubao" +) + +// ProcessQCXGA8V3Request QCXGA8V3 全国车辆配置查验(车五项+使用性质+承保) API 处理方法(使用数据宝服务示例) +func ProcessQCXGA8V3Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.QCXGA8V3Req + 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) + } + + // 构建数据宝入参:姓名、身份证、手机号、银行卡号(sign 外的业务参数可按需 AES 加密后作为 bodyData) + reqParams := map[string]interface{}{ + "key": "df456d08f3cd3420e2806a6d0181c454", + "vinList": paramsDto.VinCode, + } + + // 最终请求 URL = https://api.chinadatapay.com/communication + 拼接接口地址值,如 personal/197 + apiPath := "/communication/government/traffic/10533" + data, err := deps.ShujubaoService.CallAPI(ctx, apiPath, reqParams) + if err != nil { + if errors.Is(err, shujubao.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, shujubao.ErrQueryEmpty) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/yysy/yysyt7c4_processor.go b/internal/domains/api/services/processors/yysy/yysyt7c4_processor.go new file mode 100644 index 0000000..758b671 --- /dev/null +++ b/internal/domains/api/services/processors/yysy/yysyt7c4_processor.go @@ -0,0 +1,47 @@ +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/shujubao" +) + +// ProcessYYSYT7C4Request YYSYT7C4 手机停机验证 61f5156213891a575923fb053a9e6a5d +func ProcessYYSYT7C4Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.YYSYT7C4Req + 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) + } + + reqParams := map[string]interface{}{ + "key": "61f5156213891a575923fb053a9e6a5d", + "mobile": paramsDto.MobileNo, + } + + // 最终请求 URL = https://api.chinadatapay.com/communication + 拼接接口地址值,如 personal/197 + apiPath := "/communication/message/10530" + data, err := deps.ShujubaoService.CallAPI(ctx, apiPath, reqParams) + if err != nil { + if errors.Is(err, shujubao.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, shujubao.ErrQueryEmpty) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/yysy/yysyxf7j_processor.go b/internal/domains/api/services/processors/yysy/yysyxf7j_processor.go new file mode 100644 index 0000000..69d0d55 --- /dev/null +++ b/internal/domains/api/services/processors/yysy/yysyxf7j_processor.go @@ -0,0 +1,47 @@ +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/shujubao" +) + +// ProcessYYSYXF7JRequest YYSYXF7J 手机消费区间验证(使用数据宝服务示例) +func ProcessYYSYXF7JRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.YYSYXF7JReq + 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) + } + + reqParams := map[string]interface{}{ + "key": "d0bf6876a91e0fe1443543d62d835041", + "mobile": paramsDto.MobileNo, + } + + // 最终请求 URL = https://api.chinadatapay.com/communication + 拼接接口地址值,如 personal/197 + apiPath := "/communication/consumption/9869 " + data, err := deps.ShujubaoService.CallAPI(ctx, apiPath, reqParams) + if err != nil { + if errors.Is(err, shujubao.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, shujubao.ErrQueryEmpty) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + return respBytes, nil +}