package api import ( "encoding/json" "github.com/gin-gonic/gin" "log" "net/http" request2 "qnc-server/model/request" "qnc-server/model/response" "qnc-server/service" ) type Feature struct { } var featureService service.Feature // 注册路由 func InitFeature(group *gin.RouterGroup) { var f Feature featruePrivate := group.Group("feature") featruePrivate.Use(JWTAuth()) featruePrivate.POST("ocr_name", f.OcrName) featruePrivate.POST("verify_elements", f.VerifyElements) } func (f *Feature) OcrName(c *gin.Context) { var request request2.FeatureOcrReq // 绑定 JSON 请求体到 OcrRequest 结构体 if err := c.ShouldBindJSON(&request); err != nil { response.Fail(c) return } response.Ok(c) return // 调用 OCRService //ocrResult, err := featureService.OCRService(request.Base64) //if err != nil { // log.Printf("【OCR校验】请求错误:%v", err) // response.FailWithMessage("系统错误,请稍后再试", c) // return //} //log.Printf("OCR返回:%v", ocrResult) //// 尝试解析为错误响应 //var ocrError response.OcrErrorResponse //json.Unmarshal([]byte(ocrResult), &ocrError) //if ocrError.ErrorCode != 0 { // // 如果解析成功,且存在 error_code,则返回错误信息 // response.FailWithMessage("检测签名错误,请重新签名", c) // return //} // //// 尝试解析为成功响应 //var ocrSuccess response.OcrSuccessResponse //err = json.Unmarshal([]byte(ocrResult), &ocrSuccess) //if err != nil { // // 如果解析失败,则返回解析错误 // response.FailWithMessage("系统错误错误,请稍后再试", c) // return //} // //// 判断 words_result_num 是否等于 1 //if ocrSuccess.WordsResultNum != 1 { // response.FailWithMessage("检测签名错误,请重新签名", c) // return //} // //// 判断 OCR 结果的第一个 words 是否与 name 匹配 //if len(ocrSuccess.WordsResult) > 0 && strings.Contains(ocrSuccess.WordsResult[0].Words, request.Name) { // response.Ok(c) //} else { // response.FailWithMessage("签名不匹配,签名要和查询人的名字一致", c) // return //} } func (f *Feature) VerifyElements(c *gin.Context) { var reqBody request2.FeatureVerifyElementsReq if err := c.ShouldBindJSON(&reqBody); err != nil { response.FailWithMessage("Failed to read request body", c) return } // 二要素核验 twoElementsParams := map[string]any{ "name": reqBody.Name, "idcard": reqBody.CardNo, } twoElementsRespStr, err := requestService.AliYunRequest(http.MethodPost, "https://kzidcardv1.market.alicloudapi.com/api-mall/api/id_card/check", nil, twoElementsParams) var twoElementsResp response.TwoElementsResp err = json.Unmarshal([]byte(twoElementsRespStr), &twoElementsResp) if err != nil { log.Printf("二要素解析错误:%v", err) response.FailWithMessage("系统错误,请稍后再试", c) return } if twoElementsResp.Success == false { response.FailWithMessage("请输入有效的身份证号码", c) return } if twoElementsResp.Code != 200 { response.FailWithMessage(twoElementsResp.Msg, c) return } if twoElementsResp.Data.Result == 1 { response.FailWithMessage("姓名与身份证不一致", c) return } response.Ok(c) // 三要素 //westName, err := utils.WestDexEncrypt(reqBody.Name, "121a1e41fc1690dd6b90afbcacd80cf4") //if err != nil { // log.Printf("西部加密错误:%v", err) // response.FailWithMessage("系统错误,请稍后再试", c) // return //} //westIDCard, err := utils.WestDexEncrypt(reqBody.CardNo, "121a1e41fc1690dd6b90afbcacd80cf4") //if err != nil { // log.Printf("西部加密错误:%v", err) // response.FailWithMessage("系统错误,请稍后再试", c) // return //} //westPhone, err := utils.WestDexEncrypt(reqBody.Mobile, "121a1e41fc1690dd6b90afbcacd80cf4") //if err != nil { // log.Printf("西部加密错误:%v", err) // response.FailWithMessage("系统错误,请稍后再试", c) // return //} //threeElementsReq := map[string]interface{}{ // "name": westName, // "idNo": westIDCard, // "phone": westPhone, //} // //threeElements, err := requestService.WestDexRequest("G15BJ02", threeElementsReq) //var data response.Wrapper[response.ThreeElementsResponse] //err = json.Unmarshal([]byte(threeElements), &data) //if err != nil { // log.Printf("响应解析失败:%v", err) // response.FailWithMessage("系统错误,请稍后再试", c) // return //} // //switch data.Data.Code { //case "1000": //case "1003": // response.FailWithMessage("姓名、证件号均与手机号实名信息不一致", c) // return //case "1004": // response.FailWithMessage("姓名不正确", c) // return //case "1005": // response.FailWithMessage("证件号码不正确", c) // return //default: // log.Printf("三要素检测错误%v", data.Data.Msg) // response.FailWithMessage("服务器错误请稍后再试", c) // return //} }