Ver Fonte

优化爱签实名认证业务逻辑,需要配套终端升级版本使用

zhou.xiaoning há 1 ano atrás
pai
commit
7c2e444de1
2 ficheiros alterados com 99 adições e 28 exclusões
  1. 4 4
      config/config.xml
  2. 95 24
      services/asign/servcies.go

+ 4 - 4
config/config.xml

@@ -57,10 +57,10 @@
     <SignKey value="EB49C115EEDE44049F11495F6EA7526F"/>
   </Tencent>
   <Asign>
-    <Url value="https://prev.asign.cn"/>
-    <AppId value="896210645"/>
-    <PrivateKey value="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqmByEbXbqqq+FYxD1+mJzqrVxG/7xNF3iZJV9q0PqOVwWPEtND8nNuB2FeAwHc5+W7dZwXheVaQqWXvV6lnWp3KaQ9S4CbeOX7zKKF0j42JMj4Adknid9X6OlULZeVoXcQsdQ2h9xpfJhwLka4aOX5p1eP6WocXMrkAVRXEA8aNAlTUHBWhrbiJpKdL4KIDs6hwh0QqLbnt8i7t02wq6qubGW0hYvdY3MQL2GfbNoIZUbYezp5eCyHm/8cFT/WTt1sGSg4hD8JbUn0GTMcrh4rrQLmcJbjStNUOyjqouASTK1A2QQxSS5p2Y7AC4yut3MIqyr7ByAX9/85HtHrdX3AgMBAAECggEAFWRBnzGCyeZhYB6OD+o30j1Dx001aNWiODNYs4t4VrSeoYMqBh3Gtm8x9HybNYwAJRLp4ulJl8i2NSjvK1IWqxgqIt87x74z3ed2tO46jknKGaOMCcfzN7t4b9BxLd83pekRyUewzbV7cVqTW5WTyAZ5EUp14Wtof7vtjsg8ndZp1C0LzJrsQ63LWJAWsfkiRwNwbjkIKTl12xwe3ctZD/PmxYVgWGog+32OiiiTuSf4O1ddp3y2kth66dSIO06VPCqgu8gLwG5epgHmy0Y1ugunpZINN2D7FCH7aaE+H+aQ4nltNIxpQV20grtQG546oDilfPCQLxeW1HUipq2wkQKBgQDyqo180/lJ4wSNFU/hNqLfs2629vU9MH9aSjG5nQpchkTgBxUhAE5RkKgQHLJHJTfPx7vkx2xkI3qddwsWzvt8lNs5NQNxh+LyXQEgy9FCfpopijy2epLpzd2WT+0Y9WK5oB7O32s2YW/6fm0ahu3EJnvBlp1M23FzuRfrV7gu5QKBgQCz98MyV0UAnP3x+Gq5/0siVGPInzYlfTfYcEI3qhlMfqPVkRqqHdGGsiQL70YJlTlZkLeh3r2UvoR956nV9lZgh37aWnaHw7FAYcA5z4FYEFdmpLK/8znaKn/fxypr9xkJtw5V1QgCeaSUCFbt0xp41LaAvwSDBfFqdOTzQMFHqwKBgEyZN4YypxsClPovwwI1K95vFkCc3baN63VFvEJ55r5kB7OrqKi9HvuyLMrBNCku/1oQEyhZJsbJSDgSTqbJeSrPFhANwuOAYEveva9rhsd1jRYVs6pqMJuqxwpeeloJgztS5saoUYBd62nnpGreMolbGG94KnkLP9mmkH1SOCpdAoGAbheD3ljKilx/cLVxvIRy1vZe8EyNGBPoxMuvhlPVFBloae5RLH3/PfHd4TsnUhdqNOM1op0axlJhxI+iMpR2NKjOrg6m8diBpwvlRrgsvM2KWe0ouAm3e0GCZkd1KQTI2UuVRmaCdtkpF7GeU/BPAlnFpy6zON+61k/Z+wDC++8CgYEA54xmJqIr19BpKkcHAxE2pzDrj6ssu2qObKLfsS27o4RevBnrhoY9kPwn8kUKpngoCTd7tM42y9fcpAdUDv+lENAcIF/kz4u+zkyRGR+SpirgAsCYzxZN3GfRNDHBaFEiTkyL6NFdPGV2GTPcd0b6JGf82Thb0JJCxB/J3hVnDIs="/>
+    <Url value="https://oapi.asign.cn"/>
+    <AppId value="332768562"/>
+    <PrivateKey value="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDB1BczuEtnsE+4HmM1aj+n363w2FaXhJkm/3JStPWY93pNDEaWN9IevPsUAjKEXGw4kaYWJAs6oLcouPz5BUONOoRubk6cXk9juBPa1Kipyr5W5vlhaPOCMx9YSBGNGef6RoVBT+H9U3nVTJyJIFQM2teWNw8PrlbcHJAFJjwAwVySbOeJuhYMXK/kKTi7UNP1UGFL0e3n0CZyYH1/k8gcmzlz+nKWtQzTQi7ijFzg3ycoDf6YnGTzUOssdmGrxyjH+KRaFYXVGUg2StfjTaUEV1ww+zICRdIyQgHMRCn0hkvKuVbNCUPSx75Cz6AcW5X8/Oq6dv0zfZy50mZ7T1wtAgMBAAECggEAUYfUJqY72aa5MbpegsZpdkTJVsi5S8yz20qSHSYPNMPMhwJF4sQiN1nIxzbRZwm1X+osEZ4htwyJXrDJgDntm0dlE0qE+JNXE5wHhgHz3E/y1n0boxTRcQ/t/GV8NH0ULhthzAI9DiEB2235Xljh4fJfwsjwJelwke/VyMS3cp0nqp8/pyzhLKnqr7JL9uOQqYKo+RiAgX4Y2Lrll/vSIONw9fefCK5u9kTdXt5numUc+Vdt81sX62vNk38iNqqBW+suwr8KOOSM5mlffxKbRxHkPTCJTYA+Rdlfpdms3/Co7MotfWy0XamcW7TNyt8PkDQNLySF4kgIdKaKZjU4oQKBgQDpGeHMW1EwrQVjWPXhLmxDOse/3apRqLZ85urVn4wnDStMDzaDZoUf6PEmQlLPl8lyKxuKTw8xXPp2BKTGg6eseUVjA2fidufwnJ/a4CmkvFbTNLbEiNqRA6VUht7SGSviVwT8Fg0DH2139otlQdup/ypFQFUGKNUKPwR45PpD+QKBgQDU3pC2cBHEYcEwdw7xM9cKBLrF5CdHnBR8kA8L7bk2kzm23nWHWBr6frAhZTYeoTvADaZSMt1EURKS13J1q0wDkfUBolPif3pAjTZVJV6dMDonnbbvOXU/u4czsMp077RCfbbgr15gH2He6KPK0xmI1mME/JBVm4cy9kldAjK+1QKBgEdwJDBSCCbnz8/rsqdJZ+qOuCsIDyupjgvnZS8FD5nkQlG0E9vfbosiA83a47A1b4pqxaz0n85cFXJX5/vi219TZz16DLtt/5VRGvikXH7dLara6+x9mKZ6vI+UKfOvvTBHxQJQ67n6Rr1ONNhaf6yww86ncadKmkfimkdGvaBZAoGACUeelWVzUNVWH6/BBgDViglEvyXAFJ4YQonhLgrx/RAT/wXZp8nOe0cUlJAd+N3chfXSX1j6TmUeYypjQf/ys2Ekhiq2b3RRNwkw6itT4ZRdpKZ6eBlQJDQfo8A8QzbD6/YhB9B9U8FqedY4dboYLd/ytx/vhtvd2/nintxeq/UCgYEAqe1lh9lYbxPREsHjuhHiRzxqxdGS13hW2bvoLisAhQdNx/L9HFtEO5Nx2fRdzFRgXbH/QjfOxEadMia04uY0upqfg4fPT0Za2WIvn+uJBxpRiwupbAlKmP626jdmajJ03aQe1F7P8Ny+96Wh8x18uaMJx88Kg7e7+hi95WokLB4="/>
     <NotifyUrl value="http://218.17.158.45:15105/api/Asign/HandleASignCompleted"/>
