# 个人证书 UV3

由企业或代理商发起申请,且将企业或代理商指定经办人信息共同写入的,核验姓名,证件号,人脸视频一致后,经大识蛛平台签发的数字证书。(注:使用该服务需要确保用户已经进行过企业认证)

# 一、请求说明

  • 请求地址:http://api.spiderid.cn/api/router/rest,https://api.spiderid.cn/api/router/rest
  • 服务接口名称(即公共参数method的值): certificate.issue.personUV3
  • 请求方式:POST

# 二、请求参数

  • 请求参数以表单形式提交,Content-Type值为: application/x-www-form-urlencoded;charset=utf-8
名称 类型 是否必须 描述
realname String 持有人姓名
idcard String 持有人身份证号
videoData String 持有人视频数据:以base64:开头 (图片base64数据), 以fs: 开头(文件云文件)
p10 String 证书P10
mobile String 持有人手机号
email String 持有人邮箱
managerName String 经办人姓名
managerIdcard String 经办人证件号
managerMobile String 经办人手机号
managerEmail String 经办人邮箱

请求示例:

http或https://api.spiderid.cn/api/router/rest?
<[公共请求参数]>

realname=XXX&idcard=XXX&videoData=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 人证一致,人脸比对失败,如特征提取失败,检测到多于一张人脸等

# 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);

            CertificateIssuePersonUV3Request req = new CertificateIssuePersonUV3Request();
            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 video = Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("D:\\workspace\\realid\\real-identity-openapi-java-sdk\\src\\test\\resources\\data\\yrj.mp4")));
            //req.setVideoDataBase64(video);
            //2.fs: 开头
            req.setVideoDataFs(uploadFile(apiClient,"liveness_video","D:\\XXX.mp4"));
            CertificateIssuePersonUV3Response 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");
    }
最后更新于: 4/16/2020, 1:07:05 PM