本文介绍了如何使用阿里云实人认证服务的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:从以下方式中单击选择一种方式。

安装说明

方法1:使用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.1</version>
</dependency>
说明 version的值以SDK获取地址中的最新版本为准。

方法2:在集成开发环境(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认证方案示例代码

DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-hangzhou",    // 固定cn-hangzhou
                    "AccessKey",      // 您的Access Key ID
                    "AccessSecret");  // 您的Access Key Secret
IAcsClient client = new DefaultAcsClient(profile);

//1. 接入方服务端发起认证请求,获得认证token,接口文档:https://help.aliyun.com/document_detail/127470.html
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);

request.setBizId("认证ID, 由接入方指定, 发起不同的认证任务需要更换不同的认证ID");
request.setBizType("实人认证控制台上创建场景时对应的场景标识"); //创建方法请参见https://help.aliyun.com/document_detail/127885.html

DescribeVerifyTokenResponse response = client.getAcsResponse(request);
String verifyToken = response.getVerifyToken();

//2. 接入方服务端将token传递给接入方无线客户端
//3. 接入方无线客户端用token调起无线认证SDK
//4. 用户按照由无线认证SDK组织的认证流程页面的指引,提交认证资料
//5. 认证流程结束退出无线认证SDK,进入客户端回调函数
//6. 接入方服务端获取认证状态和认证资料(注:客户端无线认证SDK回调中也会携带认证状态, 但建议以服务端调接口获取的为准进行业务上的判断和处理)
//RPBasic、RPManual方案查询认证结果接口文档:https://help.aliyun.com/document_detail/127469.html
//FDBioOnly方案查询认证结果接口文档:https://help.aliyun.com/document_detail/127731.html
DescribeVerifyResultRequest verifyResultRequest = new DescribeVerifyResultRequest();
verifyResultRequest.setRegionId("cn-hangzhou");
verifyResultRequest.setSysProtocol(ProtocolType.HTTPS);

verifyResultRequest.setBizId("调用DescribeVerifyToken时传入的bizId");
verifyResultRequest.setBizType("调用DescribeVerifyToken时传入的bizType");
DescribeVerifyResultResponse verifyResultResponse = client.getAcsResponse(verifyResultRequest);

//常见问题:https://help.aliyun.com/document_detail/127993.html

RPBioID、RPBioOnly认证方案示例代码

DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-hangzhou",    // 固定cn-hangzhou
                    "AccessKey",      // 您的Access Key ID
                    "AccessSecret");  // 您的Access Key Secret
IAcsClient client = new DefaultAcsClient(profile);

//1. 接入方服务端发起认证请求,获得认证token,接口文档:https://help.aliyun.com/document_detail/127470.html
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);

request.setBizId("认证ID, 由接入方指定, 发起不同的认证任务需要更换不同的认证ID");
request.setBizType("实人认证控制台上创建场景时对应的场景标识"); //创建方法请参见https://help.aliyun.com/document_detail/127885.html
request.setName("用户正确的姓名");
request.setIdCardNumber("用户正确的身份证号");

DescribeVerifyTokenResponse response = client.getAcsResponse(request);
String verifyToken = response.getVerifyToken();

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

verifyResultRequest.setBizId("调用DescribeVerifyToken时传入的bizId");
verifyResultRequest.setBizType("调用DescribeVerifyToken时传入的bizType");
DescribeVerifyResultResponse verifyResultResponse = client.getAcsResponse(verifyResultRequest);

//常见问题:https://help.aliyun.com/document_detail/127993.html

FVBioOnly认证方案示例代码

DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-hangzhou",    // 固定cn-hangzhou
                    "AccessKey",      // 您的Access Key ID
                    "AccessSecret");  // 您的Access Key Secret
IAcsClient client = new DefaultAcsClient(profile);

//1. 接入方服务端发起认证请求,获得认证token,接口文档:https://help.aliyun.com/document_detail/127470.html
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);

request.setBizId("认证ID, 由接入方指定, 发起不同的认证任务需要更换不同的认证ID ");
request.setBizType("实人认证控制台上创建场景时对应的场景标识"); //创建方法请参见https://help.aliyun.com/document_detail/127885.html
request.setFaceRetainedImageUrl("公网可访问的图片http/https链接");

DescribeVerifyTokenResponse response = client.getAcsResponse(request);
String verifyToken = response.getVerifyToken();

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

