Compare commits

..

10 Commits

Author SHA1 Message Date
ff976e19fc f 2026-01-17 23:54:41 +08:00
9e99f91ee6 f 2026-01-17 18:58:47 +08:00
3b98574a5c fix 2025-12-24 19:46:16 +08:00
281540928b change yaml: Tianyuanapi 2025-11-13 22:41:07 +08:00
13068fe49a fix 2025-11-10 15:04:40 +08:00
800d21bace fix 2025-11-10 14:45:30 +08:00
8c9bb0a368 add IVYZ3P9M 2025-11-10 14:14:02 +08:00
2a3c5cbb89 fix 2025-11-02 13:41:23 +08:00
b18f20dbe0 fix 2025-10-23 21:24:46 +08:00
408ce1a22c fix 2025-10-23 21:23:56 +08:00
5 changed files with 195 additions and 94 deletions

View File

@@ -73,8 +73,8 @@ CleanTask:
Time: "0 3 * * *" Time: "0 3 * * *"
Days: 15 Days: 15
Tianyuanapi: Tianyuanapi:
AccessID: "2974d99ddf0b91a7" AccessID: "7f8a9b2c4d5e6f1a"
Key: "c701a573200f64d4ab38b0aa03ae56d2" Key: "9e4f8a1b3c6d7e2f5a8b9c0d1e4f7a2b"
BaseURL: "https://api.tianyuanapi.com" BaseURL: "https://api.tianyuanapi.com"
Timeout: 60 Timeout: 60
VerifyConfig: VerifyConfig:

View File

@@ -52,10 +52,17 @@ func (l *QueryDetailByOrderIdLogic) QueryDetailByOrderId(req *types.QueryDetailB
} }
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "报告查询, 查找报告错误: %+v", err) return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "报告查询, 查找报告错误: %+v", err)
} }
user, err := l.svcCtx.UserModel.FindOne(l.ctx, userId)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "报告查询, 查找用户错误: %+v", err)
}
// 安全验证:确保订单属于当前用户 // 安全验证:确保订单属于当前用户
// 如果用户是内部用户(Inside==1),无需校验订单归属
if user.Inside != 1 {
if order.UserId != userId { if order.UserId != userId {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.LOGIC_QUERY_NOT_FOUND), "无权查看此订单报告") return nil, errors.Wrapf(xerr.NewErrCode(xerr.LOGIC_QUERY_NOT_FOUND), "无权查看此订单报告")
} }
}
// 创建渐进式延迟策略实例 // 创建渐进式延迟策略实例
progressiveDelayOrder, err := delay.New(200*time.Millisecond, 3*time.Second, 10*time.Second, 1.5) progressiveDelayOrder, err := delay.New(200*time.Millisecond, 3*time.Second, 10*time.Second, 1.5)
if err != nil { if err != nil {

View File

@@ -268,6 +268,7 @@ var productProcessors = map[string]func(*QueryServiceLogic, *types.QueryServiceR
"toc_DebtRepayStress": (*QueryServiceLogic).ProcessTocDebtRepayStressLogic, // 偿贷压力 "toc_DebtRepayStress": (*QueryServiceLogic).ProcessTocDebtRepayStressLogic, // 偿贷压力
"toc_EducationInfo": (*QueryServiceLogic).ProcessTocEducationInfoLogic, // 学历信息查询 "toc_EducationInfo": (*QueryServiceLogic).ProcessTocEducationInfoLogic, // 学历信息查询
"toc_PersonEnterprisePro": (*QueryServiceLogic).ProcessTocPersonEnterpriseProLogic, // 企业法人 "toc_PersonEnterprisePro": (*QueryServiceLogic).ProcessTocPersonEnterpriseProLogic, // 企业法人
"toc_EducationInfoName": (*QueryServiceLogic).ProcessTocEducationInfoNameLogic, // 学历信息查询(学校名称版)
} }
func (l *QueryServiceLogic) PreprocessLogic(req *types.QueryServiceReq, product string) (*types.QueryServiceResp, error) { func (l *QueryServiceLogic) PreprocessLogic(req *types.QueryServiceReq, product string) (*types.QueryServiceResp, error) {
@@ -2094,6 +2095,46 @@ func (l *QueryServiceLogic) ProcessTocEducationInfoLogic(req *types.QueryService
return &types.QueryServiceResp{Id: cacheNo}, nil return &types.QueryServiceResp{Id: cacheNo}, nil
} }
// ProcessTocEducationInfoNameLogic 学历信息查询
func (l *QueryServiceLogic) ProcessTocEducationInfoNameLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) {
userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx)
if getUidErr != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr)
}
// AES解密
decryptData, DecryptDataErr := l.DecryptData(req.Data)
if DecryptDataErr != nil {
return nil, DecryptDataErr
}
// 校验参数
var data types.TocEducationInfo
if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr)
}
if validatorErr := validator.Validate(data); validatorErr != nil {
return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr)
}
// 验证二要素
if verifyErr := l.VerifyTwoFactors(data.Name, data.IDCard); verifyErr != nil {
return nil, verifyErr
}
params := map[string]interface{}{
"name": data.Name,
"id_card": data.IDCard,
}
cacheNo, cacheDataErr := l.CacheData(params, "toc_EducationInfoName", userID)
if cacheDataErr != nil {
return nil, cacheDataErr
}
return &types.QueryServiceResp{Id: cacheNo}, nil
}
// ProcessTocPersonEnterpriseProLogic 人企关系加强版 // ProcessTocPersonEnterpriseProLogic 人企关系加强版
func (l *QueryServiceLogic) ProcessTocPersonEnterpriseProLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { func (l *QueryServiceLogic) ProcessTocPersonEnterpriseProLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) {
userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx)

