
# Go SDK
本章节介绍人证核身服务Go SDK，您可以参考本章节进行快速集成开发。
 #### 准备工作
- [注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)，并完成实名认证，账号不能处于欠费或冻结状态。
- 已开通人证核身服务。如未开通，请登录[人证核身管理控制台](https://console.huaweicloud.com/ivs)开通所需服务。
- 已具备开发环境，Go SDK 支持 go 1.14 及以上版本，可执行 go version 检查当前 Go 的版本信息。
- 登录"[我的凭证](https://console.huaweicloud.com/iam/#/myCredential) \> 访问密钥"页面，获取Access Key（AK）和Secret Access Key（SK）。
  图1获取AK、SK   
  ![](https://support.huaweicloud.com/sdkreference-ivs/zh-cn_image_0000001731742772.png "点击放大") 
- 登录"[我的凭证](https://console.huaweicloud.com/iam/#/myCredential)"页面，获取"IAM用户名""、账号名"以及待使用区域的"项目ID"。调用服务时会用到这些信息，请提前保存。
  本样例以"华北-北京四"区域为例，获取对应的项目ID（project_id）。
  图2我的凭证   
  ![](https://support.huaweicloud.com/sdkreference-ivs/zh-cn_image_0000001779242593.png "点击放大") 
 
#### 安装SDK
使用SDK前需要安装华为云Go SDK 库。
```
# 安装华为云Go库
go get -u github.com/huaweicloud/huaweicloud-sdk-go-v3
# 安装依赖
go get github.com/json-iterator/go
```
#### 开始使用SDK
1. 导入依赖模块
   ```
   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"
   )
   ```
   
2. 配置认证信息 配置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)
   ```
   ![](https://support.huaweicloud.com/sdkreference-ivs/public_sys-resources/caution_3.0-zh-cn.png)
   - 认证用的 ak 和sk 硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全。
   
   - 本示例以 ak 和 sk 保存在环境变量中来实现身份验证为例，运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
    
   图3Windows环境新建环境变量   
   ![](https://support.huaweicloud.com/sdkreference-ivs/zh-cn_image_0000001778822789.png "点击放大") 
3. 初始化客户端 指定region方式
   ```
   // 选择服务部署区域
   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：华北-北京一
   
4. 发送请求并查看响应
   ```
   # 以调用标准版(三要素)接口 DetectStandardByIdCardImage 为例
   request := &model.DetectStandardByIdCardImageRequest{}
   response, err := client.DetectStandardByIdCardImage(request)
   if err == nil {
       fmt.Printf("%+v\n", response)
   } else {
       fmt.Println(err)
   }
   ```
   
5. 异常处理
   表1异常处理 
   | 一级分类                 | 一级分类说明 |
   |:---|:---|
   | ServiceResponseError | 服务响应异常 |
   | url.Error            | url异常  |
      
   ```
   // 异常处理
   response, err := client.DetectStandardByIdCardImage(request)
   if err == nil {
       fmt.Printf("%+v\n", response)
   } else {
       fmt.Println(err)
   }
   ```
   
 
![](https://support.huaweicloud.com/sdkreference-ivs/public_sys-resources/note_3.0-zh-cn.png)
详细的SDK介绍请参见[SDK中心](https://sdkcenter.developer.huaweicloud.com/)、[Go SDK使用指导](https://github.com/huaweicloud/huaweicloud-sdk-go-v3/blob/master/README_CN.md)、[Go SDK使用视频](https://res-static.hc-cdn.cn/cloudbu-site/china/zh-cn/support/sdk-video/huaweicloud_go_sdk.mp4)。
#### 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](https://apiexplorer.developer.huaweicloud.com/apiexplorer/sdk?product=IVS&api=DetectStandardByIdCardImage)提供API检索及平台调试，支持全量快速检索、可视化调试、帮助文档查看和在线咨询。
您只需要在API Explorer中修改接口参数，即可自动生成对应的代码示例。同时，可在集成开发环境CloudIDE中完成代码的构建、调试和运行等操作。
图4API Explorer   
![](https://support.huaweicloud.com/sdkreference-ivs/zh-cn_image_0000001163479922.png "点击放大")
