本文介绍了如何使用阿里云实人认证服务的Java SDK,具体包括获取和安装SDK的方法以及SDK代码示例。

获取地址

您需要引入两个SDK,包括aliyun-java-sdk-core(阿里云核心SDK)和aliyun-java-sdk-cloudauth(实人认证SDK)。每个SDK都提供了Maven Repository、Central Repository、GitHub的获取方式,您可以选择合适的方式获取SDK。

  • 根据实际情况,选择合适的方式获取aliyun-java-sdk-core

    说明

    如果您使用的是aliyun-java-sdk-core 4.0.0~4.0.2版本,那么在调用HTTPS接口时需要在profile中添加profile.getHttpClientConfig().setIgnoreSSLCerts(true);

  • 根据实际情况,选择合适的方式获取aliyun-java-sdk-cloudauth

安装说明

方式一:使用Maven(推荐)

如果您使用Maven管理Java项目,可以通过在pom.xml文件中添加Maven依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.4.3</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-cloudauth</artifactId>
    <version>2.0.17</version>
</dependency>
说明

version的值以SDK获取地址中的最新版本为准。

方式二:在集成开发环境(IDE)中导入jar文件

  • Eclipse安装

    1. 将下载的aliyun-java-sdk-xxx.jar文件复制到您的项目文件夹中。

    2. 在Eclipse中打开您的项目,右键单击该项目,单击Properties

    3. 在弹出的对话框中,单击Java Build Path > Libraries > Add JARs添加下载的JAR文件。

    4. 单击Apply and Close

  • IntelliJ 安装

    1. 将下载的aliyun-java-sdk-xxx.jar文件复制到您的项目文件夹中。

    2. 在IntelliJ中打开您的项目,在菜单栏中单击File > Project > Structure

    3. 单击Apply,然后单击OK

RPBasic、RPManual、FDBioOnly认证方案请求参数示例


//1. 接入方服务端发起认证请求,获得认证Token。
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
// 需要传入以下参数。
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);
request.setBizId("认证ID, 由接入方指定, 发起不同的认证任务需要更换不同的认证ID");
request.setBizType("实人认证控制台上创建场景时对应的场景标识"); 

//2. 接入方服务端将Token传递给接入方无线客户端。
//3. 接入方无线客户端用Token调起无线认证SDK。
//4. 用户按照由无线认证SDK组织的认证流程页面的指引,提交认证资料。
//5. 认证流程结束退出无线认证SDK,进入客户端回调函数。
//6. 接入方服务端获取认证状态和认证资料(注:客户端无线认证SDK回调中也会携带认证状态, 但建议以服务端调接口获取的为准进行业务上的判断和处理)。
// 查询认证结果。
DescribeVerifyResultRequest verifyResultRequest = new DescribeVerifyResultRequest();
// 需要传入以下参数。
verifyResultRequest.setRegionId("cn-hangzhou");
verifyResultRequest.setSysProtocol(ProtocolType.HTTPS);
verifyResultRequest.setBizId("调用DescribeVerifyToken时传入的认证ID");
verifyResultRequest.setBizType("调用DescribeVerifyToken时传入的业务场景");

RPBioID、RPBioOnly认证方案请求参数示例

//1. 接入方服务端发起认证请求,获得认证Token。
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
// 需要传入以下参数。
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);
request.setBizId("认证ID, 由接入方指定, 发起不同的认证任务需要更换不同的认证ID");
request.setBizType("实人认证控制台上创建场景时对应的场景标识"); 
request.setName("用户正确的姓名");
request.setIdCardNumber("用户正确的身份证号");

//2. 接入方服务端将Token传递给接入方无线客户端。
//3. 接入方无线客户端用Token调起无线认证SDK。
//4. 用户按照由无线认证SDK组织的认证流程页面的指引,提交认证资料。
//5. 认证流程结束退出无线认证SDK,进入客户端回调函数。
//6. 接入方服务端获取认证状态和认证资料(注:客户端无线认证SDK回调中也会携带认证状态, 但建议以服务端调接口获取的为准进行业务上的判断和处理)。
// 查询认证结果。
DescribeVerifyResultRequest verifyResultRequest = new DescribeVerifyResultRequest();
// 需要传入以下参数。
verifyResultRequest.setRegionId("cn-hangzhou");
verifyResultRequest.setSysProtocol(ProtocolType.HTTPS);
verifyResultRequest.setBizId("调用DescribeVerifyToken时传入的认证ID");
verifyResultRequest.setBizType("调用DescribeVerifyToken时传入的业务场景");

FVBioOnly认证方案请求参数示例

//1. 接入方服务端发起认证请求,获得认证Token。
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
// 需要传入以下参数。
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);
request.setBizId("认证ID, 由接入方指定, 发起不同的认证任务需要更换不同的认证ID");
request.setBizType("实人认证控制台上创建场景时对应的场景标识"); 
request.setFaceRetainedImageUrl("公网可访问的图片HTTP或者HTTPS链接");


