194 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 阿里云二要素验证服务
 | ||
| 
 | ||
| 这个服务提供了调用阿里云身份证二要素验证API的功能,用于验证姓名和身份证号码是否匹配。
 | ||
| 
 | ||
| ## 功能特性
 | ||
| 
 | ||
| - 身份证二要素验证(姓名 + 身份证号)
 | ||
| - 支持详细验证结果返回
 | ||
| - 支持简单布尔值判断
 | ||
| - 错误处理和中文错误信息
 | ||
| 
 | ||
| ## 配置说明
 | ||
| 
 | ||
| ### 必需配置
 | ||
| 
 | ||
| - `Host`: 阿里云API的域名地址
 | ||
| - `AppCode`: 阿里云市场应用的AppCode
 | ||
| 
 | ||
| ### 配置示例
 | ||
| 
 | ||
| ```go
 | ||
| host := "https://kzidcardv1.market.alicloudapi.com"
 | ||
| appCode := "您的AppCode"
 | ||
| ```
 | ||
| 
 | ||
| ## 使用方法
 | ||
| 
 | ||
| ### 1. 创建服务实例
 | ||
| 
 | ||
| ```go
 | ||
| service := NewAlicloudService(host, appCode)
 | ||
| ```
 | ||
| 
 | ||
| ### 2. 调用API
 | ||
| 
 | ||
| #### 身份证二要素验证示例
 | ||
| 
 | ||
| ```go
 | ||
| // 构建请求参数
 | ||
| params := map[string]interface{}{
 | ||
|     "name":   "张三",
 | ||
|     "idcard": "110101199001011234",
 | ||
| }
 | ||
| 
 | ||
| // 调用API
 | ||
| responseBody, err := service.CallAPI("api-mall/api/id_card/check", params)
 | ||
| if err != nil {
 | ||
|     log.Printf("验证失败: %v", err)
 | ||
|     return
 | ||
| }
 | ||
| 
 | ||
| // 解析完整响应结构
 | ||
| var response struct {
 | ||
|     Msg     string `json:"msg"`
 | ||
|     Success bool   `json:"success"`
 | ||
|     Code    int    `json:"code"`
 | ||
|     Data    struct {
 | ||
|         Birthday string `json:"birthday"`
 | ||
|         Result   int    `json:"result"`
 | ||
|         Address  string `json:"address"`
 | ||
|         OrderNo  string `json:"orderNo"`
 | ||
|         Sex      string `json:"sex"`
 | ||
|         Desc     string `json:"desc"`
 | ||
|     } `json:"data"`
 | ||
| }
 | ||
| 
 | ||
| if err := json.Unmarshal(responseBody, &response); err != nil {
 | ||
|     log.Printf("响应解析失败: %v", err)
 | ||
|     return
 | ||
| }
 | ||
| 
 | ||
| // 检查响应状态
 | ||
| if response.Code != 200 {
 | ||
|     log.Printf("API返回错误: code=%d, msg=%s", response.Code, response.Msg)
 | ||
|     return
 | ||
| }
 | ||
| 
 | ||
| idCardData := response.Data
 | ||
| 
 | ||
| // 判断验证结果
 | ||
| if idCardData.Result == 1 {
 | ||
|     fmt.Println("身份证信息验证通过")
 | ||
| } else {
 | ||
|     fmt.Println("身份证信息验证失败")
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| #### 通用API调用
 | ||
| 
 | ||
| ```go
 | ||
| // 调用其他阿里云API
 | ||
| params := map[string]interface{}{
 | ||
|     "param1": "value1",
 | ||
|     "param2": "value2",
 | ||
| }
 | ||
| 
 | ||
| responseBody, err := service.CallAPI("your/api/path", params)
 | ||
| if err != nil {
 | ||
|     log.Printf("API调用失败: %v", err)
 | ||
|     return
 | ||
| }
 | ||
| 
 | ||
| // 根据具体API的响应结构进行解析
 | ||
| // 每个API的响应结构可能不同,需要根据API文档定义相应的结构体
 | ||
| var response struct {
 | ||
|     Msg  string      `json:"msg"`
 | ||
|     Code int         `json:"code"`
 | ||
|     Data interface{} `json:"data"`
 | ||
| }
 | ||
| 
 | ||
| if err := json.Unmarshal(responseBody, &response); err != nil {
 | ||
|     log.Printf("响应解析失败: %v", err)
 | ||
|     return
 | ||
| }
 | ||
| 
 | ||
| // 处理响应数据
 | ||
| fmt.Printf("响应数据: %s\n", string(responseBody))
 | ||
| ```
 | ||
| 
 | ||
| ## 响应格式
 | ||
| 
 | ||
| ### 通用响应结构
 | ||
| 
 | ||
| ```json
 | ||
| {
 | ||
|     "msg": "成功",
 | ||
|     "success": true,
 | ||
|     "code": 200,
 | ||
|     "data": {
 | ||
|         // 具体的业务数据
 | ||
|     }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### 身份证验证响应示例
 | ||
| 
 | ||
| #### 成功响应 (code: 200)
 | ||
| 
 | ||
| ```json
 | ||
| {
 | ||
|     "msg": "成功",
 | ||
|     "success": true,
 | ||
|     "code": 200,
 | ||
|     "data": {
 | ||
|         "birthday": "19840816",
 | ||
|         "result": 1,
 | ||
|         "address": "浙江省杭州市淳安县",
 | ||
|         "orderNo": "202406271440416095174",
 | ||
|         "sex": "男",
 | ||
|         "desc": "不一致"
 | ||
|     }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| #### 参数错误响应 (code: 400)
 | ||
| 
 | ||
| ```json
 | ||
| {
 | ||
|     "msg": "请输入有效的身份证号码",
 | ||
|     "code": 400,
 | ||
|     "data": null
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### 错误响应
 | ||
| 
 | ||
| ```json
 | ||
| {
 | ||
|     "msg": "AppCode无效",
 | ||
|     "success": false,
 | ||
|     "code": 400
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ## 错误处理
 | ||
| 
 | ||
| 服务定义了以下错误类型:
 | ||
| 
 | ||
| - `ErrDatasource`: 数据源异常
 | ||
| - `ErrSystem`: 系统异常
 | ||
| - `ErrInvalid`: 身份证信息不匹配
 | ||
| 
 | ||
| ## 注意事项
 | ||
| 
 | ||
| 1. 请确保您的AppCode有效且有足够的调用额度
 | ||
| 2. 身份证号码必须是18位有效格式
 | ||
| 3. 姓名必须是真实有效的姓名
 | ||
| 4. 建议在生产环境中添加适当的重试机制和超时设置
 | ||
| 5. 请遵守阿里云API的使用规范和频率限制
 | ||
| 
 | ||
| ## 依赖
 | ||
| 
 | ||
| - Go 1.16+
 | ||
| - 标准库:`net/http`, `encoding/json`, `net/url`  |