package tencentcloud import ( "encoding/json" "errors" "fmt" "mtp2_if/db" "mtp2_if/logger" "mtp2_if/models" "mtp2_if/utils" reqModels "mtp2_if/services/asign" faceid "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/faceid/v20180301" ) type BankCard4Rsp struct { Code string `json:"code"` // 结果码 '0': '认证通过'; 非'0'表示认证失败 Description string `json:"description"` // 业务结果描述。 } func BankCard4EVerification(req reqModels.BankCard4Req) (rsp BankCard4Rsp, err error) { if utils.TencenCloudFaceIdClient == nil { err = fmt.Errorf("腾讯云FaceId客户端未初始化") logger.GetLogger().Errorf("CreateConsoleLoginUrl failed: %s", err.Error()) return } // 校验入参 if req.Type == 1 && req.Person == nil { err = errors.New("缺少参数") return } if req.Type == 2 && req.Company == nil { err = errors.New("缺少参数") return } // 从交易库中获取类型为实名认证的电子签信息 var authinfo []byte var record models.Useresignrecord var has bool has, err = db.GetEngine().Where("TEMPLATETYPE = 1 AND USERID = ?", req.UserId).Get(&record) if err != nil { return } if !has { err = errors.New("无对应实名认证记录信息") logger.GetLogger().Error("无对应实名认证记录信息, userId:", req.UserId) return } if record.RECORDSTATUS == 3 { // 原信息已实名,则判断两次提交的内容是否一致,如不一致则重新实名 if record.AUTHINFO == "" { err = errors.New("实名认证记录信息异常") logger.GetLogger().Error("实名认证记录信息异常, userId:", req.UserId) return } if req.Type == 1 { // 个人 var oriAuthInfo reqModels.PersonBankCard4 err = json.Unmarshal([]byte(record.AUTHINFO), &oriAuthInfo) if err != nil { return } if oriAuthInfo.RealName == req.Person.RealName && oriAuthInfo.IdCardNo == req.Person.IdCardNo && oriAuthInfo.BankCard == req.Person.BankCard && oriAuthInfo.Mobile == req.Person.Mobile { // 信息一致,则直接返回已实名 err = errors.New("账户已实名") logger.GetLogger().Error("账户已实名, userId:", req.UserId) return } else { // 信息不一致,重新进行实名认证 if authinfo, err = json.Marshal(req.Person); err != nil { return } sql := fmt.Sprintf(` UPDATE useresignrecord SET RECORDSTATUS = 1, UPDATETIME = SYSDATE, AUTHINFO = '%v' WHERE USERID = %v AND TEMPLATETYPE = 1 `, string(authinfo), req.UserId) _, err = db.GetEngine().Exec(sql) if err != nil { return } } } else { // 企业 var oriAuthInfo reqModels.CompanyBankCard4 err = json.Unmarshal([]byte(record.AUTHINFO), &oriAuthInfo) if err != nil { return } if oriAuthInfo.CompanyName == req.Company.CompanyName && oriAuthInfo.CreditCode == req.Company.CreditCode && oriAuthInfo.RealName == req.Company.RealName && oriAuthInfo.IdCardNo == req.Company.IdCardNo && oriAuthInfo.BankCard == req.Company.BankCard && oriAuthInfo.Mobile == req.Company.Mobile { // 信息一致,则直接返回已实名 err = errors.New("账户已实名") logger.GetLogger().Error("账户已实名, userId:", req.UserId) return } else { // 信息不一致,重新进行实名认证 if authinfo, err = json.Marshal(req.Company); err != nil { return } sql := fmt.Sprintf(` UPDATE useresignrecord SET RECORDSTATUS = 1, UPDATETIME = SYSDATE, AUTHINFO = '%v' WHERE USERID = %v AND TEMPLATETYPE = 1 `, string(authinfo), req.UserId) _, err = db.GetEngine().Exec(sql) if err != nil { return } } } } // 目前腾讯云不支持企业实名认识,如果类型为企业则直接返回认证成功 if req.Type == 2 { // 企业 sql := fmt.Sprintf(` UPDATE useresignrecord SET RECORDSTATUS = 3, UPDATETIME = SYSDATE WHERE USERID = %v AND TEMPLATETYPE = 1 `, req.UserId) _, err = db.GetEngine().Exec(sql) if err == nil { rsp = BankCard4Rsp{Code: "0", Description: "认证通过"} } } else { // 个人 // 调用腾讯云接口 // request := &v20180301.BankCard4EVerificationRequest{ // Name: &req.Person.RealName, // BankCard: &req.Person.BankCard, // Phone: &req.Person.Mobile, // IdCard: &req.Person.IdCardNo, // } request := faceid.NewBankCard4EVerificationRequest() request.Name = &req.Person.RealName request.BankCard = &req.Person.BankCard request.Phone = &req.Person.Mobile request.IdCard = &req.Person.IdCardNo var response *faceid.BankCard4EVerificationResponse response, err = utils.TencenCloudFaceIdClient.BankCard4EVerification(request) if err != nil { logger.GetLogger().Error("调用腾讯云实名认证接口发生错误:", err.Error()) return } if response.Response.Result == nil { err = errors.New("返回结果为空") logger.GetLogger().Error("调用腾讯云实名认证接口发生错误:", err.Error()) return } if *response.Response.Result != "0" { err = errors.New("返回结果失败,错误码(" + *response.Response.Result + "),返回信息(" + response.ToJsonString() + ")") logger.GetLogger().Error("调用腾讯云实名认证接口返回结果不成功:", err.Error()) return } // 返回结果结果,更新记录状态 sql := fmt.Sprintf(` UPDATE useresignrecord SET RECORDSTATUS = 3, UPDATETIME = SYSDATE WHERE USERID = %v AND TEMPLATETYPE = 1 `, req.UserId) _, err = db.GetEngine().Exec(sql) if err == nil { rsp = BankCard4Rsp{Code: "0", Description: "认证通过"} } } return }