本文介紹在金融級活體人臉比對方案純服務端接入場景下,如何下載和集成適合不同編程語言的SDK,并調用OpenAPI的示例流程。
服務端需要集成的OpenAPI
CompareFaceVerify-發(fā)起認證請求:通過純服務端接入實現(xiàn)實人認證。
在基于阿里云OpenAPI進行二次開發(fā)前,您可以通過OpenAPI門戶提供的網頁或命令行方式,預先驗證OpenAPI請求方式,入參和查看OpenAPI的返回結果。當調用出錯時,OpenAPI 門戶會提示您如何解決,幫助您快速了解OpenAPI功能及使用方法。
步驟一:開通服務
在使用金融級實人認證服務之前,您需要開通服務。具體操作,請參見開通金融級實人認證服務。
步驟二:創(chuàng)建RAM用戶并授權
在集成SDK前,您需要創(chuàng)建一個用戶調用SDK的用戶身份,獲取身份關聯(lián)的OpenAPI訪問憑據(jù),并授予訪問云上資源的訪問權限。如何創(chuàng)建和授權RAM用戶,以及如何生成用于調用服務的AccessKey,請參見授權RAM用戶訪問服務。
步驟三:添加認證場景
認證場景指您的用戶使用金融級實人認證服務完成用戶實人認證的不同場景,例如,登錄、支付等。您可以添加一個或多個場景,并為不同的場景配置不同的認證方案。調用InitFaceVerify發(fā)起認證請求時,需要傳輸認證場景ID。如何添加認證場景并獲取認證場景ID, 請參見添加認證場景。
在添加認證場景時,您可以授權阿里云訪問指定OSS存儲空間,用于存儲認證的資料圖片。具體操作,請參見授權金融級實人認證訪問OSS存儲空間。
步驟四:集成SDK并編輯寫代碼
服務接入點
目前支持的接入地域如下表所示。
建議您參考本文示例代碼,配置主備地域Endpoint。在主Endpoint發(fā)生故障時可以自動切換到備用Endpoint,保證系統(tǒng)的持續(xù)可用性。
地域 | 服務地址 | VPC地址 | 全局接入地址 |
華東2(上海) | IPv4:cloudauth.cn-shanghai.aliyuncs.com | cloudauth-vpc.cn-shanghai.aliyuncs.com |
|
IPv6:cloudauth-dualstack.aliyuncs.com | |||
華北2(北京) | IPv4:cloudauth.cn-beijing.aliyuncs.com | cloudauth-vpc.cn-beijing.aliyuncs.com | |
IPv6:cloudauth-dualstack.cn-beijing.aliyuncs.com |
SDK安裝與源碼下載
您可根據(jù)業(yè)務實際的技術選型,選擇合適的SDK語言進行集成。
支持語言 | Github源碼地址 | SDK下載地址 |
Java | ||
Python | ||
Typescript | ||
Go | ||
PHP | ||
C# | ||
C++ |
編寫代碼
下面以Java語言為例介紹(要求JDK 1.8及以上版本)。
在pom.xml中添加如下依賴,即可在Maven工程中使用SDK。
Java SDK依賴。以下依賴版本僅供參考,建議在實際配置時獲取最新依賴版本。
<dependency> <groupId>com.aliyun</groupId> <artifactId>cloudauth20190307</artifactId> <version>2.1.1</version> </dependency>
身份驗證依賴。請查看ChangeLog.txt獲取所有已發(fā)布的版本列表(建議使用最新的版本)。
<dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>LATEST</version> </dependency>
說明本示例通過阿里云Credentials工具從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。如何配置環(huán)境變量,請參見在Linux、macOS和Windows系統(tǒng)配置環(huán)境變量。
示例代碼。
import com.aliyun.cloudauth20190307.Client; import com.aliyun.cloudauth20190307.models.CompareFaceVerifyRequest; import com.aliyun.cloudauth20190307.models.CompareFaceVerifyResponse; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import java.util.Arrays; import java.util.List; public class CompareFaceVerify { public static void main(String[] args) { // 通過以下代碼創(chuàng)建API請求并設置參數(shù)。 CompareFaceVerifyRequest request = new CompareFaceVerifyRequest(); // 請輸入場景ID+L。 request.setSceneId(0L); request.setOuterOrderNo("商戶請求的唯一標識"); request.setProductCode("PV_FC"); // 請在以下四種傳入人臉照片方式中,選擇一種。 // 1.照片Base64編碼。 // 2.照片OSS bucket名和文件名。 // 3.照片OSS的URL地址。 // 4.已經實人認證通過的CertifyId。 // 方式一:照片Base64。 request.setSourceFaceContrastPicture("人臉照片Base64編碼"); // 方式二:照片OSS bucket名和文件名。 //request.setSourceOssBucketName("cn-shanghai-aliyun-cloudauth-xxxxx"); //request.setSourceOssObjectName("verify/xxxxx/xxxxxx.jpeg"); // 方式三:照片OSS的URL地址,公網可訪問。 //request.setSourceFaceContrastPictureUrl("https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg") // 方式四:已經實人認證通過的CertifyId。 //request.setSourceCertifyId("0bfa7c493f850e5178b9f8613634c9xx"); // 請在以下四種傳入底庫人臉照片方式中,選擇一種 // 1.照片Base64編碼。 // 2.照片OSS bucket名和文件名。 // 3.照片OSS的URL地址。 // 4.已經實人認證通過的CertifyId。 // 方式一:照片Base64。 request.setTargetFaceContrastPicture("底庫人臉照片Base64編碼"); // 方式二:照片OSS bucket名和文件名。 //request.setTargetOssBucketName("cn-shanghai-aliyun-cloudauth-xxxxx"); //request.setTargetOssObjectName("verify/xxxxx/xxxxxx.jpeg"); // 方式三:照片OSS的URL地址,公網可訪問。 //request.setTargetFaceContrastPictureUrl("https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg") // 方式四:已經實人認證通過的CertifyId。 //request.setTargetCertifyId("0bfa7c493f850e5178b9f8613634c9xx"); // 推薦,支持服務路由。 CompareFaceVerifyResponse response = compareFaceVerifyAutoRoute(request); // 不支持服務自動路由。 //CompareFaceVerifyResponse response = compareFaceVerify("cloudauth.cn-shanghai.aliyuncs.com", request); System.out.println(response.getBody().getRequestId()); System.out.println(response.getBody().getCode()); System.out.println(response.getBody().getMessage()); System.out.println(response.getBody().getResultObject() == null ? null : response.getBody().getResultObject().getPassed()); System.out.println(response.getBody().getResultObject() == null ? null : response.getBody().getResultObject().getVerifyScore()); } private static CompareFaceVerifyResponse compareFaceVerifyAutoRoute(CompareFaceVerifyRequest request) { // 第一個為主區(qū)域Endpoint,第二個為備區(qū)域Endpoint。 List<String> endpoints = Arrays.asList("cloudauth.cn-shanghai.aliyuncs.com", "cloudauth.cn-beijing.aliyuncs.com"); CompareFaceVerifyResponse lastResponse = null; for (int i=0; i<endpoints.size(); i++) { try { CompareFaceVerifyResponse response = compareFaceVerify(endpoints.get(i), request); lastResponse = response; // 服務端錯誤,切換到下個區(qū)域調用。 if(response != null){ if(500 == response.getStatusCode()){ continue; } if(response.getBody() != null){ if("500".equals(response.getBody().getCode())){ continue; } } } return response; } catch (Exception e) { e.printStackTrace(); if(i == endpoints.size()-1){ throw new RuntimeException(e); } } } return lastResponse; } private static CompareFaceVerifyResponse compareFaceVerify(String endpoint, CompareFaceVerifyRequest request) throws Exception { // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 // 本示例通過阿里云Credentials工具從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。 com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(); Config config = new Config(); config.setCredential(credentialClient); config.setEndpoint(endpoint); // 設置https代理。 //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx"); // 設置http代理。 //config.setHttpProxy("http://xx.xx.xx.xx:xxxx"); Client client = new Client(config); // 創(chuàng)建RuntimeObject實例并設置運行參數(shù)。 RuntimeOptions runtime = new RuntimeOptions(); runtime.readTimeout = 10000; runtime.connectTimeout = 10000; return client.compareFaceVerifyWithOptions(request, runtime); } }
其他語言調用示例
PHP
<?php
namespace AlibabaCloud\SDK\Sample\Verify\Compare;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\SDK\Cloudauth\V20190307\Cloudauth;
use AlibabaCloud\SDK\Cloudauth\V20190307\Models\CompareFaceVerifyRequest;
use AlibabaCloud\SDK\Cloudauth\V20190307\Models\CompareFaceVerifyResponse;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Exception;
class CompareFaceVerify {
/**
* createClient
* @param string $endpoint
* @return Cloudauth
*/
public static function createClient(string $endpoint): Cloudauth
{
// 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
// 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
// 本示例通過阿里云Credentials工具從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。如何配置環(huán)境變量,請參見 http://bestwisewords.com/document_detail/311677.html。
$credential = new Credential([]);
$config = new Config([
// 使用credential配置憑證
"credential" => $credential,
// 設置HTTP代理。
// "httpProxy" => "<http://xx.xx.xx.xx:xxxx>",
// 設置HTTPS代理
// "httpsProxy" => "<https://xx.xx.xx.xx:xxxx>",
"endpoint" => $endpoint
]);
return new Cloudauth($config);
}
/**
* main
* @return void
*/
public static function main(){
$request = new CompareFaceVerifyRequest([
// 請輸入場景ID。
"sceneId" => 0,
"outerOrderNo" => "<商戶請求的唯一標識>",
// 要接入的認證方案。
"productCode" => "<PV_FC>",
// 請在以下四種傳入人臉照片方式中,選擇一種。
// 1.照片Base64編碼。
// 2.照片OSS Bucket名和文件名。
// 3.照片OSS的URL地址。
// 4.已經實人認證通過的CertifyId。
// 方式一:照片Base64。
// "sourceFaceContrastPicture" => "<人臉照片Base64編碼>",
// 方式二:照片OSS Bucket名和文件名。
// "sourceOssBucketName" => "<cn-shanghai-aliyun-cloudauth-xxxxx>",
// "sourceOssObjectName" => "<verify/xxxxx/xxxxxx.jpeg>",
// 方式三:照片OSS的URL地址,公網可訪問。
"sourceFaceContrastPictureUrl" => "<https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg>",
// 方式四:已經實人認證通過的CertifyId。
// "sourceCertifyId" => "<0bfa7c493f850e5178b9f8613634c9xx>",
// 請在以下四種傳入底庫人臉照片方式中,選擇一種。
// 1.照片Base64編碼。
// 2.照片OSS Bucket名和文件名。
// 3.照片OSS的URL地址。
// 4.已經實人認證通過的CertifyId。
// 方式一:照片Base64。
// "targetFaceContrastPicture" => "<人臉照片Base64編碼>",
// 方式二:照片OSS Bucket名和文件名。
// "targetOssBucketName" => "<cn-shanghai-aliyun-cloudauth-xxxxx>",
// "targetOssObjectName" => "<verify/xxxxx/xxxxxx.jpeg>",
// 方式三:照片OSS的URL地址,公網可訪問。
"targetFaceContrastPictureUrl" => "<https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg>",
// 方式四:已經實人認證通過的CertifyId。
// "targetCertifyId" => "<0bfa7c493f850e5178b9f8613634c9xx>",
]);
// 推薦,支持服務路由。
$response = self::compareFaceVerifyAutoRoute($request);
// 不支持服務自動路由。
// $response = self::compareFaceVerify("cloudauth.cn-shanghai.aliyuncs.com", $request);
var_dump($response->requestId);
var_dump($response->code);
var_dump($response->message);
var_dump($response->resultObject->verifyScore);
var_dump($response->resultObject->passed);
}
/**
* compareFaceVerifyAutoRoute
* @param CompareFaceVerifyRequest $request
* @return CompareFaceVerifyResponse|null
*/
public static function compareFaceVerifyAutoRoute(CompareFaceVerifyRequest $request): ?CompareFaceVerifyResponse
{
$endpoints = [
"cloudauth.cn-shanghai.aliyuncs.com",
"cloudauth.cn-beijing.aliyuncs.com"
];
foreach($endpoints as $endpoint){
try {
$response = self::compareFaceVerify($endpoint, $request);
if (Utils::equalNumber(500, $response->statusCode)) {
continue;
}
if(Utils::equalString("500", $response->body->code)){
continue;
}
return $response;
}
catch (Exception $err) {
var_dump($err -> getCode());
var_dump($err -> getMessage());
}
}
return null;
}
/**
* compareFaceVerify
* @param string $endpoint
* @param CompareFaceVerifyRequest $request
* @return CompareFaceVerifyResponse
*/
public static function compareFaceVerify(string $endpoint, CompareFaceVerifyRequest $request): CompareFaceVerifyResponse
{
$client = self::createClient($endpoint);
// 創(chuàng)建RuntimeObject實例并設置運行參數(shù)。
$runtime = new RuntimeOptions([]);
$runtime->readTimeout = 10000;
$runtime->connectTimeout = 10000;
return $client->compareFaceVerifyWithOptions($request, $runtime);
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
CompareFaceVerify::main();
Python
from alibabacloud_cloudauth20190307.client import Client as CloudauthClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_cloudauth20190307 import models as cloudauth_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_tea_util import models as util_models
from alibabacloud_credentials.client import Client as CredClient
class CompareFaceVerify:
def __init__(self):
pass
@staticmethod
def create_client(
endpoint: str,
) -> CloudauthClient:
# 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
# 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
# 本示例通過阿里云Credentials工具從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。
cred=CredClient()
config = open_api_models.Config(
credential=cred,
# 設置HTTP代理。
# http_proxy='http://xx.xx.xx.xx:xxxx',
# 設置HTTPS代理。
# https_proxy='https://username:password@xxx.xxx.xxx.xxx:9999',
endpoint=endpoint
)
return CloudauthClient(config)
@staticmethod
def main() -> None:
request = cloudauth_models.CompareFaceVerifyRequest(
# 請輸入場景ID。
scene_id=0,
outer_order_no='商戶請求的唯一標識',
product_code='PV_FC',
# 請在以下四種傳入人臉照片方式中,選擇一種。
# 1.照片Base64編碼。
# 2.照片OSS Bucket名和文件名。
# 3.照片OSS的URL地址。
# 4.已經實人認證通過的CertifyId。
# 方式一:照片Base64。
# source_face_contrast_picture='人臉照片Base64編碼',
# 方式二:照片OSS Bucket名和文件名。
# source_oss_bucket_name='cn-shanghai-aliyun-cloudauth-xxxxx',
# source_oss_object_name='verify/xxxxx/xxxxxx.jpeg',
# 方式三:照片OSS的URL地址,公網可訪問。
source_face_contrast_picture_url='https=//cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg',
# 方式四:已經實人認證通過的CertifyId。
# source_certify_id='0bfa7c493f850e5178b9f8613634c9xx',
# 請在以下四種傳入底庫人臉照片方式中,選擇一種:
# 1.照片Base64編碼。
# 2.照片OSS Bucket名和文件名。
# 3.照片OSS的URL地址。
# 4.已經實人認證通過的CertifyId。
# 方式一:照片Base64。
# target_face_contrast_picture='底庫人臉照片Base64編碼'
# 方式二:照片OSS Bucket名和文件名。
# target_oss_bucket_name='cn-shanghai-aliyun-cloudauth-xxxxx',
# target_oss_object_name='verify/xxxxx/xxxxxx.jpeg',
# 方式三:照片OSS的URL地址,公網可訪問。
target_face_contrast_picture_url='https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg',
# 方式四:已經實人認證通過的CertifyId。
# target_certify_id='0bfa7c493f850e5178b9f8613634c9xx'
)
response = CompareFaceVerify.compare_face_verify_auto_route(request)
# 不支持服務自動路由。
# response = CompareFaceVerify.compare_face_verify('cloudauth.cn-shanghai.aliyuncs.com', request)
print(response.body.request_id)
print(response.body.code)
print(response.body.message)
print(response.body.result_object.passed)
print(response.body.result_object.verify_score)
print(response.body.result_object.certify_id)
@staticmethod
def compare_face_verify_auto_route(
request: cloudauth_models.CompareFaceVerifyRequest,
) -> cloudauth_models.CompareFaceVerifyResponse:
endpoints = [
'cloudauth.cn-shanghai.aliyuncs.com',
'cloudauth.cn-beijing.aliyuncs.com'
]
for endpoint in endpoints:
try:
response = CompareFaceVerify.compare_face_verify(endpoint, request)
if UtilClient.equal_number(500, response.status_code):
continue
if response is not None and response.body is not None:
if UtilClient.equal_string("500", response.body.code):
continue
return response
except Exception as err:
continue
return None
@staticmethod
def compare_face_verify(
endpoint: str,
request: cloudauth_models.CompareFaceVerifyRequest,
) -> cloudauth_models.CompareFaceVerifyResponse:
client = CompareFaceVerify.create_client(endpoint)
# 創(chuàng)建RuntimeObject實例并設置運行參數(shù)。
runtime = util_models.RuntimeOptions()
runtime.read_timeout = 10000
runtime.connect_timeout = 10000
return client.compare_face_verify_with_options(request, runtime)
if __name__ == '__main__':
CompareFaceVerify.main()
GO
package main
import (
"fmt"
cloudauth "github.com/alibabacloud-go/cloudauth-20190307/v3/client"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
"github.com/aliyun/credentials-go/credentials"
)
func CreateClient(endpoint *string) (_result *cloudauth.Client, _err error) {
//阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
//強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
//本示例通過阿里云Credentials工具從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。
// 初始化Credential。
credential, _err := credentials.NewCredential(nil)
if _err != nil {
panic(_err)
}
// 初始化Client。
config := &openapi.Config{
// 使用Credential配置憑證。
Credential: credential,
Endpoint: endpoint,
// 設置HTTP代理。
// HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
// 設置HTTPS代理。
// HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
}
//_result = &cloudauth.Client{}
_result, _err = cloudauth.NewClient(config)
return _result, _err
}
func _main() (_err error) {
request := &cloudauth.CompareFaceVerifyRequest{
// 請輸入場景ID。
SceneId: tea.Int64(xxx),
OuterOrderNo: tea.String("商戶請求的唯一標識"),
ProductCode: tea.String("PV_FC"),
// 請在以下四種傳入人臉照片方式中,選擇一種。
// 1.照片Base64編碼。
// 2.照片OSS Bucket名和文件名。
// 3.照片OSS的URL地址。
// 4.已經實人認證通過的CertifyId。
// 方式一:照片Base64。
// SourceFaceContrastPicture: tea.String("人臉照片Base64編碼"),
// 方式二:照片OSS Bucket名和文件名。
// SourceOssBucketName: tea.String("cn-shanghai-aliyun-cloudauth-xxxxx"),
// SourceOssBucketName: tea.String("verify/xxxxx/xxxxxx.jpeg"),
// 方式三:照片OSS的URL地址,公網可訪問。
SourceFaceContrastPictureUrl: tea.String("https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg"),
// 方式四:已經實人認證通過的CertifyId。
// SourceCertifyId: tea.String("0bfa7c493f850e5178b9f8613634c9xx"),
// 請在以下四種傳入底庫人臉照片方式中,選擇一種
// 1.照片Base64編碼。
// 2.照片OSS Bucket名和文件名。
// 3.照片OSS的URL地址。
// 4.已經實人認證通過的CertifyId。
// 方式一:照片Base64。
// TargetFaceContrastPicture: tea.String("人臉照片Base64編碼"),
// 方式二:照片OSS Bucket名和文件名。
// TargetOssBucketName: tea.String("cn-shanghai-aliyun-cloudauth-xxxxx"),
// TargetOssObjectName: tea.String("verify/xxxxx/xxxxxx.jpeg"),
// 方式三:照片OSS的URL地址,公網可訪問。
TargetFaceContrastPictureUrl: tea.String("https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg"),
// 方式四:已經實人認證通過的CertifyId。
// TargetCertifyId: tea.String("0bfa7c493f850e5178b9f8613634c9xx")
}
// 推薦,支持服務路由。
response, _err := CompareFaceVerifyAutoRoute(request)
// 不支持服務自動路由。
// response, _err := CompareFaceVerify(tea.String("cloudauth.cn-shanghai.aliyuncs.com"), request)
if _err != nil {
return _err
}
if response != nil {
fmt.Println(*response.Body.RequestId)
fmt.Println(*response.Body.Code)
fmt.Println(*response.Body.Message)
fmt.Println(*response.Body.ResultObject.CertifyId)
fmt.Println(*response.Body.ResultObject.Passed)
fmt.Println(*response.Body.ResultObject.VerifyScore)
}
return _err
}
func CompareFaceVerifyAutoRoute(request *cloudauth.CompareFaceVerifyRequest) (_result *cloudauth.CompareFaceVerifyResponse, _err error) {
// 第一個為主區(qū)域Endpoint,第二個為備區(qū)域Endpoint。
endpoints := []*string{tea.String("cloudauth.cn-shanghai.aliyuncs.com"), tea.String("cloudauth.cn-beijing.aliyuncs.com")}
var lastResponse *cloudauth.CompareFaceVerifyResponse
for _, endpoint := range endpoints {
response, _err := CompareFaceVerify(endpoint, request)
lastResponse = response
if _err != nil {
var err = &tea.SDKError{}
if _t, ok := _err.(*tea.SDKError); ok {
err = _t
// 系統(tǒng)異常,切換到下個地域調用。
if *err.StatusCode == 500 {
continue
}
}
return _result, _err
}
if *response.StatusCode == 500 {
continue
}
if *response.Body.Code == "500"{
continue
}
_result = response
return _result, _err
}
_result = lastResponse
return _result, _err
}
func CompareFaceVerify(endpoint *string, request *cloudauth.CompareFaceVerifyRequest) (_result *cloudauth.CompareFaceVerifyResponse, _err error) {
client, _err := CreateClient(endpoint)
if _err != nil {
return _result, _err
}
// 創(chuàng)建RuntimeObject實例并設置運行參數(shù)。
runtime := &util.RuntimeOptions{}
runtime.ReadTimeout = tea.Int(10000)
runtime.ConnectTimeout = tea.Int(10000)
_body, _err := client.CompareFaceVerifyWithOptions(request, runtime)
if _err != nil {
return _result, _err
}
_result = _body
return _result, _err
}
func main() {
err := _main()
if err != nil {
panic(err)
}
}
.NET
using System;
using System.Collections.Generic;
using Tea;
namespace CompareFaceVerify
{
public class Program
{
public static AlibabaCloud.SDK.Cloudauth20190307.Client CreateClient(string endpoint)
{
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
{
Credential=new Aliyun.Credentials.Client(null)
};
config.Endpoint = endpoint;
return new AlibabaCloud.SDK.Cloudauth20190307.Client(config);
}
public static void Main(string[] args)
{
AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyRequest request = new AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyRequest
{
// 請輸入場景ID。
SceneId = xxx,
OuterOrderNo = "商戶請求的唯一標識",
ProductCode = "PV_FC",
// 請在以下四種傳入人臉照片方式中,選擇一種。
// 1.照片Base64編碼。
// 2.照片OSS Bucket名和文件名。
// 3.照片OSS的URL地址。
// 4.已經實人認證通過的CertifyId。
// 方式一:照片Base64。
//SourceFaceContrastPicture = "人臉照片Base64編碼",
// 方式二:照片OSS Bucket名和文件名。
// SourceOssBucketName = "cn-shanghai-aliyun-cloudauth-xxxxx",
// SourceOssBucketName = "verify/xxxxx/xxxxxx.jpeg",
// 方式三:照片OSS的URL地址,公網可訪問。
SourceFaceContrastPictureUrl = "https=//cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg",
// 方式四:已經實人認證通過的CertifyId。
// SourceCertifyId = "0bfa7c493f850e5178b9f8613634c9xx",
// 請在以下四種傳入底庫人臉照片方式中,選擇一種
// 1.照片Base64編碼。
// 2.照片OSS Bucket名和文件名。
// 3.照片OSS的URL地址。
// 4.已經實人認證通過的CertifyId。
// 方式一:照片Base64。
//TargetFaceContrastPicture = "底庫人臉照片Base64編碼",
// 方式二:照片OSS Bucket名和文件名。
// TargetOssBucketName = "cn-shanghai-aliyun-cloudauth-xxxxx",
// TargetOssObjectName = "verify/xxxxx/xxxxxx.jpeg",
// 方式三:照片OSS的URL地址,公網可訪問。
TargetFaceContrastPictureUrl = "https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg",
// 方式四:已經實人認證通過的CertifyId。
// TargetCertifyId = "0bfa7c493f850e5178b9f8613634c9xx",
};
AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyResponse response = CompareFaceVerifyAutoRoute(request);
// 不支持服務自動路由。
// AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyResponse response = CompareFaceVerify("cloudauth.cn-shanghai.aliyuncs.com", request);
Console.WriteLine(response.Body.RequestId);
Console.WriteLine(response.Body.Code);
Console.WriteLine(response.Body.Message);
Console.WriteLine(response.Body.ResultObject.Passed);
Console.WriteLine(response.Body.ResultObject.VerifyScore);
Console.WriteLine(response.Body.ResultObject.CertifyId);
}
public static AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyResponse CompareFaceVerifyAutoRoute(AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyRequest request)
{
List<string> endpoints = new List<string>
{
"cloudauth.cn-shanghai.aliyuncs.com",
"cloudauth.cn-beijing.aliyuncs.com"
};
AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyResponse lastResponse = null;
foreach (var endpoint in endpoints)
{
try
{
AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyResponse response = CompareFaceVerify(endpoint, request);
lastResponse = response;
if (response is not null)
{
if (AlibabaCloud.TeaUtil.Common.EqualNumber(500, (int)(response.StatusCode)))
{
continue;
}
if (response.Body is not null)
{
if (AlibabaCloud.TeaUtil.Common.EqualString("500", response.Body.Code))
{
continue;
}
}
}
return response;
}
catch (TeaException err)
{
Console.WriteLine(err);
// 網絡異常,切換到下個區(qū)域調用。
if (AlibabaCloud.TeaUtil.Common.EqualString("ServiceUnavailable", err.Code))
{
continue;
}
}
catch (Exception _err)
{
Console.WriteLine(_err);
continue;
}
}
return lastResponse;
}
public static AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyResponse CompareFaceVerify(string endpoint, AlibabaCloud.SDK.Cloudauth20190307.Models.CompareFaceVerifyRequest request)
{
AlibabaCloud.SDK.Cloudauth20190307.Client client = CreateClient(endpoint);
// 創(chuàng)建RuntimeObject實例并設置運行參數(shù)。
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
runtime.ReadTimeout = 10000;
runtime.ConnectTimeout = 10000;
return client.CompareFaceVerifyWithOptions(request, runtime);
}
}
}
Node.js
const Config = require("@alicloud/openapi-client");
const CloudAuth = require("@alicloud/cloudauth20190307");
const CloudAuthClient = CloudAuth.default;
const {RuntimeOptions} = require("@alicloud/tea-util");
const { default: Credential } = require('@alicloud/credentials');
const fs = require("fs");
function createClient(endpoint) {
// 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
// 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
// 本示例通過阿里云Credentials工具從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。
const cred = new Credential();
const config = new Config.Config({
credential: cred,
// 設置Endpoint。
endpoint: endpoint,
// 設置HTTP代理。
// httpProxy: "http://xxx.xxx.xxx.xxx:9999",
// 設置HTTPS代理。
// httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
});
return new CloudAuthClient(config)
}
async function compareFaceVerify(endpoint, request) {
const client = createClient(endpoint);
// 創(chuàng)建RuntimeObject實例并設置運行參數(shù)。
const runtime = new RuntimeOptions([]);
runtime.readTimeout=10000;
runtime.connectTimeout=10000;
return await client.compareFaceVerifyWithOptions(request, runtime);
}
async function compareFaceVerifyAutoRoute(request) {
const endpoints = [
"cloudauth.cn-shanghai.aliyuncs.com",
"cloudauth.cn-beijing.aliyuncs.com"
];
for (const endpoint of endpoints) {
try {
const response = await compareFaceVerify(endpoint, request);
if (response.statusCode === 500) {
continue;
}
if(response.body !== null){
if(response.body.code === "500"){
continue;
}
}
return response;
} catch (err) {
console.log(err);
continue;
}
}
return null;
}
async function main(){
// 通過以下代碼創(chuàng)建API請求并設置參數(shù)。
const request = new CloudAuth.CompareFaceVerifyRequest({
// 請輸入場景ID。
sceneId: xxx,
// 設置商戶請求的唯一標識。
outerOrderNo: "xxx",
// 要接入的認證方案。
productCode: "PV_FC",
// 方式一:照片Base64。
// sourceFaceContrastPicture: "人臉照片Base64編碼",
// 方式二:照片OSS bucket名和文件名。
// sourceOssBucketName: "cn-shanghai-aliyun-cloudauth-xxxxx",
// sourceOssObjectName: "verify/xxxxx/xxxxxx.jpeg",
// 方式三:照片OSS的URL地址,公網可訪問。
sourceFaceContrastPictureUrl: "https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg",
// 方式四:已經實人認證通過的CertifyId。
// sourceCertifyId: "0bfa7c493f850e5178b9f8613634c9xx",
// 請在以下四種傳入底庫人臉照片方式中,選擇一種
// 1.照片Base64編碼。
// 2.照片OSS bucket名和文件名。
// 3.照片OSS的URL地址。
// 4.已經實人認證通過的CertifyId。
// 方式一:照片Base64。
// targetFaceContrastPicture: "人臉照片Base64編碼",
// 方式二:照片OSS bucket名和文件名。
// targetOssBucketName: "cn-shanghai-aliyun-cloudauth-xxxxx",
// targetOssObjectName: "verify/xxxxx/xxxxxx.jpeg",
// 方式三:照片OSS的URL地址,公網可訪問。
targetFaceContrastPictureUrl: "https://cn-shanghai-aliyun-cloudauth-xxxxxx.oss-cn-shanghai.aliyuncs.com/verify/xxxxx/xxxxx.jpeg",
// 方式四:已經實人認證通過的CertifyId。
// targetCertifyId: "0bfa7c493f850e5178b9f8613634c9xx"
});
// 推薦,支持服務路由。
const response = await compareFaceVerifyAutoRoute(request);
// 不支持服務自動路由。
// const response = await compareFaceVerify("cloudauth.cn-shanghai.aliyuncs.com", request);
if (response){
console.log(response.body.requestId);
console.log(response.body.code);
console.log(response.body.message);
console.log(response.body.resultObject.verifyScore);
console.log(response.body.resultObject.passed);
}
}
main().then(function (response) {});
本示例通過阿里云Credentials工具從環(huán)境變量中讀取AccessKey,來實現(xiàn)API訪問的身份驗證。如何配置環(huán)境變量,請參見在Linux、macOS和Windows系統(tǒng)配置環(huán)境變量。