-    <OpenApiUrl value="http://192.168.31.202:5015/mtp2-onlineopen"/>
+    <OpenApiUrl value="http://192.168.31.134:5015/mtp2-onlineopen"/>
   </Asign>
 </Configuration>

+ 95 - 24
services/asign/servcies.go

@@ -103,35 +103,98 @@ func BankCard4(req BankCard4Req) (rsp BankCard4Rsp, err error) {
 		}
 	}
 
-	// 判断证件号码是否已经在爱签平台存在
-	// var getUserReq APIGetUserReq
-	// getUserReq.Account = strconv.Itoa(req.UserId)
-	getUserReq := APIReq[APIGetUserReq]{
-		Data: APIGetUserReq{Account: strconv.Itoa(req.UserId)},
-	}
-	apiRsp, err := APIPost[APIGetUserReq, []APIGetUserRsp](getUserReq, APIURL_GetUser)
-	if err != nil {
-		return
-	}
-	if apiRsp.Code == CODE_SUCCESS {
-		err = errors.New("电子签平台用户编号已存在")
-		logger.GetLogger().Error("电子签平台用户编号已存在, apiRsp:", apiRsp)
-		return
-	}
-	getUserReq.Data.Account = ""
+	// 判断目标用户在爱签平台是否已经存在
+	getUserReq := APIReq[APIGetUserReq]{}
 	if req.Type == 1 {
 		getUserReq.Data.IdCard = req.Person.IdCardNo
 	} else {
 		getUserReq.Data.CreditCode = req.Company.CreditCode
 	}
