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`
|