有奖捉虫:行业应用 & 管理与支持文档专题 HOT
文档中心 > 人脸核身 > 最佳实践 > 在线考试场景身份核验实践
本文档介绍如何使用腾讯云慧眼人脸核身能力,完成在线考试过程中用户身份核验的。不仅满足考试用户身份核验,在考试过程中,如需随机抽选查看是否违规,还可结合人脸识别等能力达到防作弊的管理。

准备工作

准备工作包括:开通人脸核身服务、业务申请、了解腾讯云慧眼人脸核身配置、获取账号的云 API 密钥5个步骤。

开通人脸核身服务

登录 人脸核身控制台,首次使用人脸核身服务的用户,需要先开通人脸核身服务。单击提交申请,按照实际情况填写信息即可。
?
?
说明
互联网行业和金融行业必须上传业务相关营业资质。
腾讯云 E证通服务不仅支持权威库比对,还支持客户自传身份证照片,本实例需要的功能组合为:活体人脸核身(完成活体检测后照片与权威库比对)和身份信息实名验证(二要素)。

业务申请

成功开通人脸核身服务后,进入自助接入页面。E证通服务目前只向已完成企业实名认证的腾讯云用户开发,使用服务前需要通过企业资质审核。
1. 单击认证指引按钮进入企业账号认证指引页面,按照指引完成企业账号实名认证。
?
?
2. 企业认证完成后即可进行商户 ID 申请,开启 E证通服务。
?
?

了解腾讯云 E 证通服务

可在官网产品文档中了解 E证通服务的功能和优势等,详情请参见 E证通

获取账号的云 API 密钥

在腾讯云访问管理的 API 密钥管理 页面,新建或获取个人密钥(SecretId 和 SecretKey)。
注意
获取的 API 密钥需妥善保管。
?
?
?

接入 E证通人脸核身服务

查看接入文档并选择接入方式

首先查看 E证通接入文档,E证通支持的接入方式有三种:E证通小程序接入、E证通小程序接入(uni-app)和 E证通 H5 接入。
E证通小程序接入和E证通小程序接入(uni-app)需要微信小程序支持,实现接入方小程序和 eID 小程序之间的交互逻辑。
H5 接入方式只需要接入方后台调用 E证通服务接口,就可以得到一个用户可访问的 H5 页面。
结合在线考试身份核验应用场景,选择基于 H5 的 E证通服务进行接入。

确定交互流程

E证通 H5 接入方式需要与 E证通后端接口交互两次:
初始时获取 EidToken 和核身 URL。
考生完成核身流程后获取核验结果。
获取核验结果有两种方式:轮询和重定向。 在这个场景下,选择重定向方式,时序图如下所示:
?
?
其中,接入方前端为考生个人微信,接入方服务端为我们实现的接入逻辑。整个实现流程为:
1. 给考生发放一个二维码,这个二维码指向接入方调用 GetEidToken 的接口。
2. 考生使用微信扫描二维码后跳转到核身 Url 指定的核身 H5 页面,进行身份证 OCR 识别以及人脸识别身份核验 ,核身完成后自动调用 RedirectUrl 指定的获取核验结果的接入方后端接口。
3. 由于 E证通的重定向方式会自动将 token 作为参数传入 RedirectUrl 指定的接口,所以接入方获取结果的接口能够拿到 token,调用 E证通后端提供的 GetEidResult 接口,获得核验结果。 通过下面这个实际使用页面中的流程图能够形象地说明这一过程。
?
?

接入实现

基于前面的分析,我们只需要实现两个接入方后端接口即可完成对 E证通 H5 方式的接入,同时为了实现通过扫描二维码启动身份核验,需要实现一个获取指向 getToken 接口的二维码的接口。

主函数中开放出三个接口

实现如下:
func main() {
// http请求路径和接口名
http.HandleFunc("/gettoken", getToken)
http.HandleFunc("/redirect", getResult)
http.HandleFunc("/getqrcode", getQRCode)
?
// 在IP:Port开启服务
err := http.ListenAndServe("ServerIP:Port", nil)
if err != nil {
fmt.Println("ListenAndServe Error:", err.Error())
}
}

三个 HTTP 接口的实现

1. getToken 接口: 由考生触发,调用E证通后端 GetEidToken,获取到核身 Url,考生进行刷脸认证。基于 Go 的实现如下:
func getToken(w http.ResponseWriter, req *http.Request) {
credential := common.NewCredential(
"SecretId",
"SecretKey",
)
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "faceid.tencentcloudapi.com"
client, _ := faceid.NewClient(credential, "", cpf)
?
request := faceid.NewGetEidTokenRequest()
?
// 装填参数
merchantId := "MerchantId"
redirectUrl := "http://ServerIP:Port/redirect"
request.MerchantId = &merchantId
request.RedirectUrl = &redirectUrl
?
// 发起调用
response, err := client.GetEidToken(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Printf("An API error has returned: %s", err)
return
}
if err != nil {
panic(err)
}
// 控制前端H5页面跳转
http.Redirect(w, req, *response.Response.Url, 302)
}
2. getResult 接口: RedirectUrl 指定,考生在 H5 页面完成核身后,由E证通前端自动调用,传入本次核验的 token,获取核验结果。基于 Go 的实现如下:
func getResult(w http.ResponseWriter, req *http.Request) {
credential := common.NewCredential(
"SecretId",
"SecretKey",
)
?
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "faceid.tencentcloudapi.com"
client, _ := faceid.NewClient(credential, "", cpf)
?
request := faceid.NewGetEidResultRequest()
// 装填参数
err := req.ParseForm()
if err != nil {
fmt.Println(err.Error())
}
token, found := req.Form["token"]
if !found {
fmt.Println("参数解析出错")
}
request.EidToken = &token[0]
// 发起结果查询
response, err := client.GetEidResult(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Println("An API error has returned: %s", err)
return
}
if err != nil {
panic(err)
}
// 获取结果信息
code := response.Response.Text.ErrCode
name := response.Response.Text.Name
if *code == 0 {
res := "认证通过,该用户是" + *name
fmt.Println(res)
fmt.Fprint(w, res)
} else {
res := "!!!认证未通过,该用户不是" + *name
fmt.Println(res)
fmt.Fprint(w, res)
}
}
3. 获取二维码的接口实现代码如下:
func getQRCode(w http.ResponseWriter, req *http.Request) {
err1 := req.ParseForm()
if err1 != nil {
fmt.Println(err1.Error())
}
url := "http://ServerIP:Port/gettoken"
// 设置http响应头首部行
w.Header().Set("content-type", "image/png")
w.Write(stringToQR(url))
}
?
// 字符串转二维码
func stringToQR(url string) []byte {
res, err := qrcode.Encode(url, qrcode.Medium, 256)
if err != nil {
fmt.Println(err.Error())
}
return res
}
在接入过程中,可以充分利用文档的 API 接口范例,得到对接口的调用框架代码,只需要在里面完成自己的逻辑就行。例如获取 E证通 Token 请参见 API 文档。 推荐使用 API Explorer,详细操作及说明请参见云 API 文档 使用 API Explorer


http://www.vxiaotou.com