From 5f62261c116e0fae2a69e4df385e8b9933a32b70 Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Tue, 21 Apr 2026 16:23:35 +0800 Subject: [PATCH 1/3] f --- internal/domains/api/dto/api_request_dto.go | 6 ++ .../api/services/api_request_service.go | 3 + .../api/services/form_config_service.go | 2 + .../processors/ivyz/ivyzra36_processor.go | 56 +++++++++++++++++ .../processors/ivyz/ivyzrax1_processor.go | 61 +++++++++++++++++++ .../processors/ivyz/ivyzrax2_processor.go | 61 +++++++++++++++++++ 6 files changed, 189 insertions(+) create mode 100644 internal/domains/api/services/processors/ivyz/ivyzra36_processor.go create mode 100644 internal/domains/api/services/processors/ivyz/ivyzrax1_processor.go create mode 100644 internal/domains/api/services/processors/ivyz/ivyzrax2_processor.go diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index 1e5da63..c214f56 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -499,6 +499,12 @@ type IVYZ7F3AReq struct { Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } +type IVYZRAX1Req struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` + Authorized string `json:"authorized" validate:"required,oneof=0 1"` +} type IVYZ3P9MReq struct { 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 a158d94..16b9da9 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -330,6 +330,9 @@ func registerAllProcessors(combService *comb.CombService) { "IVYZ38SR": ivyz.ProcessIVYZ38SRRequest, //婚姻状态核验(双人) "IVYZ48SR": ivyz.ProcessIVYZ48SRRequest, //婚姻状态核验V2(双人) "IVYZ5E22": ivyz.ProcessIVYZ5E22Request, //双人婚姻评估查询zhicha版本 + "IVYZRAX1": ivyz.ProcessIVYZRAX1Request, //融安信用分 + "IVYZRAX2": ivyz.ProcessIVYZRAX2Request,//融御反欺诈分 + // 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 158f721..e8b39e8 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -276,6 +276,8 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string "IVYZ5E22": &dto.IVYZ5E22Req{}, //双人婚姻评估查询zhicha版本 "DWBG5SAM": &dto.DWBG5SAMReq{}, //天远指迷报告 "QYGLDJ33": &dto.QYGLDJ33Req{}, //企业年报信息核验 + "IVYZRAX1": &dto.IVYZRAX1Req{},//融安信用分 + "IVYZRAX2": &dto.IVYZRAX1Req{},//融御反欺诈 } // 优先返回已配置的DTO diff --git a/internal/domains/api/services/processors/ivyz/ivyzra36_processor.go b/internal/domains/api/services/processors/ivyz/ivyzra36_processor.go new file mode 100644 index 0000000..8453644 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyzra36_processor.go @@ -0,0 +1,56 @@ +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/zhicha" +) + +// ProcessIVYZ5E3FRequest IVYZ5E3F API处理方法 - 婚姻评估查询 +func ProcessIVYZ5E3FRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZ5E3FReq + 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) + } + + encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "name": encryptedName, + "idCard": encryptedIDCard, + "authorized": paramsDto.Authorized, + } + + respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI029", reqData) + if err != nil { + if errors.Is(err, zhicha.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + // 将响应数据转换为JSON字节 + respBytes, err := json.Marshal(respData) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/ivyz/ivyzrax1_processor.go b/internal/domains/api/services/processors/ivyz/ivyzrax1_processor.go new file mode 100644 index 0000000..a2122d0 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyzrax1_processor.go @@ -0,0 +1,61 @@ +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/zhicha" +) + +// ProcessIVYZRAX1Request IVYZRAX1 API处理方法 - 融安信用分 +func ProcessIVYZRAX1Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZRAX1Req + 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) + } + + encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + encryptedMoblie, err := deps.ZhichaService.Encrypt(paramsDto.MobileNo) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "name": encryptedName, + "idCard": encryptedIDCard, + "phone": encryptedMoblie, + "authorized": paramsDto.Authorized, + } + + respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI084", reqData) + if err != nil { + if errors.Is(err, zhicha.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + // 将响应数据转换为JSON字节 + respBytes, err := json.Marshal(respData) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/ivyz/ivyzrax2_processor.go b/internal/domains/api/services/processors/ivyz/ivyzrax2_processor.go new file mode 100644 index 0000000..1dbd31b --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyzrax2_processor.go @@ -0,0 +1,61 @@ +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/zhicha" +) + +// ProcessIVYZRAX2Request IVYZRAX2 API处理方法 - 融御反欺诈分 +func ProcessIVYZRAX2Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZRAX1Req + 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) + } + + encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + encryptedMoblie, err := deps.ZhichaService.Encrypt(paramsDto.MobileNo) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "name": encryptedName, + "idCard": encryptedIDCard, + "phone": encryptedMoblie, + "authorized": paramsDto.Authorized, + } + + respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI083", reqData) + if err != nil { + if errors.Is(err, zhicha.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + // 将响应数据转换为JSON字节 + respBytes, err := json.Marshal(respData) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} From dad8abad167d57c1ffcd47d0eca7a7c65d69d9aa Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Tue, 21 Apr 2026 16:24:57 +0800 Subject: [PATCH 2/3] f --- .../processors/ivyz/ivyzra36_processor.go | 56 ------------------- 1 file changed, 56 deletions(-) delete mode 100644 internal/domains/api/services/processors/ivyz/ivyzra36_processor.go diff --git a/internal/domains/api/services/processors/ivyz/ivyzra36_processor.go b/internal/domains/api/services/processors/ivyz/ivyzra36_processor.go deleted file mode 100644 index 8453644..0000000 --- a/internal/domains/api/services/processors/ivyz/ivyzra36_processor.go +++ /dev/null @@ -1,56 +0,0 @@ -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/zhicha" -) - -// ProcessIVYZ5E3FRequest IVYZ5E3F API处理方法 - 婚姻评估查询 -func ProcessIVYZ5E3FRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { - var paramsDto dto.IVYZ5E3FReq - 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) - } - - encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } - - encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } - - reqData := map[string]interface{}{ - "name": encryptedName, - "idCard": encryptedIDCard, - "authorized": paramsDto.Authorized, - } - - respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI029", reqData) - if err != nil { - if errors.Is(err, zhicha.ErrDatasource) { - return nil, errors.Join(processors.ErrDatasource, err) - } else { - return nil, errors.Join(processors.ErrSystem, err) - } - } - - // 将响应数据转换为JSON字节 - respBytes, err := json.Marshal(respData) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } - - return respBytes, nil -} From 31565393196b6c098183f9772cef89066295e9a5 Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Tue, 21 Apr 2026 17:03:03 +0800 Subject: [PATCH 3/3] f --- .../processors/ivyz/ivyzrax1_processor.go | 37 +++++++++++-------- .../processors/ivyz/ivyzrax2_processor.go | 37 +++++++++++-------- .../infrastructure/external/zhicha/crypto.go | 9 +++++ .../external/zhicha/zhicha_service.go | 6 +++ 4 files changed, 59 insertions(+), 30 deletions(-) diff --git a/internal/domains/api/services/processors/ivyz/ivyzrax1_processor.go b/internal/domains/api/services/processors/ivyz/ivyzrax1_processor.go index a2122d0..c028c10 100644 --- a/internal/domains/api/services/processors/ivyz/ivyzrax1_processor.go +++ b/internal/domains/api/services/processors/ivyz/ivyzrax1_processor.go @@ -21,25 +21,32 @@ func ProcessIVYZRAX1Request(ctx context.Context, params []byte, deps *processors return nil, errors.Join(processors.ErrInvalidParam, err) } - encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } + // encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) + // if err != nil { + // return nil, errors.Join(processors.ErrSystem, err) + // } - encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } - encryptedMoblie, err := deps.ZhichaService.Encrypt(paramsDto.MobileNo) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } + // encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) + // if err != nil { + // return nil, errors.Join(processors.ErrSystem, err) + // } + // encryptedMoblie, err := deps.ZhichaService.Encrypt(paramsDto.MobileNo) + // if err != nil { + // return nil, errors.Join(processors.ErrSystem, err) + // } + + md5Name := deps.ZhichaService.MD5(paramsDto.Name) + md5IDCard := deps.ZhichaService.MD5(paramsDto.IDCard) + md5Mobile := deps.ZhichaService.MD5(paramsDto.MobileNo) reqData := map[string]interface{}{ - "name": encryptedName, - "idCard": encryptedIDCard, - "phone": encryptedMoblie, + // "name": encryptedName, + // "idCard": encryptedIDCard, + // "phone": encryptedMoblie, "authorized": paramsDto.Authorized, + "name": md5Name, + "idCard": md5IDCard, + "phone": md5Mobile, } respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI084", reqData) diff --git a/internal/domains/api/services/processors/ivyz/ivyzrax2_processor.go b/internal/domains/api/services/processors/ivyz/ivyzrax2_processor.go index 1dbd31b..48cddae 100644 --- a/internal/domains/api/services/processors/ivyz/ivyzrax2_processor.go +++ b/internal/domains/api/services/processors/ivyz/ivyzrax2_processor.go @@ -21,25 +21,32 @@ func ProcessIVYZRAX2Request(ctx context.Context, params []byte, deps *processors return nil, errors.Join(processors.ErrInvalidParam, err) } - encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } + // encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) + // if err != nil { + // return nil, errors.Join(processors.ErrSystem, err) + // } - encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } - encryptedMoblie, err := deps.ZhichaService.Encrypt(paramsDto.MobileNo) - if err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } + // encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) + // if err != nil { + // return nil, errors.Join(processors.ErrSystem, err) + // } + // encryptedMoblie, err := deps.ZhichaService.Encrypt(paramsDto.MobileNo) + // if err != nil { + // return nil, errors.Join(processors.ErrSystem, err) + // } + + md5Name := deps.ZhichaService.MD5(paramsDto.Name) + md5IDCard := deps.ZhichaService.MD5(paramsDto.IDCard) + md5Mobile := deps.ZhichaService.MD5(paramsDto.MobileNo) reqData := map[string]interface{}{ - "name": encryptedName, - "idCard": encryptedIDCard, - "phone": encryptedMoblie, + // "name": encryptedName, + // "idCard": encryptedIDCard, + // "phone": encryptedMoblie, "authorized": paramsDto.Authorized, + "name": md5Name, + "idCard": md5IDCard, + "phone": md5Mobile, } respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI083", reqData) diff --git a/internal/infrastructure/external/zhicha/crypto.go b/internal/infrastructure/external/zhicha/crypto.go index 13bd170..28e9da9 100644 --- a/internal/infrastructure/external/zhicha/crypto.go +++ b/internal/infrastructure/external/zhicha/crypto.go @@ -4,9 +4,11 @@ import ( "bytes" "crypto/aes" "crypto/cipher" + "crypto/md5" "encoding/base64" "encoding/hex" "fmt" + "io" ) const ( @@ -119,3 +121,10 @@ func pkcs7Unpadding(src []byte) ([]byte, error) { return src[:length-unpadding], nil } + +// MD5 使用MD5加密数据,返回十六进制字符串 +func MD5(data string) string { + h := md5.New() + io.WriteString(h, data) + return hex.EncodeToString(h.Sum(nil)) +} diff --git a/internal/infrastructure/external/zhicha/zhicha_service.go b/internal/infrastructure/external/zhicha/zhicha_service.go index 5ce6045..a8bb200 100644 --- a/internal/infrastructure/external/zhicha/zhicha_service.go +++ b/internal/infrastructure/external/zhicha/zhicha_service.go @@ -315,6 +315,12 @@ func (z *ZhichaService) Decrypt(encryptedData string) (string, error) { return string(unpadded), nil } +// MD5 对字符串进行MD5加密并返回32位小写十六进制字符串 +func (z *ZhichaService) MD5(data string) string { + hash := md5.Sum([]byte(data)) + return hex.EncodeToString(hash[:]) +} + // pkcs7Padding 使用PKCS7填充数据 func (z *ZhichaService) pkcs7Padding(src []byte, blockSize int) []byte { padding := blockSize - len(src)%blockSize