//2. 接入方服务端将Token传递给接入方无线客户端。
//3. 接入方无线客户端用Token调起无线认证SDK。
//4. 用户按照由无线认证SDK组织的认证流程页面的指引,提交认证资料。
//5. 认证流程结束退出无线认证SDK,进入客户端回调函数。
//6. 接入方服务端获取认证状态和认证资料(注:客户端无线认证SDK回调中也会携带认证状态, 但建议以服务端调接口获取的为准进行业务上的判断和处理)。
// 查询认证结果。
DescribeVerifyResultRequest verifyResultRequest = new DescribeVerifyResultRequest();
// 需要传入以下参数。
verifyResultRequest.setRegionId("cn-hangzhou");
verifyResultRequest.setSysProtocol(ProtocolType.HTTPS);
verifyResultRequest.setBizId("调用DescribeVerifyToken时传入的认证ID");
verifyResultRequest.setBizType("调用DescribeVerifyToken时传入的业务场景");

RPMin认证方案请求参数示例

RPMin认证方案的人脸照片入参,支持公网可访问的HTTP和HTTPS链接,也支持接入方使用实人认证提供的SDK将Base64的图片上传到实人认证OSS Bucket后生成HTTPS链接。具体操作,请参见图片上传到OSS Bucket的Java SDK调用示例

// 若接入方的人脸图片是本地资源,则可以使用实人认证提供的上传SDK将图片直传到实人认证OSS Bucket并获取到图片地址。
CloudAuthClientUploader uploader = CloudAuthClientUploader.getClentUploader(client); // 获取上传OSS的实例。
String faceImageUrl = uploader.uploadBase64("待上传的base64图片资源"); // 上传OSS并获取图片链接。

// 接入方服务端提交认证。
VerifyMaterialRequest request = new VerifyMaterialRequest();
// 需要传入以下参数。
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);
request.setBizId("认证ID, 由接入方指定, 发起不同的认证任务需要更换不同的认证ID");
request.setBizType("实人认证控制台上创建场景时对应的场景标识"); 
request.setName("用户正确的姓名");
request.setIdCardNumber("用户正确的身份证号");
request.setFaceImageUrl(faceImageUrl); // faceImageUrl可以是通过直传OSS获取到的链接,也可以是接入方公网可访问的人脸图片链接,支持HTTP和HTTPS。

人脸比对验证请求参数示例

//接入方服务端调用人脸比对。
CompareFacesRequest request = new CompareFacesRequest();
//具体传参。
request.setRegionId("cn-hangzhou");
request.setMethod(MethodType.POST);
//传入图片资料,请控制单张图片大小在2 MB内,避免拉取超时。
request.setSourceImageType("FacePic");
request.setSourceImageValue("base64://iVBORw0KGgoA..."); //Base64方式上传图片, 格式为"base64://图片Base64字符串", 以"base64://"开头且图片Base64字符串去掉头部描述(如"data:image/png;base64,"), 并注意控制接口请求的Body在8 MB以内。
request.setTargetImageType("FacePic"); //若为身份证芯片照则传"IDPic"。
request.setTargetImageValue("http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg"); //HTTP方式上传图片, 此HTTP地址须可公网访问,不支持HTTPS。

CompareFacesResponse response = client.getAcsResponse(request);

离线人脸识别SDK下载请求参数示例

try {
    //创建离线人脸识别SDK。
    CreateVerifySDKRequest createRequest = new CreateVerifySDKRequest();
    //具体传参。
    createRequest.setRegionId("cn-hangzhou");
    createRequest.setAppUrl("https://app"); //App的可访问地址。

    CreateVerifySDKResponse createResponse = client.getAcsResponse(createRequest);
    String taskId = createResponse.getTaskId(); //获取生成SDK任务的TaskId。
    String sdkUrl = null;
    do {
        //使用TaskId轮询结果,一般生成可以在1分钟内完成。
        Thread.sleep(TimeUnit.SECONDS.toMillis(15));

        DescribeVerifySDKRequest request = new DescribeVerifySDKRequest();

        //具体传参。
        request.setTaskId(taskId);

        DescribeVerifySDKResponse describeVerifySDKResponse = client.getAcsResponse(request);
        sdkUrl = describeVerifySDKResponse.getSdkUrl();
    } while (sdkUrl == null || sdkUrl.isEmpty());
    //sdkUrl为生成的sdk可访问链接,下载后进行集成。
} catch (ClientException e) {
    //生成异常。
} catch (InterruptedException e) {

}

离线人脸识别SDK获取授权key请求参数示例

//发起获取授权KEY的请求。
CreateAuthKeyRequest request = new CreateAuthKeyRequest();
//具体传参。
request.setRegionId("cn-hangzhou");
request.setTest(Boolean.FALSE); //测试标识。
request.setAuthYears(1);//授权年限。
request.setBizType("biz type"); //业务类型。
request.setUserDeviceId("device id"); //可自定义的用户设备ID。

CreateAuthKeyResponse createAuthKeyResponse = client.getAcsResponse(request);
String authKey = createAuthKeyResponse.getAuthKey();
//获取到授权KEY调用离线人脸识别SDK的initWithToken进行设备激活。

您可以在OpenAPI 门户直接运行对应接口。运行成功后,OpenAPI 门户可以自动生成SDK代码示例。