Go SDK
本章节介绍人证核身服务Go SDK,您可以参考本章节进行快速集成开发。
准备工作
- 注册华为账号并开通华为云,并完成实名认证,账号不能处于欠费或冻结状态。
- 已开通人证核身服务。如未开通,请登录人证核身管理控制台开通所需服务。
- 已具备开发环境,Go SDK 支持 go 1.14 及以上版本,可执行 go version 检查当前 Go 的版本信息。
- 登录“我的凭证 > 访问秘钥”页面,获取Access Key(AK)和Secret Access Key(SK)。
图1 获取AK、SK
- 登录“我的凭证”页面,获取“IAM用户名”“、账号名”以及待使用区域的“项目ID”。调用服务时会用到这些信息,请提前保存。
本样例以“华北-北京四”区域为例,获取对应的项目ID(project_id)。
图2 我的凭证
安装SDK
使用SDK前需要安装华为云Go SDK 库。
# 安装华为云Go库 go get -u github.com/huaweicloud/huaweicloud-sdk-go-v3 # 安装依赖 go get github.com/json-iterator/go
开始使用SDK
- 导入依赖模块
import ( "fmt" "os" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" // 导入IVS sdk ivs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ivs/v2" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ivs/v2/model" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ivs/v2/region" )
- 配置认证信息
配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法请参见准备工作。
// 创建AK、SK认证凭据 func GetCredential(ak, sk string) basic.Credentials { return basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). Build() }
初始化认证信息:
ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") client := GetCredential(ak, sk)
- 认证用的 ak 和sk 硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
- 本示例以 ak 和 sk 保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
图3 Windows环境新建环境变量
- 初始化客户端
// 选择服务部署区域 func GetClient(auth basic.Credentials) *ivs.IvsClient { return ivs.NewIvsClient( ivs.IvsClientBuilder(). WithRegion(region.CN_NORTH_4). WithCredential(auth). Build()) }
CN_NORTH_4:华北-北京四
CN_NORTH_1:华北-北京一
- 发送请求并查看响应
# 以调用标准版(三要素)接口 DetectStandardByIdCardImage 为例 request := &model.DetectStandardByIdCardImageRequest{} response, err := client.DetectStandardByIdCardImage(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
- 异常处理
表1 异常处理 一级分类
一级分类说明
ServiceResponseError
服务响应异常
url.Error
url异常
// 异常处理 response, err := client.DetectStandardByIdCardImage(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
详细的SDK介绍请参见SDK中心、Go SDK使用指导、Go SDK使用视频。
SDK demo代码解析
人证核身标准版(三要素)
- 方式一:使用身份证图片、人像图片进行校验
request := &model.DetectStandardByIdCardImageRequest{} idcardImage2ReqDataReqDataByIdCardImage:= "身份证国徽面图像数据,使用base64编码" var listReqDataIvsStandardByIdCardImageRequestBodyData = []model.ReqDataByIdCardImage{ { IdcardImage1: "身份证人像面图像数据,使用base64编码", IdcardImage2: &idcardImage2ReqDataReqDataByIdCardImage, FaceImage: "现场人像图像数据,使用base64编码,", }, } databody := &model.IvsStandardByIdCardImageRequestBodyData{ ReqData: &listReqDataIvsStandardByIdCardImageRequestBodyData, } uuidMetaMeta:= "唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" metabody := &model.Meta{ Uuid: &uuidMetaMeta, } request.Body = &model.IvsStandardByIdCardImageRequestBody{ Data: databody, Meta: metabody, } response, err := client.DetectStandardByIdCardImage(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
- 方式二:使用身份证姓名、身份证号码文本,人像图片进行校验
request := &model.DetectStandardByNameAndIdRequest{} var listReqDataIvsStandardByNameAndIdRequestBodyData = []model.StandardReqDataByNameAndId{ { VerificationName: "被验证人的姓名", VerificationId: "被验证人的身份证号码", FaceImage: "现场人像图像数据,使用base64编码", }, } databody := &model.IvsStandardByNameAndIdRequestBodyData{ ReqData: &listReqDataIvsStandardByNameAndIdRequestBodyData, } uuidMetaMeta:= "唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" metabody := &model.Meta{ Uuid: &uuidMetaMeta, } request.Body = &model.IvsStandardByNameAndIdRequestBody{ Data: databody, Meta: metabody, } response, err := client.DetectStandardByNameAndId(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
- 方式三:使用身份证姓名、身份证号码文本和现场拍摄的人像视频数据,实现活体人证核身
request := &model.DetectStandardByVideoAndNameAndIdRequest{} var listReqDataData = []model.StandardReqDataByVideoAndNameAndId{ { VerificationName: "被验证人的姓名", VerificationId: "被验证人的身份证号码", Video: "现场拍摄人像视频数据,使用base64编码", Actions: "动作代码顺序列表", }, } databody := &model.IvsStandardByVideoAndNameAndIdRequestBodyData{ ReqData: &listReqDataData, } uuidMeta := "唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" metabody := &model.Meta{ Uuid: &uuidMeta, } request.Body = &model.IvsStandardByVideoAndNameAndIdRequestBody{ Data: databody, Meta: metabody, } response, err := client.DetectStandardByVideoAndNameAndId(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
- 方式四:使用现场拍摄的人像视频数据,实现活体人证核身
request := &model.DetectStandardByVideoAndIdCardImageRequest{} idcardImage2ReqData:= "身份证国徽面图像数据,使用base64编码" var listReqDataData = []model.ReqDataByVideoAndIdCardImage{ { IdcardImage1: "身份证人像面图像数据,使用base64编码", IdcardImage2: &idcardImage2ReqData, Video: "现场拍摄人像视频数据,使用base64编码", Actions: "动作代码顺序列表", }, } databody := &model.IvsStandardByVideoAndIdCardImageRequestBodyData{ ReqData: &listReqDataData, } uuidMeta:= "唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" metabody := &model.Meta{ Uuid: &uuidMeta, } request.Body = &model.IvsStandardByVideoAndIdCardImageRequestBody{ Data: databody, Meta: metabody, } response, err := client.DetectStandardByVideoAndIdCardImage(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
人证核身证件版(二要素)
- 方式一:使用身份证图片进行校验
request := &model.DetectExtentionByIdCardImageRequest{} idcardImage2ReqDataExtentionReqDataByIdCardImage:= "身份证国徽面图像数据,使用base64编码" var listReqDataIvsExtentionByIdCardImageRequestBodyData = []model.ExtentionReqDataByIdCardImage{ { IdcardImage1: "身份证人像面图像数据,使用base64编码", IdcardImage2: &idcardImage2ReqDataExtentionReqDataByIdCardImage, }, } databody := &model.IvsExtentionByIdCardImageRequestBodyData{ ReqData: &listReqDataIvsExtentionByIdCardImageRequestBodyData, } uuidMetaMeta:= "唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" metabody := &model.Meta{ Uuid: &uuidMetaMeta, } request.Body = &model.IvsExtentionByIdCardImageRequestBody{ Data: databody, Meta: metabody, } response, err := client.DetectExtentionByIdCardImage(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
- 方式二:使用身份证姓名、身份证号码文本进行校验
request := &model.DetectExtentionByNameAndIdRequest{} var listReqDataIvsExtentionByNameAndIdRequestBodyData = []model.ExtentionReqDataByNameAndId{ { VerificationName: "被验证人的姓名", VerificationId: "被验证人的身份证号码", }, } databody := &model.IvsExtentionByNameAndIdRequestBodyData{ ReqData: &listReqDataIvsExtentionByNameAndIdRequestBodyData, } uuidMetaMeta:= "唯一标识此次请求的ID,用户自定义,不超过64位。例如10eb0091-887f-4839-9929-cbc884f1e20e" metabody := &model.Meta{ Uuid: &uuidMetaMeta, } request.Body = &model.IvsExtentionByNameAndIdRequestBody{ Data: databody, Meta: metabody, } response, err := client.DetectExtentionByNameAndId(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
代码示例自动生成
API Explorer提供API检索及平台调试,支持全量快速检索、可视化调试、帮助文档查看和在线咨询。
您只需要在API Explorer中修改接口参数,即可自动生成对应的代码示例。同时,可在集成开发环境CloudIDE中完成代码的构建、调试和运行等操作。