f
This commit is contained in:
@@ -7,7 +7,7 @@ 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/jiguang"
|
"tyapi-server/internal/infrastructure/external/zhicha"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProcessIVYZ5E3FRequest IVYZ5E3F API处理方法 - 婚姻评估查询
|
// ProcessIVYZ5E3FRequest IVYZ5E3F API处理方法 - 婚姻评估查询
|
||||||
@@ -21,57 +21,36 @@ func ProcessIVYZ5E3FRequest(ctx context.Context, params []byte, deps *processors
|
|||||||
return nil, errors.Join(processors.ErrInvalidParam, err)
|
return nil, errors.Join(processors.ErrInvalidParam, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建极光请求参数(使用原始身份证和姓名)
|
encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name)
|
||||||
reqData := map[string]interface{}{
|
if err != nil {
|
||||||
// 与 IVYZ9H2M 一致,极光使用 id_no 作为身份证字段
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
"id_card": paramsDto.IDCard,
|
|
||||||
"name": paramsDto.Name,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调用极光婚姻查询接口
|
encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard)
|
||||||
// apiCode: marriage-single(用于请求头)
|
|
||||||
// apiPath: marriage/single(用于URL路径)
|
|
||||||
respBytes, err := deps.JiguangService.CallAPI(ctx, "marriage-single", "marriage/single", reqData)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 根据错误类型返回相应的错误
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
if errors.Is(err, jiguang.ErrNotFound) {
|
}
|
||||||
return nil, errors.Join(processors.ErrNotFound, err)
|
|
||||||
} else if errors.Is(err, jiguang.ErrDatasource) {
|
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)
|
return nil, errors.Join(processors.ErrDatasource, err)
|
||||||
} else {
|
} else {
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析极光返回的数据
|
// 将响应数据转换为JSON字节
|
||||||
// 现在的婚姻状态编码为(state):
|
respBytes, err := json.Marshal(respData)
|
||||||
// 0-结婚 1-离婚 2-未匹配(均为字符串)
|
if err != nil {
|
||||||
var jgResp struct {
|
|
||||||
State string `json:"state"`
|
|
||||||
}
|
|
||||||
if err := json.Unmarshal(respBytes, &jgResp); err != nil {
|
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将极光的编码转换为旧的 state 定义:
|
return respBytes, nil
|
||||||
// 1:已婚,2:未婚/未在民政局登记,3:离异
|
|
||||||
var state string
|
|
||||||
switch jgResp.State {
|
|
||||||
case "0": // 结婚
|
|
||||||
state = "1"
|
|
||||||
case "1": // 离婚
|
|
||||||
state = "3"
|
|
||||||
case "2": // 未匹配
|
|
||||||
state = "2"
|
|
||||||
default:
|
|
||||||
// 未知状态按未匹配处理
|
|
||||||
state = "2"
|
|
||||||
}
|
|
||||||
|
|
||||||
// 返回与之前一致的结构:{"state": "1/2/3"}
|
|
||||||
result := map[string]string{
|
|
||||||
"state": state,
|
|
||||||
}
|
|
||||||
|
|
||||||
return json.Marshal(result)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ 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/jiguang"
|
"tyapi-server/internal/infrastructure/external/zhicha"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProcessIVYZ81NCRequest IVYZ81NC API处理方法
|
// ProcessIVYZ81NCRequest IVYZ81NC API处理方法
|
||||||
@@ -21,55 +21,49 @@ func ProcessIVYZ81NCRequest(ctx context.Context, params []byte, deps *processors
|
|||||||
return nil, errors.Join(processors.ErrInvalidParam, err)
|
return nil, errors.Join(processors.ErrInvalidParam, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建极光请求参数(使用原始身份证和姓名)
|
encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name)
|
||||||
reqData := map[string]interface{}{
|
if err != nil {
|
||||||
// 与 IVYZ9H2M 一致,极光使用 id_no 作为身份证字段
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
"id_card": paramsDto.IDCard,
|
|
||||||
"name": paramsDto.Name,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调用极光婚姻查询接口
|
encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard)
|
||||||
// apiCode: marriage-single(用于请求头)
|
|
||||||
// apiPath: marriage/single(用于URL路径)
|
|
||||||
respBytes, err := deps.JiguangService.CallAPI(ctx, "marriage-single", "marriage/single", reqData)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 根据错误类型返回相应的错误
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
if errors.Is(err, jiguang.ErrNotFound) {
|
}
|
||||||
return nil, errors.Join(processors.ErrNotFound, err)
|
|
||||||
} else if errors.Is(err, jiguang.ErrDatasource) {
|
reqData := map[string]interface{}{
|
||||||
|
"name": encryptedName,
|
||||||
|
"idCard": encryptedIDCard,
|
||||||
|
"authorized": "1", // 默认值
|
||||||
|
}
|
||||||
|
|
||||||
|
respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI029", reqData)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, zhicha.ErrDatasource) {
|
||||||
return nil, errors.Join(processors.ErrDatasource, err)
|
return nil, errors.Join(processors.ErrDatasource, err)
|
||||||
} else {
|
} else {
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析极光返回的数据,期望格式为 {"state": "0"|"1"|"2"}
|
// 解析响应数据,期望格式为 {"state": "1"}
|
||||||
var jgResp struct {
|
var stateResp struct {
|
||||||
State string `json:"state"`
|
State string `json:"state"`
|
||||||
}
|
}
|
||||||
if err := json.Unmarshal(respBytes, &jgResp); err != nil {
|
|
||||||
|
// 将 respData 转换为 JSON 字节再解析
|
||||||
|
respDataBytes, err := json.Marshal(respData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.Unmarshal(respDataBytes, &stateResp); err != nil {
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将极光的 state 编码转换为旧的 state 语义:
|
// 根据 state 值转换为 81nc 格式
|
||||||
// 极光:0-结婚 1-离婚 2-未匹配
|
|
||||||
// 旧定义:1:已婚,2:未婚/未在民政局登记,3:离异
|
|
||||||
var oldState string
|
|
||||||
switch jgResp.State {
|
|
||||||
case "0": // 结婚
|
|
||||||
oldState = "1"
|
|
||||||
case "1": // 离婚
|
|
||||||
oldState = "3"
|
|
||||||
case "2": // 未匹配
|
|
||||||
oldState = "2"
|
|
||||||
default:
|
|
||||||
// 未知状态按未匹配处理
|
|
||||||
oldState = "2"
|
|
||||||
}
|
|
||||||
|
|
||||||
// 根据旧的 state 值转换为 81nc 格式
|
|
||||||
var opType, opTypeDesc string
|
var opType, opTypeDesc string
|
||||||
switch oldState {
|
switch stateResp.State {
|
||||||
case "1": // 已婚
|
case "1": // 已婚
|
||||||
opType = "IA"
|
opType = "IA"
|
||||||
opTypeDesc = "结婚"
|
opTypeDesc = "结婚"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ 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/jiguang"
|
"tyapi-server/internal/infrastructure/external/westdex"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProcessIVYZ9363Request IVYZ9363 API处理方法
|
// ProcessIVYZ9363Request IVYZ9363 API处理方法
|
||||||
@@ -17,6 +17,7 @@ func ProcessIVYZ9363Request(ctx context.Context, params []byte, deps *processors
|
|||||||
if err := json.Unmarshal(params, ¶msDto); err != nil {
|
if err := json.Unmarshal(params, ¶msDto); err != nil {
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
|
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
|
||||||
return nil, errors.Join(processors.ErrInvalidParam, err)
|
return nil, errors.Join(processors.ErrInvalidParam, err)
|
||||||
}
|
}
|
||||||
@@ -25,72 +26,43 @@ func ProcessIVYZ9363Request(ctx context.Context, params []byte, deps *processors
|
|||||||
return nil, errors.Join(processors.ErrInvalidParam, errors.New("请正确填写身份信息"))
|
return nil, errors.Join(processors.ErrInvalidParam, errors.New("请正确填写身份信息"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建极光双人婚姻查询请求参数
|
encryptedManName, err := deps.WestDexService.Encrypt(paramsDto.ManName)
|
||||||
// 极光入参:id_card_m / name_m / id_card_w / name_w / authCode
|
if err != nil {
|
||||||
reqData := map[string]interface{}{
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
"id_card_m": paramsDto.ManIDCard,
|
|
||||||
"name_m": paramsDto.ManName,
|
|
||||||
"id_card_w": paramsDto.WomanIDCard,
|
|
||||||
"name_w": paramsDto.WomanName,
|
|
||||||
"authCode": deps.CallContext.ContractCode,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调用极光双人婚姻查询接口
|
encryptedManIDCard, err := deps.WestDexService.Encrypt(paramsDto.ManIDCard)
|
||||||
// apiCode: marriage-double-v2(用于请求头)
|
|
||||||
// apiPath: marriage/double-v2(用于URL路径)
|
|
||||||
respBytes, err := deps.JiguangService.CallAPI(ctx, "marriage-double-v2", "marriage/double-v2", reqData)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 根据错误类型返回相应的错误
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
if errors.Is(err, jiguang.ErrNotFound) {
|
}
|
||||||
return nil, errors.Join(processors.ErrNotFound, err)
|
|
||||||
} else if errors.Is(err, jiguang.ErrDatasource) {
|
encryptedWomanName, err := deps.WestDexService.Encrypt(paramsDto.WomanName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
encryptedWomanIDCard, err := deps.WestDexService.Encrypt(paramsDto.WomanIDCard)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
reqData := map[string]interface{}{
|
||||||
|
"data": map[string]interface{}{
|
||||||
|
"name_man": encryptedManName,
|
||||||
|
"idcard_man": encryptedManIDCard,
|
||||||
|
"name_woman": encryptedWomanName,
|
||||||
|
"idcard_woman": encryptedWomanIDCard,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
respBytes, err := deps.WestDexService.CallAPI(ctx, "G10XM02", reqData)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, westdex.ErrDatasource) {
|
||||||
return nil, errors.Join(processors.ErrDatasource, err)
|
return nil, errors.Join(processors.ErrDatasource, err)
|
||||||
} else {
|
} else {
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析极光返回的数据,示例:"result": "0"
|
return respBytes, nil
|
||||||
// 0 结婚 1 离婚 2 未匹配(均为字符串)
|
|
||||||
var jgResp struct {
|
|
||||||
Result string `json:"result"`
|
|
||||||
}
|
|
||||||
if err := json.Unmarshal(respBytes, &jgResp); err != nil {
|
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 将极光 result 映射为 81NC 业务类型
|
|
||||||
// 0: 结婚 -> IA / 结婚
|
|
||||||
// 1: 离婚 -> IB / 离婚
|
|
||||||
// 2: 未匹配 -> INR / 匹配不成功
|
|
||||||
var opType, opTypeDesc string
|
|
||||||
switch jgResp.Result {
|
|
||||||
case "0":
|
|
||||||
opType = "IA"
|
|
||||||
opTypeDesc = "结婚"
|
|
||||||
case "1":
|
|
||||||
opType = "IB"
|
|
||||||
opTypeDesc = "离婚"
|
|
||||||
case "2":
|
|
||||||
opType = "INR"
|
|
||||||
opTypeDesc = "匹配不成功"
|
|
||||||
default:
|
|
||||||
// 未知状态按未匹配处理
|
|
||||||
opType = "INR"
|
|
||||||
opTypeDesc = "匹配不成功"
|
|
||||||
}
|
|
||||||
|
|
||||||
// 构建当前接口对外约定的返回结构
|
|
||||||
result := map[string]interface{}{
|
|
||||||
"msg": "操作成功",
|
|
||||||
"code": 200,
|
|
||||||
"data": map[string]interface{}{
|
|
||||||
"op_date": "", // 极光未提供日期,这里保持空串
|
|
||||||
"op_type": opType, // IA / IB / INR
|
|
||||||
"op_type_desc": opTypeDesc, // 结婚 / 离婚 / 匹配不成功
|
|
||||||
},
|
|
||||||
"success": true,
|
|
||||||
}
|
|
||||||
|
|
||||||
return json.Marshal(result)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ func (j *JiguangService) CallAPI(ctx context.Context, apiCode string, apiPath st
|
|||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
j.logger.LogInfo(fmt.Sprintf("极光响应: %+v", jiguangResp))
|
|
||||||
// 记录响应日志(不记录具体响应数据)
|
// 记录响应日志(不记录具体响应数据)
|
||||||
if j.logger != nil {
|
if j.logger != nil {
|
||||||
if jiguangResp.OrderID != "" {
|
if jiguangResp.OrderID != "" {
|
||||||
|
|||||||
Reference in New Issue
Block a user