# 个人证书 UV2
由企业或代理商发起申请,且将企业或代理商指定经办人信息共同写入的,核验姓名,证件号,人脸照片一致后,经大识蛛平台签发的数字证书。(注:使用该服务需要确保用户已经进行过企业认证)
# 一、请求说明
- 请求地址:http://api.spiderid.cn/api/router/rest,https://api.spiderid.cn/api/router/rest
- 服务接口名称(即公共参数method的值): certificate.issue.personUV2
- 请求方式:POST
# 二、请求参数
- 请求参数以表单形式提交,Content-Type值为: application/x-www-form-urlencoded;charset=utf-8
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
realname | String | 是 | 持有人姓名 |
idcard | String | 是 | 持有人身份证号 |
image | String | 是 | 持有人照片数据:以base64:开头 (图片base64数据), 以fs: 开头(文件云文件) |
p10 | String | 是 | 证书P10 |
mobile | String | 否 | 持有人手机号 |
String | 否 | 持有人邮箱 | |
managerName | String | 否 | 经办人姓名 |
managerIdcard | String | 否 | 经办人证件号 |
managerMobile | String | 否 | 经办人手机号 |
managerEmail | String | 否 | 经办人邮箱 |
请求示例:
http或https://api.spiderid.cn/api/router/rest?
<[公共请求参数]>
realname=XXX&idcard=XXX&image=XXX&p10=XXX...
# 三、响应参数
data结果信息 | 类型 | 存在 | 描述 |
---|---|---|---|
incorrect | Integer | 是 | 返回码 |
message | String | 是 | 返回说明 |
certificate | String | 否 | 签名证书,incorrect=100时,一定存在 |
privateKey | String | 否 | 加密密钥 |
privateCert | String | 否 | 加密证书 |
# 四、成功示例
JSON示例
{
"code": 0,
"message": "success",
"requestId": "f1005e7b2bca5908010001e12e19",
"data": {
"incorrect": 100,
"message": "发证成功",
"certificate": "MIICejC...Q=",
"privateKey": "AQA...AAAA==",
"privateCert": "MIICez...4V553"
}
}
# 五、失败示例
JSON示例
{
"code": 0,
"message": "success",
"requestId": "f1005e7b29e65908010001e12e18",
"data": {
"incorrect": 101,
"message": "证书已申请,不予重复发证(人证合一)"
}
}
# 六、返回码说明(incorrect)
返回码 | 描述 | 是否收费 |
---|---|---|
100 | 发证成功 | 是 |
101 | 证书已申请,不予重复发证(人证一致) | 是 |
102 | 证书已申请,信息不一致,不予重复发证 | 是 |
103 | 信息不一致,不予发证 | 是 |
104 | 库中无此号 | 是 |
105 | 人证一致,发证失败 | 是 |
106 | 参数错误 如 图片过大 上传相片质量校验不合格 | 否 |
107 | 人证一致,库中无照片 | 是 |
108 | 人证一致,特征提取失败 | 是 |
109 | 人证一致,检测到多于一张人脸 | 是 |
110 | 人证一致,图片不合法 | 是 |
111 | 人证一致,人脸检测失败 | 是 |
# SDK 请求示例
public static void main(String[] args) {
try {
//提供的url
String url = "http://api.spiderid.cn/api/router/rest";
//您的appKey
String appkey = "XXX";
//您的appSecret
String secretKey = "XXX";
//1.默认客户端
ApiClient apiClient = new DefaultApiClient(url, appkey, secretKey);
//2.调用出错自动重试客户端
//AutoRetryApiClient apiClient = new AutoRetryApiClient(url, appkey, secretKey);
CertificateIssuePersonUV2Request req = new CertificateIssuePersonUV2Request();
req.setIdcard("XXX");
req.setRealname("XXX");
req.setP10(PKCS10Utils.generateP10("CN=" +req.getRealname() + ",2.5.4.20=" + req.getIdcard() + ",OU=YZT,C=CN"));
//1.以base64:开头,图片转换成base64位字符串
//String image = Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("D:\\workspace\\realid\\real-identity-openapi-java-sdk\\src\\test\\resources\\data\\20181108160927.jpg")));
//req.setImagBase64(image);
//2.fs: 开头
req.setImageFs(uploadFile(apiClient,"face","D:\\XXX.jpg"));
CertificateIssuePersonUV2Response res = apiClient.execute(req);
if (res.getData().incorrect == 100) {
//后续业务处理
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 上传文件
*/
private static String uploadFile(ApiClient apiClient, String bizType, String path) throws ApiException, IOException {
FsUploadPolicyRequest fsUploadPolicyRequest = new FsUploadPolicyRequest();
fsUploadPolicyRequest.setBizType(bizType);
//获取文件上传权限
FsUploadPolicyResponse fsResponse = apiClient.execute(fsUploadPolicyRequest);
//获取权限识别
if (null == fsResponse.getData()) {
throw new ApiException();
}
//上传文件示例
Map<String, String> params = new HashMap<String, String>(5);
params.put("token", fsResponse.getData().token);
if (fsResponse.getData().getObjectKey().endsWith("/")) {
params.put("key", fsResponse.getData().getObjectKey() + "${filename}");
} else {
params.put("key", fsResponse.getData().getObjectKey());
}
//需要上传的文件
Map<String, FileItem> fileParams = new HashMap<String, FileItem>(5);
fileParams.put("file", new FileItem(new File(path)));
//上传
String uploadUrl = fsResponse.getData().getUploadUrl();
String json = WebUtils.doPost(uploadUrl, params, fileParams, 30000, 30000);
JSONObject jsonObject = JSON.parseObject(json);
return jsonObject.getString("bucket") + ":" + jsonObject.getString("objectKey");
}