-	apiRsp, err = APIPost[APIGetUserReq, []APIGetUserRsp](getUserReq, APIURL_GetUser)
+	apiRsp, err := APIPost[APIGetUserReq, []APIGetUserRsp](getUserReq, APIURL_GetUser)
 	if err != nil {
 		return
 	}
 	if apiRsp.Code == CODE_SUCCESS && len(apiRsp.Data) > 0 {
-		err = errors.New("电子签平台证件号码已存在")
-		logger.GetLogger().Error("电子签平台证件号码已存在, apiRsp:", apiRsp)
-		return
+		var has = false
+		var record models.Useresignrecord
+		has, err = db.GetEngine().Where("TEMPLATETYPE = 1 AND RECORDSTATUS = 1 AND USERID = ?", req.UserId).Get(&record)
+		if err != nil {
+			return
+		}
+		if !has {
+			err = errors.New("无对应实名认证记录信息")
+			logger.GetLogger().Error("无对应实名认证记录信息, userId:", req.UserId)
+			return
+		}
+
+		// 判断四要素是否一致,如果一致则直接调用JAVA实名接口
+		// 注意:爱签接口返回的BankCard为空
+		apiGetUserRsp := apiRsp.Data[0]
+		if req.Type == 1 {
+			// 个人
+			if strconv.Itoa(req.UserId) == apiGetUserRsp.Account &&
+				req.Person.RealName == apiGetUserRsp.Name &&
+				req.Person.Mobile == apiGetUserRsp.Mobile {
+
+				// 更新用户电子签记录-记录实名信息
+				var authinfo []byte
+				if authinfo, err = json.Marshal(req.Person); err != nil {
+					return
+				}
+				sql := fmt.Sprintf(`
+					UPDATE useresignrecord
+					SET RECORDSTATUS = 2,
+						UPDATETIME = SYSDATE,
+						AUTHINFO = '%v'
+					WHERE USERID = %v AND TEMPLATETYPE = 1 
+				`, string(authinfo), req.UserId)
+				if _, err = db.GetEngine().Exec(sql); err != nil {
+					return
+				}
+
+				// 调用JAVA实名认证接口
+				err = callJavaAuthFunc(&record, req.Type)
+				return
+			} else {
+				// 证件号码已在爱签平台的另外的用户占用
+				err = errors.New("电子签平台证件号码已存在")
+				logger.GetLogger().Error("电子签平台证件号码已存在, apiRsp:", apiRsp)
+				return
+			}
+		} else {
+			// 企业
+			if strconv.Itoa(req.UserId) == apiGetUserRsp.Account &&
+				req.Company.RealName == apiGetUserRsp.Name &&
+				req.Company.Mobile == apiGetUserRsp.Mobile &&
+				req.Company.CompanyName == apiGetUserRsp.CompanyName &&
+				req.Company.CreditCode == apiGetUserRsp.CreditCode {
+
+				// 更新用户电子签记录-记录实名信息
+				var authinfo []byte
+				if authinfo, err = json.Marshal(req.Company); err != nil {
+					return
+				}
+				sql := fmt.Sprintf(`
+					UPDATE useresignrecord
+					SET RECORDSTATUS = 2,
+						UPDATETIME = SYSDATE,
+						AUTHINFO = '%v'
+					WHERE USERID = %v AND TEMPLATETYPE = 1 
+				`, string(authinfo), req.UserId)
+				if _, err = db.GetEngine().Exec(sql); err != nil {
+					return
+				}
+
+				// 调用JAVA实名认证接口
+				err = callJavaAuthFunc(&record, req.Type)
+				return
+			} else {
+				// 社会统一信用代码已在爱签平台的另外的用户占用
+				err = errors.New("电子签平台社会统一信用代码已存在")
+				logger.GetLogger().Error("电子签平台社会统一信用代码已存在, apiRsp:", apiRsp)
+				return
+			}
+		}
 	}
 
 	// 从交易库中获取类型为实名认证的电子签信息
