qnc-server-old/service/verify.go

179 lines
4.9 KiB
Go
Raw Normal View History

2024-09-14 10:48:09 +08:00
package service
import (
"encoding/base64"
"encoding/hex"
"encoding/json"
"errors"
"log"
"qnc-server/config"
"qnc-server/db"
"qnc-server/model/model"
"qnc-server/utils"
"time"
)
type VerifyService struct {
}
func (c *VerifyService) VerifReqYuShan(prodID string, data *map[string]interface{}) (plainText []byte, err error) {
currentTime := time.Now()
unixMilliseconds := currentTime.UnixNano() / int64(time.Millisecond)
requestSN, _ := utils.GenerateRandomString()
apiKey := config.ConfigData.YuShan.ApiKey
acctId := config.ConfigData.YuShan.AcctId
httpUrl := config.ConfigData.YuShan.HttpUrl
// 根据 ProdID 动态构建请求数据
reqData := map[string]interface{}{
"prod_id": prodID,
"req_time": unixMilliseconds,
"request_sn": requestSN,
"req_data": data,
}
messageBytes, err := json.Marshal(reqData)
if err != nil {
return
}
key, err := hex.DecodeString(apiKey)
if err != nil {
return
}
//加密
cipherText := utils.AES_CBC_Encrypt(messageBytes, key)
content := base64.StdEncoding.EncodeToString(cipherText)
respStr, err := httpDo(httpUrl, content, acctId)
if err != nil {
return
}
2024-12-25 11:59:33 +08:00
log.Printf("【羽山接口响应返回】 %s error %s", prodID, err.Error())
2024-09-14 10:48:09 +08:00
//解密
sDec, err := base64.StdEncoding.DecodeString(respStr)
if err != nil {
if utils.IsJSON(respStr) {
return []byte(respStr), nil
}
return
}
plainText = utils.AES_CBC_Decrypt(sDec, key)
return
}
// 对返回信息进行处理,返回一份完整的报告
func (c *VerifyService) VerifyDataAnalysis(respString string) (data model.YuShanResponse[map[string]interface{}], err error) {
err = json.Unmarshal([]byte(respString), &data)
if err != nil {
log.Printf("VerifInsurance Unmarshal error%v", err)
return data, utils.ErrUnmashal
}
if data.Retcode == RetCodeSuccess {
return data, nil
} else if data.Retcode == RetCodeEmpty {
log.Printf("Verif resp empty%s", data.Retmsg)
return data, utils.ErrNoRecord
} else {
log.Printf("Verif resp error%s", data.Retmsg)
return data, utils.ErrSystemError
}
}
func (c *VerifyService) VerifyCertDataAnalysis(respString string) (data model.YuShanResponse[[]map[string]interface{}], err error) {
err = json.Unmarshal([]byte(respString), &data)
if err != nil {
log.Printf("VerifInsurance Unmarshal error%v", err)
return data, utils.ErrUnmashal
}
if data.Retcode == RetCodeSuccess {
return data, nil
} else if data.Retcode == RetCodeEmpty {
log.Printf("Verif resp empty%s", data.Retmsg)
return data, utils.ErrNoRecord
} else {
log.Printf("Verif resp error%s", data.Retmsg)
return data, utils.ErrSystemError
}
}
func (c *VerifyService) GetRecordByFeature(feature string, id uint, userID uint) (interface{}, error) {
var result interface{}
switch feature {
case "shoujiheyan":
var record model.VerifyPhoneName
if err := db.DB.Where("order_id = ? AND userid = ?", id, userID).First(&record).Error; err != nil {
return nil, err
}
result = record.Resp
case "shenfenzhengheyan":
var record model.VerifyCardName
if err := db.DB.Where("order_id = ? AND userid = ?", id, userID).First(&record).Error; err != nil {
return nil, err
}
result = record.Resp
case "yinhangkaheimingdan":
var record model.VerifyBankCard
if err := db.DB.Where("order_id = ? AND userid = ?", id, userID).First(&record).Error; err != nil {
return nil, err
}
analysis, err := c.VerifyDataAnalysis(record.Resp)
if err != nil {
return nil, err
}
result = analysis.Retdata
case "jinengzigezhengshu":
var record model.VerifySkillCert
if err := db.DB.Where("order_id = ? AND userid = ?", id, userID).First(&record).Error; err != nil {
return nil, err
}
analysis, err := c.VerifyCertDataAnalysis(record.Resp)
if err != nil {
return nil, err
}
result = analysis.Retdata
default:
return nil, errors.New("Invalid feature")
}
return result, nil
}
func (c *VerifyService) GetRecordCaseByFeature(feature string) (interface{}, error) {
var result interface{}
switch feature {
case "shoujiheyan":
var record model.VerifyPhoneName
if err := db.DB.Where("id = ?", 1).First(&record).Error; err != nil {
return nil, err
}
result = record.Resp
case "shenfenzhengheyan":
var record model.VerifyCardName
if err := db.DB.Where("id = ?", 1).First(&record).Error; err != nil {
return nil, err
}
result = record.Resp
case "yinhangkaheimingdan":
var record model.VerifyBankCard
if err := db.DB.Where("id = ?", 1).First(&record).Error; err != nil {
return nil, err
}
analysis, err := c.VerifyDataAnalysis(record.Resp)
if err != nil {
return nil, err
}
result = analysis.Retdata
case "jinengzigezhengshu":
var record model.VerifySkillCert
if err := db.DB.Where("id = ?", 1).First(&record).Error; err != nil {
return nil, err
}
analysis, err := c.VerifyCertDataAnalysis(record.Resp)
if err != nil {
return nil, err
}
result = analysis.Retdata
default:
return nil, errors.New("Invalid feature")
}
return result, nil
}