f
This commit is contained in:
@@ -1033,6 +1033,7 @@ func (s *ProductApplicationServiceImpl) getDTOMap() map[string]interface{} {
|
|||||||
"YYSY09CD": &dto.YYSY09CDReq{},
|
"YYSY09CD": &dto.YYSY09CDReq{},
|
||||||
"IVYZ0B03": &dto.IVYZ0B03Req{},
|
"IVYZ0B03": &dto.IVYZ0B03Req{},
|
||||||
"YYSYBE08": &dto.YYSYBE08Req{},
|
"YYSYBE08": &dto.YYSYBE08Req{},
|
||||||
|
"YYSYBE08TEST": &dto.YYSYBE08Req{},
|
||||||
"YYSYD50F": &dto.YYSYD50FReq{},
|
"YYSYD50F": &dto.YYSYD50FReq{},
|
||||||
"YYSYF7DB": &dto.YYSYF7DBReq{},
|
"YYSYF7DB": &dto.YYSYF7DBReq{},
|
||||||
"IVYZ9A2B": &dto.IVYZ9A2BReq{},
|
"IVYZ9A2B": &dto.IVYZ9A2BReq{},
|
||||||
|
|||||||
@@ -248,6 +248,7 @@ func registerAllProcessors(combService *comb.CombService) {
|
|||||||
"YYSY4B37": yysy.ProcessYYSY4B37Request,
|
"YYSY4B37": yysy.ProcessYYSY4B37Request,
|
||||||
"YYSY6F2E": yysy.ProcessYYSY6F2ERequest,
|
"YYSY6F2E": yysy.ProcessYYSY6F2ERequest,
|
||||||
"YYSYBE08": yysy.ProcessYYSYBE08Request,
|
"YYSYBE08": yysy.ProcessYYSYBE08Request,
|
||||||
|
"YYSYBE08TEST": yysy.ProcessYYSYBE08testRequest, // 二要素(阿里云市场),与 YYSYBE08 入参一致
|
||||||
"YYSYF7DB": yysy.ProcessYYSYF7DBRequest,
|
"YYSYF7DB": yysy.ProcessYYSYF7DBRequest,
|
||||||
"YYSY4F2E": yysy.ProcessYYSY4F2ERequest,
|
"YYSY4F2E": yysy.ProcessYYSY4F2ERequest,
|
||||||
"YYSY8B1C": yysy.ProcessYYSY8B1CRequest,
|
"YYSY8B1C": yysy.ProcessYYSY8B1CRequest,
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string
|
|||||||
"YYSY09CD": &dto.YYSY09CDReq{},
|
"YYSY09CD": &dto.YYSY09CDReq{},
|
||||||
"IVYZ0B03": &dto.IVYZ0B03Req{},
|
"IVYZ0B03": &dto.IVYZ0B03Req{},
|
||||||
"YYSYBE08": &dto.YYSYBE08Req{},
|
"YYSYBE08": &dto.YYSYBE08Req{},
|
||||||
|
"YYSYBE08TEST": &dto.YYSYBE08Req{},
|
||||||
"YYSYD50F": &dto.YYSYD50FReq{},
|
"YYSYD50F": &dto.YYSYD50FReq{},
|
||||||
"YYSYF7DB": &dto.YYSYF7DBReq{},
|
"YYSYF7DB": &dto.YYSYF7DBReq{},
|
||||||
"IVYZ9A2B": &dto.IVYZ9A2BReq{},
|
"IVYZ9A2B": &dto.IVYZ9A2BReq{},
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import (
|
|||||||
|
|
||||||
"tyapi-server/internal/domains/api/dto"
|
"tyapi-server/internal/domains/api/dto"
|
||||||
"tyapi-server/internal/domains/api/services/processors"
|
"tyapi-server/internal/domains/api/services/processors"
|
||||||
|
"tyapi-server/internal/infrastructure/external/alicloud"
|
||||||
|
"tyapi-server/internal/infrastructure/external/shumai"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProcessYYSYBE08Request YYSYBE08 API处理方法 - 使用数脉二要素验证
|
// ProcessYYSYBE08Request YYSYBE08 API处理方法 - 使用数脉二要素验证
|
||||||
@@ -33,24 +35,19 @@ func ProcessYYSYBE08Request(ctx context.Context, params []byte, deps *processors
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
// 使用实时接口(app_id 和 app_secret)重试
|
// 使用实时接口(app_id 和 app_secret)重试
|
||||||
respBytes, err = deps.ShumaiService.CallAPIForm(ctx, apiPath, reqFormData, false)
|
respBytes, err = deps.ShumaiService.CallAPIForm(ctx, apiPath, reqFormData, false)
|
||||||
// 如果重试后仍然失败,处理错误响应 - 转换为目标格式
|
// 重试仍失败:阿里云身份证二要素兜底,返回原始 body;兜底仍失败则按阿里云错误类型返回(与 YYSY3M8S 对数脉的分流一致)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errorMsg := err.Error()
|
rawBytes, aerr := callAliyunIDCardCheckRaw(ctx, deps, paramsDto.Name, paramsDto.IDCard)
|
||||||
if errorMsg == "" {
|
if aerr != nil {
|
||||||
errorMsg = "请求失败"
|
if errors.Is(aerr, alicloud.ErrDatasource) {
|
||||||
|
return nil, errors.Join(processors.ErrDatasource, aerr)
|
||||||
}
|
}
|
||||||
errorResponse := map[string]interface{}{
|
if errors.Is(aerr, alicloud.ErrSystem) {
|
||||||
"ctidRequest": map[string]interface{}{
|
return nil, errors.Join(processors.ErrSystem, aerr)
|
||||||
"ctidAuth": map[string]interface{}{
|
|
||||||
"idCard": paramsDto.IDCard,
|
|
||||||
"name": paramsDto.Name,
|
|
||||||
"resultCode": "5XXX",
|
|
||||||
"resultMsg": "数据源请求异常无记录",
|
|
||||||
"verifyResult": "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
return json.Marshal(errorResponse)
|
return nil, errors.Join(processors.ErrSystem, aerr)
|
||||||
|
}
|
||||||
|
return rawBytes, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,158 +0,0 @@
|
|||||||
package yysy
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestYYSYBE08ResponseStructure(t *testing.T) {
|
|
||||||
// 测试响应结构构建逻辑
|
|
||||||
resultCode := "1001"
|
|
||||||
resultMsg := "验证通过"
|
|
||||||
verifyResult := "一致"
|
|
||||||
|
|
||||||
// 模拟阿里云返回result=0(一致)的情况
|
|
||||||
alicloudResult := 0
|
|
||||||
if alicloudResult == 0 {
|
|
||||||
// 验证成功
|
|
||||||
resultCode = "1001"
|
|
||||||
resultMsg = "验证通过"
|
|
||||||
verifyResult = "一致"
|
|
||||||
} else {
|
|
||||||
// 验证失败
|
|
||||||
resultCode = "1002"
|
|
||||||
resultMsg = "身份证号不匹配"
|
|
||||||
verifyResult = "不一致"
|
|
||||||
}
|
|
||||||
|
|
||||||
// 构建响应结构
|
|
||||||
response := map[string]interface{}{
|
|
||||||
"ctidRequest": map[string]interface{}{
|
|
||||||
"ctidAuth": map[string]interface{}{
|
|
||||||
"resultCode": resultCode,
|
|
||||||
"resultMsg": resultMsg,
|
|
||||||
"name": "张荣宏",
|
|
||||||
"idCard": "45212220000827423X",
|
|
||||||
"verifyResult": verifyResult,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// 序列化为JSON
|
|
||||||
jsonData, err := json.Marshal(response)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("JSON序列化失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证JSON结构
|
|
||||||
var parsedResponse map[string]interface{}
|
|
||||||
if err := json.Unmarshal(jsonData, &parsedResponse); err != nil {
|
|
||||||
t.Fatalf("JSON反序列化失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证字段存在
|
|
||||||
ctidRequest, exists := parsedResponse["ctidRequest"]
|
|
||||||
if !exists {
|
|
||||||
t.Fatal("响应中缺少ctidRequest字段")
|
|
||||||
}
|
|
||||||
|
|
||||||
ctidAuth, exists := ctidRequest.(map[string]interface{})["ctidAuth"]
|
|
||||||
if !exists {
|
|
||||||
t.Fatal("响应中缺少ctidAuth字段")
|
|
||||||
}
|
|
||||||
|
|
||||||
authData := ctidAuth.(map[string]interface{})
|
|
||||||
|
|
||||||
// 验证字段值
|
|
||||||
expectedFields := map[string]string{
|
|
||||||
"resultCode": "1001",
|
|
||||||
"resultMsg": "验证通过",
|
|
||||||
"name": "张荣宏",
|
|
||||||
"idCard": "45212220000827423X",
|
|
||||||
"verifyResult": "一致",
|
|
||||||
}
|
|
||||||
|
|
||||||
for field, expectedValue := range expectedFields {
|
|
||||||
if authData[field] != expectedValue {
|
|
||||||
t.Errorf("字段%s期望值为%s,实际为%s", field, expectedValue, authData[field])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Logf("测试成功,响应结构: %s", string(jsonData))
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestYYSYBE08ResponseStructure_Failure(t *testing.T) {
|
|
||||||
// 测试验证失败的情况
|
|
||||||
resultCode := "1002"
|
|
||||||
resultMsg := "身份证号不匹配"
|
|
||||||
verifyResult := "不一致"
|
|
||||||
|
|
||||||
// 模拟阿里云返回result=1(不一致)的情况
|
|
||||||
alicloudResult := 1
|
|
||||||
if alicloudResult == 0 {
|
|
||||||
// 验证成功
|
|
||||||
resultCode = "1001"
|
|
||||||
resultMsg = "验证通过"
|
|
||||||
verifyResult = "一致"
|
|
||||||
} else {
|
|
||||||
// 验证失败
|
|
||||||
resultCode = "1002"
|
|
||||||
resultMsg = "身份证号不匹配"
|
|
||||||
verifyResult = "不一致"
|
|
||||||
}
|
|
||||||
|
|
||||||
// 构建响应结构
|
|
||||||
response := map[string]interface{}{
|
|
||||||
"ctidRequest": map[string]interface{}{
|
|
||||||
"ctidAuth": map[string]interface{}{
|
|
||||||
"resultCode": resultCode,
|
|
||||||
"resultMsg": resultMsg,
|
|
||||||
"name": "张三",
|
|
||||||
"idCard": "110101199001011235",
|
|
||||||
"verifyResult": verifyResult,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// 序列化为JSON
|
|
||||||
jsonData, err := json.Marshal(response)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("JSON序列化失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证JSON结构
|
|
||||||
var parsedResponse map[string]interface{}
|
|
||||||
if err := json.Unmarshal(jsonData, &parsedResponse); err != nil {
|
|
||||||
t.Fatalf("JSON反序列化失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证字段存在
|
|
||||||
ctidRequest, exists := parsedResponse["ctidRequest"]
|
|
||||||
if !exists {
|
|
||||||
t.Fatal("响应中缺少ctidRequest字段")
|
|
||||||
}
|
|
||||||
|
|
||||||
ctidAuth, exists := ctidRequest.(map[string]interface{})["ctidAuth"]
|
|
||||||
if !exists {
|
|
||||||
t.Fatal("响应中缺少ctidAuth字段")
|
|
||||||
}
|
|
||||||
|
|
||||||
authData := ctidAuth.(map[string]interface{})
|
|
||||||
|
|
||||||
// 验证字段值
|
|
||||||
expectedFields := map[string]string{
|
|
||||||
"resultCode": "1002",
|
|
||||||
"resultMsg": "身份证号不匹配",
|
|
||||||
"name": "张三",
|
|
||||||
"idCard": "110101199001011235",
|
|
||||||
"verifyResult": "不一致",
|
|
||||||
}
|
|
||||||
|
|
||||||
for field, expectedValue := range expectedFields {
|
|
||||||
if authData[field] != expectedValue {
|
|
||||||
t.Errorf("字段%s期望值为%s,实际为%s", field, expectedValue, authData[field])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Logf("测试成功,失败响应结构: %s", string(jsonData))
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package yysy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"tyapi-server/internal/domains/api/dto"
|
||||||
|
"tyapi-server/internal/domains/api/services/processors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProcessYYSYBE08testRequest 与 YYSYBE08 相同入参,底层使用阿里云市场身份证二要素校验;响应为阿里云接口原始 body(不做字段映射)
|
||||||
|
func ProcessYYSYBE08testRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) {
|
||||||
|
var paramsDto dto.YYSYBE08Req
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
return callAliyunIDCardCheckRaw(ctx, deps, paramsDto.Name, paramsDto.IDCard)
|
||||||
|
}
|
||||||
|
|
||||||
|
// callAliyunIDCardCheckRaw POST api-mall/api/id_card/check(form: name、idcard),返回响应体原文,供 YYSYBE08TEST 与 YYSYBE08 数脉失败兜底共用
|
||||||
|
func callAliyunIDCardCheckRaw(ctx context.Context, deps *processors.ProcessorDependencies, name, idCard string) ([]byte, error) {
|
||||||
|
_ = ctx
|
||||||
|
reqData := map[string]interface{}{
|
||||||
|
"name": name,
|
||||||
|
"idcard": idCard,
|
||||||
|
}
|
||||||
|
return deps.AlicloudService.CallAPI("api-mall/api/id_card/check", reqData)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user