qnc-server-old/api/feature.go
2024-09-14 10:48:09 +08:00

161 lines
4.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"
"strings"
)
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
}
// 调用 OCRService
ocrResult, err := featureService.OCRService(request.Base64)
if err != nil {
log.Printf("【OCR校验】请求错误%v", err)
response.FailWithMessage("系统错误,请稍后再试", c)
return
}
// 尝试解析为错误响应
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
//}
}