verifyResultRequest.setBizId("调用DescribeVerifyToken时传入的bizId");
verifyResultRequest.setBizType("调用DescribeVerifyToken时传入的bizType");
DescribeVerifyResultResponse verifyResultResponse = client.getAcsResponse(verifyResultRequest);

//常见问题:https://help.aliyun.com/document_detail/127993.html

RPMin认证方案示例代码

RPMin认证方案的人脸照片入参,支持公网可访问的HTTP/HTTPS链接,也支持接入方使用实人认证提供的SDK将base64的图片上传到实人认证OSS Bucket后生成https链接。

说明 如果您的业务需要使用上传SDK,请提交工单联系我们获取。
DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-hangzhou",    // 固定cn-hangzhou
                    "AccessKey",      // 您的Access Key ID
                    "AccessSecret");  // 您的Access Key Secret
IAcsClient client = new DefaultAcsClient(profile);

//若接入方的人脸图片是本地资源,则可以使用实人认证提供的上传SDK将图片直传到实人认证OSS Bucket并获取到图片地址。如果您的业务需要使用上传SDK,请提交工单联系我们获取。
CloudAuthClientUploader uploader = CloudAuthClientUploader.getClentUploader(client); // 获取上传oss的实例
String faceImageUrl = uploader.uploadBase64("待上传的base64图片资源"); // 上传oss并获取图片链接

//接入方服务端提交认证,接口文档:https://help.aliyun.com/document_detail/127472.html
VerifyMaterialRequest request = new VerifyMaterialRequest();
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);

request.setBizId("认证ID, 由接入方指定, 发起不同的认证任务需要更换不同的认证ID");
request.setBizType("实人认证控制台上创建场景时对应的场景标识"); //创建方法请参见https://help.aliyun.com/document_detail/127885.html

request.setFaceImageUrl(faceImageUrl); // faceImageUrl可以是通过直传OSS获取到的链接,也可以是接入方公网可访问的人脸图片链接,支持http/https
request.setName("用户正确的姓名");
request.setIdCardNumber("用户正确的身份证号");

VerifyMaterialResponse verifyMaterialResponse = client.getAcsResponse(request);
int statusCode = verifyMaterialResponse.getVerifyStatus(); //同步返回认证状态和相应材料

//常见问题:https://help.aliyun.com/document_detail/127993.html

人脸比对验证示例

//创建DefaultAcsClient实例并初始化
DefaultProfile profile = DefaultProfile.getProfile(
        "cn-hangzhou",             //固定cn-hangzhou
        "YourAccessKeyID",         //您的Access Key ID
        "YourAccessKeySecret");    //您的Access Key Secret
IAcsClient client = new DefaultAcsClient(profile);

//接入方服务端调用人脸比对,接口文档:https://help.aliyun.com/document_detail/127684.html
CompareFacesRequest request = new CompareFacesRequest();
request.setRegionId("cn-hangzhou");
request.setMethod(MethodType.POST);

//传入图片资料,请控制单张图片大小在 2M 内,避免拉取超时
request.setSourceImageType("FacePic");
request.setSourceImageValue("base64://iVBORw0KGgoA..."); //base64方式上传图片, 格式为"base64://图片base64字符串", 以"base64://"开头且图片base64字符串去掉头部描述(如"data:image/png;base64,"), 并注意控制接口请求的Body在8M以内
request.setTargetImageType("FacePic"); //若为身份证芯片照则传"IDPic"
request.setTargetImageValue("http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg"); //http方式上传图片, 此http地址须可公网访问,不支持https
//发起请求并处理异常
try {
    CompareFacesResponse response = client.getAcsResponse(request);
    //后续业务处理
} catch (ServerException e) {
    e.printStackTrace();
} catch (ClientException e) {
    e.printStackTrace();
}

//常见问题:https://help.aliyun.com/document_detail/127993.html

离线人脸识别SDK下载示例

DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-hangzhou", // 固定cn-hangzhou
                    "your access key id", // 您的Access Key ID
                    "your access secret"); // 您的Access Key Secret
client = new DefaultAcsClient(profile);

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

}

离线人脸识别SDK获取授权key示例

DefaultProfile profile = DefaultProfile.getProfile(
                    "cn-hangzhou", // 固定cn-hangzhou
                    "your access key id", // 您的Access Key ID
                    "your access secret"); // 您的Access Key Secret
client = new DefaultAcsClient(profile);

//发起获取授权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进行设备激活