@@ -278,6 +341,14 @@ func CaptchaVerify(req CaptchaVerifyReq) (err error) {
 		return
 	}
 
+	// 调用JAVA实名认证接口
+	err = callJavaAuthFunc(&record, req.Type)
+
+	return
+}
+
+// callJavaAuthFunc 调用JAVA实名认证接口
+func callJavaAuthFunc(record *models.Useresignrecord, userType int) (err error) {
 	// 获取临时存储的用户认证信息
 	cacheMap := make(map[string]interface{})
 	if err = json.Unmarshal([]byte(record.AUTHINFO), &cacheMap); err != nil {
@@ -286,8 +357,8 @@ func CaptchaVerify(req CaptchaVerifyReq) (err error) {
 	}
 	// 调用JAVA实名认证接口
 	reqParam := make(map[string]interface{})
-	if req.Type == 1 { // 个人
-		reqParam["userid"] = req.UserId
+	if userType == 1 { // 个人
+		reqParam["userid"] = strconv.Itoa(int(record.USERID))
 		reqParam["cardnum"] = cacheMap["idCardNo"]
 		reqParam["username"] = cacheMap["realName"]
 		reqParam["cardtype"] = 0 // 目前写死证件类型为身份证 - 0
@@ -297,7 +368,7 @@ func CaptchaVerify(req CaptchaVerifyReq) (err error) {
 		reqParam["bankid"] = cacheMap["bankId"]
 		reqParam["userinfotype"] = 1 // 1 - 个人
 	} else {
-		reqParam["userid"] = req.UserId
+		reqParam["userid"] = strconv.Itoa(int(record.USERID))
 		reqParam["customername"] = cacheMap["companyName"]
 		reqParam["cardtype"] = 4 // 企业统一信用
 		reqParam["cardfrontphotourl"] = cacheMap["idCardPhoto"]
@@ -353,7 +424,7 @@ func CaptchaVerify(req CaptchaVerifyReq) (err error) {
 		SET RECORDSTATUS = 3,
 			UPDATETIME = SYSDATE
 		WHERE USERID = %v AND TEMPLATETYPE = 1 
-	`, req.UserId)
+	`, record.USERID)
 	_, err = db.GetEngine().Exec(sql)
 
 	return