fix comb298y

This commit is contained in:
liangzai 2025-06-14 14:54:36 +08:00
parent 191f6799a0
commit d7763927ac
5 changed files with 67 additions and 63 deletions

View File

@ -145,6 +145,14 @@ func (l *COMB298YLogic) COMB298Y(req *types.Request) (resp string, err *errs.App
return "", errs.ErrSystem
}
apiRequests[i].Request = common.MapStructToAPIRequest(dataMap, apiRequests[i].Mapping, apiRequests[i].Wrap)
// 如果是 RIS031添加 type: 3
if apiRequests[i].SourceId == "RIS031" {
if apiRequests[i].Request == nil {
apiRequests[i].Request = make(map[string]interface{})
}
apiRequests[i].Request["type"] = 3
}
}
logx.Infof("sourceId:%s,请求参数:%v", apiRequests[i].SourceId, apiRequests[i].Request)
}

View File

@ -3,11 +3,14 @@ package IVYZ
import (
"context"
"encoding/hex"
"errors"
"tianyuan-api/apps/api/internal/service"
"encoding/json"
"fmt"
"strings"
"tianyuan-api/apps/api/internal/common"
"tianyuan-api/apps/api/internal/svc"
"tianyuan-api/apps/api/internal/types"
"tianyuan-api/apps/api/internal/validator"
"tianyuan-api/apps/api/internal/westmodel"
"tianyuan-api/pkg/crypto"
"tianyuan-api/pkg/errs"
@ -49,6 +52,7 @@ func (l *IVYZ5733Logic) IVYZ5733(req *types.Request) (resp string, err *errs.App
if !productCodeOk || productCode == "" {
return "", errs.ErrSystem
}
defer func() {
if err != nil {
status = "failed"
@ -79,68 +83,60 @@ func (l *IVYZ5733Logic) IVYZ5733(req *types.Request) (resp string, err *errs.App
}
// 3、西部加密
// westConfig := l.svcCtx.Config.WestConfig
// encryptedFields, encryptStructFieldsErr := common.EncryptStructFields(data, westConfig.Key)
// if encryptStructFieldsErr != nil {
// logx.Errorf("西部加密错误:%v", encryptStructFieldsErr)
// return "", errs.ErrSystem
// }
westConfig := l.svcCtx.Config.WestConfig
encryptedFields, encryptStructFieldsErr := common.EncryptStructFields(data, westConfig.Key)
if encryptStructFieldsErr != nil {
logx.Errorf("西部加密错误:%v", encryptStructFieldsErr)
return "", errs.ErrSystem
}
// 4、发送请求到西部
logx.Infof("交易号:%s", transactionID)
// apiRequest := common.MapStructToAPIRequest(encryptedFields, westmodel.IVYZ5733FieldMapping, "data")
apiRequest := common.MapStructToAPIRequest(encryptedFields, westmodel.IVYZ5733FieldMapping, "data")
// westResp, callAPIErr := l.svcCtx.WestDexService.CallAPI("G09SC02", apiRequest, l.svcCtx.Config.WestConfig.SecretId)
// if callAPIErr != nil {
// if callAPIErr.Code == errs.ErrDataSource.Code {
// encryptData, aesEncrypt := crypto.AesEncrypt(westResp, key)
// if aesEncrypt != nil {
// return "", errs.ErrSystem
// }
// return encryptData, callAPIErr
// }
// return "", callAPIErr
// }
apiRequest := map[string]interface{}{
"cardNo": data.IDCard,
"name": data.Name,
}
respData, callAPIErr := l.svcCtx.YushanService.Request("IDV044", apiRequest)
westResp, callAPIErr := l.svcCtx.WestDexService.CallAPI("G34BJ03", apiRequest, l.svcCtx.Config.WestConfig.SecretId)
if callAPIErr != nil {
if errors.Is(callAPIErr, service.NotFound) {
return "", errs.ErrNotFound
if callAPIErr.Code == errs.ErrDataSource.Code {
return "", callAPIErr
}
return "", errs.ErrSystem
return "", callAPIErr
}
// 使用gjson判断respData是否有status字段
statusField := gjson.GetBytes(respData, "status")
if !statusField.Exists() {
logx.Errorf("羽山返回数据中缺少status字段: %s", string(respData))
return "", errs.ErrNotFound
}
encryptData, aesEncrypt := crypto.AesEncrypt(respData, key)
encryptData, aesEncrypt := crypto.AesEncrypt(westResp, key)
if aesEncrypt != nil {
return "", errs.ErrSystem
}
// 解析加密后的数据
// var response map[string]interface{}
// unmarshalErr := json.Unmarshal([]byte(encryptData), &response)
// if unmarshalErr != nil {
// return "", errs.ErrSystem
// }
// // 判断是否包含 "data" 字段
// responseData, dataOk := response["data"].([]interface{})
// if !dataOk || len(responseData) == 0 {
// return "", errs.ErrSystem
// }
// 判断 "data" 中是否包含 "maritalStatus"
// maritalStatus := response.(map[string]interface{})["maritalStatus"]
// if maritalStatus == nil {
// return "", errs.ErrSystem
// }
return encryptData, nil
}
func handleResponse(resp []byte) ([]byte, error) {
result := gjson.GetBytes(resp, "data.data")
if !result.Exists() {
return nil, fmt.Errorf("婚姻状态查询失败")
}
// 获取原始结果
rawResult := result.String()
// 根据结果转换状态码
var statusCode string
switch {
case strings.HasPrefix(rawResult, "INR"):
statusCode = "0" // 匹配不成功
case strings.HasPrefix(rawResult, "IA"):
statusCode = "1" // 结婚
case strings.HasPrefix(rawResult, "IB"):
statusCode = "2" // 离婚
default:
return nil, fmt.Errorf("婚姻状态查询失败,未知状态码: %s", statusCode)
}
// 构建新的返回结果
response := map[string]string{
"status": statusCode,
}
// 序列化为JSON
jsonResponse, err := json.Marshal(response)
if err != nil {
return nil, fmt.Errorf("序列化结果失败: %v", err)
}
return jsonResponse, nil
}

View File

@ -104,7 +104,7 @@ func (w *WestDexService) CallAPI(code string, reqData map[string]interface{}, se
logx.Infof("西部流水号: %s", westDexResp.ID)
if westDexResp.Code != "00000" && westDexResp.Code != "200" {
if westDexResp.Code != "00000" && westDexResp.Code != "200" && westDexResp.Code != "0" {
if westDexResp.Data == "" {
logx.Errorf("【西部数据请求】业务失败时响应数据为空: %s %s", westDexResp.Message, westDexResp.Reason)
return nil, errs.ErrSystem

View File

@ -167,4 +167,5 @@ type COMB298YRequest struct {
IDCard string `json:"id_card" validate:"required,validIDCard"`
Name string `json:"name" validate:"required,min=1,validName"`
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"`
AuthDate string `json:"auth_date" validate:"required,validAuthDate" encrypt:"false"`
}

View File

@ -43,17 +43,16 @@ var FLXGC9D1FieldMapping = map[string]string{
"MobileNo": "cell",
}
var FLXGCA3DFieldMapping = map[string]string{
"IDCard": "id_card",
"Name": "name",
"IDCard": "id_card",
"Name": "name",
"AuthDate": "inquired_auth",
}
var FLXGDEC7FieldMapping = map[string]string{
"IDCard": "id_card",
"Name": "name",
}
var FLXG8UI0FieldMapping = map[string]string{
"IDCard": "id",
"Name": "name",
"MobileNo": "cell",
"IDCard": "keyWord",
}
var IVYZ385EFieldMapping = map[string]string{
"IDCard": "gmsfzhm",
@ -61,8 +60,8 @@ var IVYZ385EFieldMapping = map[string]string{
}
var IVYZ5733FieldMapping = map[string]string{
"IDCard": "certNumMan",
"Name": "nameMan",
"IDCard": "idCard",
"Name": "name",
}
var IVYZ9363FieldMapping = map[string]string{
"ManName": "nameMan",