qnc-server-old/service/verify.go
2024-12-25 11:59:33 +08:00

179 lines
4.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
log.Printf("【羽山接口响应返回】 %s error %s", prodID, err.Error())
//解密
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
}