api.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package tencentcloud
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "mtp2_if/db"
  7. "mtp2_if/logger"
  8. "mtp2_if/models"
  9. "mtp2_if/utils"
  10. reqModels "mtp2_if/services/asign"
  11. faceid "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/faceid/v20180301"
  12. )
  13. type BankCard4Rsp struct {
  14. Code string `json:"code"` // 结果码 '0': '认证通过'; 非'0'表示认证失败
  15. Description string `json:"description"` // 业务结果描述。
  16. }
  17. func BankCard4EVerification(req reqModels.BankCard4Req) (rsp BankCard4Rsp, err error) {
  18. if utils.TencenCloudFaceIdClient == nil {
  19. err = fmt.Errorf("腾讯云FaceId客户端未初始化")
  20. logger.GetLogger().Errorf("CreateConsoleLoginUrl failed: %s", err.Error())
  21. return
  22. }
  23. // 校验入参
  24. if req.Type == 1 && req.Person == nil {
  25. err = errors.New("缺少参数")
  26. return
  27. }
  28. if req.Type == 2 && req.Company == nil {
  29. err = errors.New("缺少参数")
  30. return
  31. }
  32. // 从交易库中获取类型为实名认证的电子签信息
  33. var authinfo []byte
  34. var record models.Useresignrecord
  35. var has bool
  36. has, err = db.GetEngine().Where("TEMPLATETYPE = 1 AND USERID = ?", req.UserId).Get(&record)
  37. if err != nil {
  38. return
  39. }
  40. if !has {
  41. err = errors.New("无对应实名认证记录信息")
  42. logger.GetLogger().Error("无对应实名认证记录信息, userId:", req.UserId)
  43. return
  44. }
  45. if record.RECORDSTATUS == 3 {
  46. // 原信息已实名,则判断两次提交的内容是否一致,如不一致则重新实名
  47. if record.AUTHINFO == "" {
  48. err = errors.New("实名认证记录信息异常")
  49. logger.GetLogger().Error("实名认证记录信息异常, userId:", req.UserId)
  50. return
  51. }
  52. if req.Type == 1 {
  53. // 个人
  54. var oriAuthInfo reqModels.PersonBankCard4
  55. err = json.Unmarshal([]byte(record.AUTHINFO), &oriAuthInfo)
  56. if err != nil {
  57. return
  58. }
  59. if oriAuthInfo.RealName == req.Person.RealName &&
  60. oriAuthInfo.IdCardNo == req.Person.IdCardNo &&
  61. oriAuthInfo.BankCard == req.Person.BankCard &&
  62. oriAuthInfo.Mobile == req.Person.Mobile {
  63. // 信息一致,则直接返回已实名
  64. err = errors.New("账户已实名")
  65. logger.GetLogger().Error("账户已实名, userId:", req.UserId)
  66. return
  67. } else {
  68. // 信息不一致,重新进行实名认证
  69. if authinfo, err = json.Marshal(req.Person); err != nil {
  70. return
  71. }
  72. sql := fmt.Sprintf(`
  73. UPDATE useresignrecord
  74. SET RECORDSTATUS = 1,
  75. UPDATETIME = SYSDATE,
  76. AUTHINFO = '%v'
  77. WHERE USERID = %v AND TEMPLATETYPE = 1
  78. `, string(authinfo), req.UserId)
  79. _, err = db.GetEngine().Exec(sql)
  80. if err != nil {
  81. return
  82. }
  83. }
  84. } else {
  85. // 企业
  86. var oriAuthInfo reqModels.CompanyBankCard4
  87. err = json.Unmarshal([]byte(record.AUTHINFO), &oriAuthInfo)
  88. if err != nil {
  89. return
  90. }
  91. if oriAuthInfo.CompanyName == req.Company.CompanyName &&
  92. oriAuthInfo.CreditCode == req.Company.CreditCode &&
  93. oriAuthInfo.RealName == req.Company.RealName &&
  94. oriAuthInfo.IdCardNo == req.Company.IdCardNo &&
  95. oriAuthInfo.BankCard == req.Company.BankCard &&
  96. oriAuthInfo.Mobile == req.Company.Mobile {
  97. // 信息一致,则直接返回已实名
  98. err = errors.New("账户已实名")
  99. logger.GetLogger().Error("账户已实名, userId:", req.UserId)
  100. return
  101. } else {
  102. // 信息不一致,重新进行实名认证
  103. if authinfo, err = json.Marshal(req.Company); err != nil {
  104. return
  105. }
  106. sql := fmt.Sprintf(`
  107. UPDATE useresignrecord
  108. SET RECORDSTATUS = 1,
  109. UPDATETIME = SYSDATE,
  110. AUTHINFO = '%v'
  111. WHERE USERID = %v AND TEMPLATETYPE = 1
  112. `, string(authinfo), req.UserId)
  113. _, err = db.GetEngine().Exec(sql)
  114. if err != nil {
  115. return
  116. }
  117. }
  118. }
  119. }
  120. // 目前腾讯云不支持企业实名认识,如果类型为企业则直接返回认证成功
  121. if req.Type == 2 {
  122. // 企业
  123. sql := fmt.Sprintf(`
  124. UPDATE useresignrecord
  125. SET RECORDSTATUS = 3,
  126. UPDATETIME = SYSDATE
  127. WHERE USERID = %v AND TEMPLATETYPE = 1
  128. `, req.UserId)
  129. _, err = db.GetEngine().Exec(sql)
  130. if err == nil {
  131. rsp = BankCard4Rsp{Code: "0", Description: "认证通过"}
  132. }
  133. } else {
  134. // 个人
  135. // 调用腾讯云接口
  136. // request := &v20180301.BankCard4EVerificationRequest{
  137. // Name: &req.Person.RealName,
  138. // BankCard: &req.Person.BankCard,
  139. // Phone: &req.Person.Mobile,
  140. // IdCard: &req.Person.IdCardNo,
  141. // }
  142. request := faceid.NewBankCard4EVerificationRequest()
  143. request.Name = &req.Person.RealName
  144. request.BankCard = &req.Person.BankCard
  145. request.Phone = &req.Person.Mobile
  146. request.IdCard = &req.Person.IdCardNo
  147. var response *faceid.BankCard4EVerificationResponse
  148. response, err = utils.TencenCloudFaceIdClient.BankCard4EVerification(request)
  149. if err != nil {
  150. logger.GetLogger().Error("调用腾讯云实名认证接口发生错误:", err.Error())
  151. return
  152. }
  153. if response.Response.Result == nil {
  154. err = errors.New("返回结果为空")
  155. logger.GetLogger().Error("调用腾讯云实名认证接口发生错误:", err.Error())
  156. return
  157. }
  158. if *response.Response.Result != "0" {
  159. err = errors.New("返回结果失败,错误码(" + *response.Response.Result + "),返回信息(" + response.ToJsonString() + ")")
  160. logger.GetLogger().Error("调用腾讯云实名认证接口返回结果不成功:", err.Error())
  161. return
  162. }
  163. // 返回结果结果,更新记录状态
  164. sql := fmt.Sprintf(`
  165. UPDATE useresignrecord
  166. SET RECORDSTATUS = 3,
  167. UPDATETIME = SYSDATE
  168. WHERE USERID = %v AND TEMPLATETYPE = 1
  169. `, req.UserId)
  170. _, err = db.GetEngine().Exec(sql)
  171. if err == nil {
  172. rsp = BankCard4Rsp{Code: "0", Description: "认证通过"}
  173. }
  174. }
  175. return
  176. }