1.获取授权Token(authToken)
注意:authToken有效期为30分钟,每个用户需单独获取,不能共用
1.1接口地址和说明
1.2接口请求参数
| 参数名 | 类型 | 参数描述 | 是否必填 | 说明 |
|---|
| appKey | String | 应用的APPID | 是 | 创蓝云智平台appId |
| appSecret | String | 应用的appKey | 是 | 创蓝云智平台appKey |
| did | String | 随机串 | 是 | 开发者自己生成随机码长度【0~32】 |
1.3请求示例
{
"appKey": "X6IfC4BO",
"appSecret": "397T7Nn9",
"did": "1375369787324108800"
}
1.4接口响应内容
响应body数据为JSON格式。
| 字段名 | 类型 | 参数描述 | 说明 |
|---|
| code | String | 响应代码 | 000000表示成功,其他代码都为失败,详情参考附录。 |
| message | String | 响应描述 | 响应代码描述 |
| data | Object | 数据内容 | |
| data >authToken | String | 认证令牌 | authToken有效期为30分钟,每个用户需单独获取,不能共用 |
1.5接口响应示例
{
"code": "000000",
"message": "成功",
"data": {
"authToken": "1CFD08D67E724845A54F5AE2C83D0A6A"
}
}
2.OCR身份证识别(双面)
2.1接口地址和说明
2.2接口请求参数
| 参数名 | 类型 | 参数描述 | 是否必填 | 说明 |
|---|
| app_key | String | 应用的APPID | 是 | 创蓝云智平台appId |
| auth_token | String | 认证令牌 | 是 | 获取授权Token(authToken)接口获取 |
| image_type | String | 图片类型 | 是 | BASE64:图片的base64值 |
| front_image | String | 身份证人像面照片 | 是 | base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M |
| back_image | String | 身份证国徽面照片 | 是 | base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M |
| platform_type | String | 平台类型 | 是 | 5:服务端 |
2.3请求示例
{
"app_key": "X6IfC4BO",
"auth_token":"45B6C2EDE1894F2B902E259C87AE2763",
"image_type":"BASE64",
"front_image":"iVBORw0KGgoAAAANSUhEUgAAASwAAAHLCAYAAAByPKVPAAAAAXNSR0IArs...",
"back_image":"DDOBORw0KGgoAAAANSUhEUgAAASwAAAHLCAYAAAByPKVPAAAAAXNSR0IArs...",
"platform_type": 5
}
2.4接口响应内容
响应body数据为JSON格式。
| 参数 | 是否必须 | 类型 | 说明 |
|---|
| 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 | 有效日期 |
2.5接口响应示例
{
"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
}
}
}
3.人像比对(核身)
3.1接口地址和说明
3.2接口请求参数
| 参数名 | 类型 | 参数描述 | 是否必填 | 说明 |
|---|
| app_key | String | 应用的APPID | 是 | 创蓝云智平台appId |
| auth_token | String | 认证令牌authToken | 是 | 通过获取授权Token接口获取 |
| id_card_no | String | 身份证号 | 是 | 身份证号需经过RSA加密,请用公钥加密,公钥请向运营人员申请 |
| id_card_name | String | 身份证姓名 | 是 | 身份证姓名需经过RSA加密,请用公钥加密,公钥请向运营人员申请 |
3.3请求示例
{
"app_key": "53hWp7sb",
"auth_token": "56552C3EBB724C69BA3BC2263833AB12",
"id_card_no": "m1hUHWlhkwUv8LnZDfU8SBTyqDHiteFY9Mf7lRhe+/BIpQvBp12Mrlk+mCNx5xxifVOF6AbQLxaJwLteaX95/NB1FI7wlj4xLloS7ygcNpTUTjb7WRQe3a9uNpLK81+VUlktF4UWSqrquQVECcmtZ+xRcygnQUoIo8HBA9kPBsg=",
"id_card_name": "cOSMk1nH8GsiBIN05YD9vW8JaHSx9f8Eqvj4NeW6BBY987EUNc0pVa2cYbDYxw3PnZdWPnGumI4vgmYBMxSCDrZn0R49Y+fWJKuNSYW5MMUIO7Pt64c9/f35y5TxtUZeeMLHW4EPUgsBeSzvaS0JX/JYqdn5JSndSGSwjuPFeqI="
}
【Java版】身份证号码、姓名加密示例
private static final String ALGORITHM = "RSA";
private static final String CIPHER_EN = "RSA";
private static final int MAX_ENCRYPT_BLOCK = 117;
public static String encryptByPublicKey(String fromStr, String publicKey) throws Exception {
return new String(Base64.getEncoder().encode(encryptByPublicKey(fromStr.getBytes(), publicKey)));
}
public static byte[] encryptByPublicKey(byte[] data, String publicKey) throws Exception {
// 得到公钥
byte[] keyBytes = Base64.getDecoder().decode(publicKey.getBytes());
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
Key key = keyFactory.generatePublic(x509EncodedKeySpec);
// 加密数据,分段加密
Cipher cipher = Cipher.getInstance(CIPHER_EN);
cipher.init(Cipher.ENCRYPT_MODE, key);
int inputLength = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offset = 0;
byte[] cache;
int i = 0;
while (inputLength - offset > 0) {
if (inputLength - offset > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data, offset, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data, offset, inputLength - offset);
}
out.write(cache, 0, cache.length);
i++;
offset = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
return encryptedData;
}
3.4接口响应内容
响应body数据为JSON格式。
| 字段名 | 类型 | 参数描述 | 说明 |
|---|
| code | String | 响应代码 | 000000表示成功,其他代码都为失败,详情参考附录。 |
| message | String | 响应描述 | 响应代码描述 |
| data | Object | 数据内容 | |
| data >match | String | 比对结果 | pass:通过,fail:不通过 |
| data >score | String | 人像分值 | 范围[0,100] |
| data >desc | String | 比对结果描述 | 比对结果描述 |
| data >image | String | 人像图片 | base64编码后的人像图片信息。需要注意的是,该值仅在人像对比成功后返回。 |
3.5接口响应示例
{
"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);
}
没有更多了