| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- 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
- }
|