View File

@@ -255,6 +255,8 @@ var requestProcessors = map[string]func(*ApiRequestService, context.Context, []b
"IVYZ6G7H": (*ApiRequestService).ProcessIVYZ6G7HRequest, // 单人婚姻状态(补证版) "IVYZ6G7H": (*ApiRequestService).ProcessIVYZ6G7HRequest, // 单人婚姻状态(补证版)
"IVYZ3A7F": (*ApiRequestService).ProcessIVYZ3A7FRequest, // 学历信息查询(学校名称版) "IVYZ3A7F": (*ApiRequestService).ProcessIVYZ3A7FRequest, // 学历信息查询(学校名称版)
"YYSY7D3E": (*ApiRequestService).ProcessYYSY7D3ERequest, // 携号转网查询 "YYSY7D3E": (*ApiRequestService).ProcessYYSY7D3ERequest, // 携号转网查询
"IVYZ3P9M": (*ApiRequestService).ProcessIVYZ3P9MRequest, // 公安个人不良加强版
"IVYZ81NC": (*ApiRequestService).ProcessIVYZ81NCRequest, // 婚姻登记时间
} }
// PreprocessRequestApi 调用指定的请求处理函数 // PreprocessRequestApi 调用指定的请求处理函数
@@ -2545,6 +2547,7 @@ func (a *ApiRequestService) ProcessFLXGDEA9Request(ctx context.Context, params [
request := map[string]interface{}{ request := map[string]interface{}{
"name": name.String(), "name": name.String(),
"id_card": idCard.String(), "id_card": idCard.String(),
"authorized": "1",
} }
resp, err := a.tianyuanapiService.CallInterface("FLXGDEA9", request) resp, err := a.tianyuanapiService.CallInterface("FLXGDEA9", request)
if err != nil { if err != nil {
@@ -2649,3 +2652,53 @@ func (a *ApiRequestService) ProcessFLXG0687Request(params []byte) (*APIInternalR
Data: jsonResult, Data: jsonResult,
}, nil }, nil
} }
// ProcessIVYZ3P9MRequest 学历实时查询
func (a *ApiRequestService) ProcessIVYZ3P9MRequest(ctx context.Context, params []byte) (*APIInternalResult, error) {
idCard := gjson.GetBytes(params, "id_card")
name := gjson.GetBytes(params, "name")
if !idCard.Exists() || !name.Exists() {
return nil, errors.New("api请求, IVYZ3P9M, 获取相关参数失败")
}
resp, err := a.tianyuanapiService.CallInterface("IVYZ3P9M", map[string]interface{}{
"id_card": idCard.String(),
"name": name.String(),
})
if err != nil {
return nil, err
}
jsonResult, err := json.Marshal(resp.Data)
if err != nil {
return nil, fmt.Errorf("处理学历实时查询结果失败: %v", err)
}
return &APIInternalResult{
Data: jsonResult,
}, nil
}
// ProcessIVYZ81NCRequest 婚姻登记时间
func (a *ApiRequestService) ProcessIVYZ81NCRequest(ctx context.Context, params []byte) (*APIInternalResult, error) {
idCard := gjson.GetBytes(params, "id_card")
name := gjson.GetBytes(params, "name")
if !idCard.Exists() || !name.Exists() {
return nil, errors.New("api请求, IVYZ81NC, 获取相关参数失败")
}
resp, err := a.tianyuanapiService.CallInterface("IVYZ81NC", map[string]interface{}{
"id_card": idCard.String(),
"name": name.String(),
})
if err != nil {
return nil, err
}
jsonResult, err := json.Marshal(resp.Data)
if err != nil {
return nil, fmt.Errorf("处理婚姻登记时间查询结果失败: %v", err)
}
return &APIInternalResult{
Data: jsonResult,
}, nil
}

View File

@@ -95,7 +95,7 @@ type Response struct {
Message string `json:"message"` Message string `json:"message"`
Success bool `json:"success"` Success bool `json:"success"`
TransactionID string `json:"transaction_id"` // 流水号 TransactionID string `json:"transaction_id"` // 流水号
Data map[string]interface{} `json:"data"` // 解密后的数据 Data interface{} `json:"data"` // 解密后的数据(支持对象或数组)
Timeout int64 `json:"timeout"` // 请求耗时(毫秒) Timeout int64 `json:"timeout"` // 请求耗时(毫秒)
Error string `json:"error,omitempty"` Error string `json:"error,omitempty"`
} }
@@ -243,9 +243,9 @@ func (c *Client) Call(req Request) (*Response, error) {
if apiResp.Data != "" { if apiResp.Data != "" {
decryptedData, err := c.decrypt(apiResp.Data) decryptedData, err := c.decrypt(apiResp.Data)
if err == nil { if err == nil {
var decryptedMap map[string]interface{} var decrypted interface{}
if json.Unmarshal([]byte(decryptedData), &decryptedMap) == nil { if json.Unmarshal([]byte(decryptedData), &decrypted) == nil {
response.Data = decryptedMap response.Data = decrypted
} }
} }
} }