Java SDK
本文介紹了如何使用阿里云實(shí)人認(rèn)證服務(wù)的Java SDK,具體包括獲取和安裝SDK的方法以及SDK代碼示例。
獲取地址
您需要引入兩個(gè)SDK,包括aliyun-java-sdk-core(阿里云核心SDK)和aliyun-java-sdk-cloudauth(實(shí)人認(rèn)證SDK)。每個(gè)SDK都提供了Maven Repository、Central Repository、GitHub的獲取方式,您可以選擇合適的方式獲取SDK。
根據(jù)實(shí)際情況,選擇合適的方式獲取aliyun-java-sdk-core:
說明如果您使用的是aliyun-java-sdk-core 4.0.0~4.0.2版本,那么在調(diào)用HTTPS接口時(shí)需要在
profile
中添加profile.getHttpClientConfig().setIgnoreSSLCerts(true);
。根據(jù)實(shí)際情況,選擇合適的方式獲取aliyun-java-sdk-cloudauth:
安裝說明
方式一:使用Maven(推薦)
如果您使用Maven管理Java項(xiàng)目,可以通過在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獲取地址中的最新版本為準(zhǔn)。
方式二:在集成開發(fā)環(huán)境(IDE)中導(dǎo)入jar文件
Eclipse安裝
將下載的aliyun-java-sdk-xxx.jar文件復(fù)制到您的項(xiàng)目文件夾中。
在Eclipse中打開您的項(xiàng)目,右鍵單擊該項(xiàng)目,單擊Properties。
在彈出的對(duì)話框中,單擊
添加下載的JAR文件。單擊Apply and Close。
IntelliJ 安裝
將下載的aliyun-java-sdk-xxx.jar文件復(fù)制到您的項(xiàng)目文件夾中。
在IntelliJ中打開您的項(xiàng)目,在菜單欄中單擊
。單擊Apply,然后單擊OK。
RPBasic、RPManual、FDBioOnly認(rèn)證方案請(qǐng)求參數(shù)示例
//1. 接入方服務(wù)端發(fā)起認(rèn)證請(qǐng)求,獲得認(rèn)證Token。
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
// 需要傳入以下參數(shù)。
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);
request.setBizId("認(rèn)證ID, 由接入方指定, 發(fā)起不同的認(rèn)證任務(wù)需要更換不同的認(rèn)證ID");
request.setBizType("實(shí)人認(rèn)證控制臺(tái)上創(chuàng)建場(chǎng)景時(shí)對(duì)應(yīng)的場(chǎng)景標(biāo)識(shí)");
//2. 接入方服務(wù)端將Token傳遞給接入方無線客戶端。
//3. 接入方無線客戶端用Token調(diào)起無線認(rèn)證SDK。
//4. 用戶按照由無線認(rèn)證SDK組織的認(rèn)證流程頁面的指引,提交認(rèn)證資料。
//5. 認(rèn)證流程結(jié)束退出無線認(rèn)證SDK,進(jìn)入客戶端回調(diào)函數(shù)。
//6. 接入方服務(wù)端獲取認(rèn)證狀態(tài)和認(rèn)證資料(注:客戶端無線認(rèn)證SDK回調(diào)中也會(huì)攜帶認(rèn)證狀態(tài), 但建議以服務(wù)端調(diào)接口獲取的為準(zhǔn)進(jìn)行業(yè)務(wù)上的判斷和處理)。
// 查詢認(rèn)證結(jié)果。
DescribeVerifyResultRequest verifyResultRequest = new DescribeVerifyResultRequest();
// 需要傳入以下參數(shù)。
verifyResultRequest.setRegionId("cn-hangzhou");
verifyResultRequest.setSysProtocol(ProtocolType.HTTPS);
verifyResultRequest.setBizId("調(diào)用DescribeVerifyToken時(shí)傳入的認(rèn)證ID");
verifyResultRequest.setBizType("調(diào)用DescribeVerifyToken時(shí)傳入的業(yè)務(wù)場(chǎng)景");
RPBioID、RPBioOnly認(rèn)證方案請(qǐng)求參數(shù)示例
//1. 接入方服務(wù)端發(fā)起認(rèn)證請(qǐng)求,獲得認(rèn)證Token。
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
// 需要傳入以下參數(shù)。
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);
request.setBizId("認(rèn)證ID, 由接入方指定, 發(fā)起不同的認(rèn)證任務(wù)需要更換不同的認(rèn)證ID");
request.setBizType("實(shí)人認(rèn)證控制臺(tái)上創(chuàng)建場(chǎng)景時(shí)對(duì)應(yīng)的場(chǎng)景標(biāo)識(shí)");
request.setName("用戶正確的姓名");
request.setIdCardNumber("用戶正確的身份證號(hào)");
//2. 接入方服務(wù)端將Token傳遞給接入方無線客戶端。
//3. 接入方無線客戶端用Token調(diào)起無線認(rèn)證SDK。
//4. 用戶按照由無線認(rèn)證SDK組織的認(rèn)證流程頁面的指引,提交認(rèn)證資料。
//5. 認(rèn)證流程結(jié)束退出無線認(rèn)證SDK,進(jìn)入客戶端回調(diào)函數(shù)。
//6. 接入方服務(wù)端獲取認(rèn)證狀態(tài)和認(rèn)證資料(注:客戶端無線認(rèn)證SDK回調(diào)中也會(huì)攜帶認(rèn)證狀態(tài), 但建議以服務(wù)端調(diào)接口獲取的為準(zhǔn)進(jìn)行業(yè)務(wù)上的判斷和處理)。
// 查詢認(rèn)證結(jié)果。
DescribeVerifyResultRequest verifyResultRequest = new DescribeVerifyResultRequest();
// 需要傳入以下參數(shù)。
verifyResultRequest.setRegionId("cn-hangzhou");
verifyResultRequest.setSysProtocol(ProtocolType.HTTPS);
verifyResultRequest.setBizId("調(diào)用DescribeVerifyToken時(shí)傳入的認(rèn)證ID");
verifyResultRequest.setBizType("調(diào)用DescribeVerifyToken時(shí)傳入的業(yè)務(wù)場(chǎng)景");
FVBioOnly認(rèn)證方案請(qǐng)求參數(shù)示例
//1. 接入方服務(wù)端發(fā)起認(rèn)證請(qǐng)求,獲得認(rèn)證Token。
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
// 需要傳入以下參數(shù)。
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);
request.setBizId("認(rèn)證ID, 由接入方指定, 發(fā)起不同的認(rèn)證任務(wù)需要更換不同的認(rèn)證ID");
request.setBizType("實(shí)人認(rèn)證控制臺(tái)上創(chuàng)建場(chǎng)景時(shí)對(duì)應(yīng)的場(chǎng)景標(biāo)識(shí)");
request.setFaceRetainedImageUrl("公網(wǎng)可訪問的圖片HTTP或者HTTPS鏈接");
//2. 接入方服務(wù)端將Token傳遞給接入方無線客戶端。
//3. 接入方無線客戶端用Token調(diào)起無線認(rèn)證SDK。
//4. 用戶按照由無線認(rèn)證SDK組織的認(rèn)證流程頁面的指引,提交認(rèn)證資料。
//5. 認(rèn)證流程結(jié)束退出無線認(rèn)證SDK,進(jìn)入客戶端回調(diào)函數(shù)。
//6. 接入方服務(wù)端獲取認(rèn)證狀態(tài)和認(rèn)證資料(注:客戶端無線認(rèn)證SDK回調(diào)中也會(huì)攜帶認(rèn)證狀態(tài), 但建議以服務(wù)端調(diào)接口獲取的為準(zhǔn)進(jìn)行業(yè)務(wù)上的判斷和處理)。
// 查詢認(rèn)證結(jié)果。
DescribeVerifyResultRequest verifyResultRequest = new DescribeVerifyResultRequest();
// 需要傳入以下參數(shù)。
verifyResultRequest.setRegionId("cn-hangzhou");
verifyResultRequest.setSysProtocol(ProtocolType.HTTPS);
verifyResultRequest.setBizId("調(diào)用DescribeVerifyToken時(shí)傳入的認(rèn)證ID");
verifyResultRequest.setBizType("調(diào)用DescribeVerifyToken時(shí)傳入的業(yè)務(wù)場(chǎng)景");
RPMin認(rèn)證方案請(qǐng)求參數(shù)示例
RPMin認(rèn)證方案的人臉照片入?yún)ⅲС止W(wǎng)可訪問的HTTP和HTTPS鏈接,也支持接入方使用實(shí)人認(rèn)證提供的SDK將Base64的圖片上傳到實(shí)人認(rèn)證OSS Bucket后生成HTTPS鏈接。具體操作,請(qǐng)參見圖片上傳到OSS Bucket的Java SDK調(diào)用示例。
// 若接入方的人臉圖片是本地資源,則可以使用實(shí)人認(rèn)證提供的上傳SDK將圖片直傳到實(shí)人認(rèn)證OSS Bucket并獲取到圖片地址。
CloudAuthClientUploader uploader = CloudAuthClientUploader.getClentUploader(client); // 獲取上傳OSS的實(shí)例。
String faceImageUrl = uploader.uploadBase64("待上傳的base64圖片資源"); // 上傳OSS并獲取圖片鏈接。
// 接入方服務(wù)端提交認(rèn)證。
VerifyMaterialRequest request = new VerifyMaterialRequest();
// 需要傳入以下參數(shù)。
request.setRegionId("cn-hangzhou");
request.setSysProtocol(ProtocolType.HTTPS);
request.setBizId("認(rèn)證ID, 由接入方指定, 發(fā)起不同的認(rèn)證任務(wù)需要更換不同的認(rèn)證ID");
request.setBizType("實(shí)人認(rèn)證控制臺(tái)上創(chuàng)建場(chǎng)景時(shí)對(duì)應(yīng)的場(chǎng)景標(biāo)識(shí)");
request.setName("用戶正確的姓名");
request.setIdCardNumber("用戶正確的身份證號(hào)");
request.setFaceImageUrl(faceImageUrl); // faceImageUrl可以是通過直傳OSS獲取到的鏈接,也可以是接入方公網(wǎng)可訪問的人臉圖片鏈接,支持HTTP和HTTPS。
人臉比對(duì)驗(yàn)證請(qǐng)求參數(shù)示例
//接入方服務(wù)端調(diào)用人臉比對(duì)。
CompareFacesRequest request = new CompareFacesRequest();
//具體傳參。
request.setRegionId("cn-hangzhou");
request.setMethod(MethodType.POST);
//傳入圖片資料,請(qǐng)控制單張圖片大小在2 MB內(nèi),避免拉取超時(shí)。
request.setSourceImageType("FacePic");
request.setSourceImageValue("base64://iVBORw0KGgoA..."); //Base64方式上傳圖片, 格式為"base64://圖片Base64字符串", 以"base64://"開頭且圖片Base64字符串去掉頭部描述(如"data:image/png;base64,"), 并注意控制接口請(qǐng)求的Body在8 MB以內(nèi)。
request.setTargetImageType("FacePic"); //若為身份證芯片照則傳"IDPic"。
request.setTargetImageValue("http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg"); //HTTP方式上傳圖片, 此HTTP地址須可公網(wǎng)訪問,不支持HTTPS。
CompareFacesResponse response = client.getAcsResponse(request);
離線人臉識(shí)別SDK下載請(qǐng)求參數(shù)示例
try {
//創(chuàng)建離線人臉識(shí)別SDK。
CreateVerifySDKRequest createRequest = new CreateVerifySDKRequest();
//具體傳參。
createRequest.setRegionId("cn-hangzhou");
createRequest.setAppUrl("https://app"); //App的可訪問地址。
CreateVerifySDKResponse createResponse = client.getAcsResponse(createRequest);
String taskId = createResponse.getTaskId(); //獲取生成SDK任務(wù)的TaskId。
String sdkUrl = null;
do {
//使用TaskId輪詢結(jié)果,一般生成可以在1分鐘內(nèi)完成。
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可訪問鏈接,下載后進(jìn)行集成。
} catch (ClientException e) {
//生成異常。
} catch (InterruptedException e) {
}
離線人臉識(shí)別SDK獲取授權(quán)key請(qǐng)求參數(shù)示例
//發(fā)起獲取授權(quán)KEY的請(qǐng)求。
CreateAuthKeyRequest request = new CreateAuthKeyRequest();
//具體傳參。
request.setRegionId("cn-hangzhou");
request.setTest(Boolean.FALSE); //測(cè)試標(biāo)識(shí)。
request.setAuthYears(1);//授權(quán)年限。
request.setBizType("biz type"); //業(yè)務(wù)類型。
request.setUserDeviceId("device id"); //可自定義的用戶設(shè)備ID。
CreateAuthKeyResponse createAuthKeyResponse = client.getAcsResponse(request);
String authKey = createAuthKeyResponse.getAuthKey();
//獲取到授權(quán)KEY調(diào)用離線人臉識(shí)別SDK的initWithToken進(jìn)行設(shè)備激活。
您可以在OpenAPI 門戶直接運(yùn)行對(duì)應(yīng)接口。運(yùn)行成功后,OpenAPI 門戶可以自動(dòng)生成SDK代碼示例。