日期 | 版本 | 修订内容摘要 |
---|
2024-07-10 | v2.0.0 | 新增 |
对接流程
1.创建应用
注意:活体检测H5版创建应用入口即活体检测SDK创建应用入口;AppId、AppKey分别对应下图的AppKey、AppSecret
2.接口列表
2.1.获取授权Token(Auth Token)
说明:auth_token有效期为30分钟,每个用户需单独获取,不能共用
请求URL:
请求方式:POST
请求Header:
参数 | 值 |
---|
Content-Type | application/json |
请求参数:
参数 | 是否必须 | 类型 | 说明 |
---|
appKey | 是 | String | 创蓝appKey |
appSecret | 是 | String | 创蓝appSecret |
did | 是 | String | 客户自己生成随机码长度【0~32】 |
请求示例:
{
"appKey": "X6IfC4BO",
"appSecret": "397T7Nn9",
"did": "1375369787324108800"
}
返回参数:
参数 | 是否必须 | 类型 | 说明 |
---|
authToken | 是 | String | 认证令牌 温馨提示:每个用户需单独获取,不能共用 |
返回示例:
{
"code": "000000",
"message": "成功",
"data": {
"authToken": "1CFD08D67E724845A54F5AE2C83D0A6A"
}
}
2.2.活体检测
OCR身份证识别(双面)
请求URL:
请求方式:POST
请求Header:
参数 | 值 |
---|
Content-Type | application/json |
请求参数:
参数 | 是否必须 | 类型 | 说明 |
---|
app_key | 是 | String | 创蓝appKey |
auth_token | 是 | String | 认证令牌 auth_token获取接口 |
image_type | 是 | String | 图片类型 BASE64:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M; |
front_image | 是 | String | 证件照,正面照片 |
back_image | 是 | String | 证件照,反面照片 |
platform_type | 是 | int | 平台类型 5:服务端 |
请求示例:
{
"app_key": "X6IfC4BO",
"auth_token":"45B6C2EDE1894F2B902E259C87AE2763",
"image_type":"BASE64",
"front_image":"iVBORw0KGgoAAAANSUhEUgAAASwAAAHLCAYAAAByPKVPAAAAAXNSR0IArs...",
"back_image":"DDOBORw0KGgoAAAANSUhEUgAAASwAAAHLCAYAAAByPKVPAAAAAXNSR0IArs...",
"platform_type": 5
}
返回参数:
参数 | 是否必须 | 类型 | 说明 |
---|
front | 是 | object | 正面信息 |
+id_card_no | 是 | String | 证件号密文(解密工具参考文档末尾) |
+name | 是 | String | 姓名密文(解密工具参考文档末尾) |
+sex | 是 | String | 性别 |
+brith_day | 是 | String | 出生年月 |
+address | 是 | String | 身份证地址 |
+nation | 是 | String | 民族 |
back | 是 | object | 反面信息 |
+issuing_authority | 是 | String | 签发机关 |
+issuing_date | 是 | String | 签发日期 |
+expire_date | 是 | String | 有效日期 |
返回示例:
{
"code": "000000",
"message": "成功",
"data": {
"front": {
"address": "XXX",
"id_card_no": "XXX",
"brith_day": "XXX",
"name": "XXX",
"sex": "男",
"nation": "汉",
"msg": null
},
"back": {
"issuing_authority": "XXX",
"issuing_date": "XXXXX",
"expire_date": "XXXXX",
"msg": null
}
}
}
2.3.人像比对(核身)
请求URL:
请求方式:POST
请求Header:
参数 | 值 |
---|
Content-Type | application/json |
请求参数:
参数 | 是否必须 | 类型 | 说明 |
---|
app_key | 是 | String | 创蓝appKey |
auth_token | 是 | String | 认证令牌auth_token获取接口 |
id_card_no | 是 | String | 身份证号需经过RSA加密,请用公钥加密,公钥请向上海创蓝云智信息科技股份有限公司运营人员申请加密代码示例 |
id_card_name | 是 | String | 身份证姓名需经过RSA加密,请用公钥加密,公钥请向上海创蓝云智信息科技股份有限公司运营人员申请加密代码示例 |
请求示例:
{
"app_key": "wyeTncRs38GMDm5b",
"auth_token": "lxllksdfikjkjsf3fdsflxldnm",
"id_card_no": "420528199206241438",
"id_card_name": "张三丰"
}
返回参数:
参数 | 是否必须 | 类型 | 说明 |
---|
match | 是 | String | 比对结果pass:通过fail:不通过 |
score | 是 | String | 人像分值 范围[0,100] |
desc | 否 | String | 比对结果描述 |
image | 否 | String | base64编码后的人像图片信息。需要注意的是,该值仅在人像对比成功后返回。 |
返回示例:
{
"code": "000000",
"message": "成功",
"data": {
"match": "pass",
"score": "98",
"desc": "比对成功",
"image": "/9j/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAPABDgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQ"
}
}
【Java版】RSA解密工具
/**
* RSA解密
*
* @param data 待解密数据
* @param publicKey 公钥
* @return
*/
public static String decrypt(String data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] dataBytes = Base64.getDecoder().decode(data);
int inputLen = dataBytes.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offset = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offset > 0) {
if (inputLen - offset > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(dataBytes, offset, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(dataBytes, offset, inputLen - offset);
}
out.write(cache, 0, cache.length);
i++;
offset = i * MAX_DECRYPT_BLOCK;
}
byte[] decryptedData = out.toByteArray();
out.close();
// 解密后的内容
return new String(decryptedData, "UTF-8");
}
/**
* 获取公钥
*
* @param publicKey 公钥字符串
* @return
*/
public static PublicKey getPublicKey(String publicKey) throws Exception {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] decodedKey = Base64.getDecoder().decode(publicKey.getBytes());
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(decodedKey);
return keyFactory.generatePublic(keySpec);
}
没有更多了