本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
當您使用SDK進行開發時,無需拼接HTTPS請求或實現簽名算法,開發更方便。因此建議您通過SDK方式在服務端集成金融級實人認證。本文為您介紹金融級實人認證服務端需要集成的接口,以及多語言(Java、Python、PHP、C#、Golang、Node.js)的SDK調用示例。
調用說明
全局接入地址:saf.cn-shanghai.aliyuncs.com
請求方法:POST
傳輸協議:HTTPS
QPS限量:API獨享QPS限量,詳情請參見服務端接口QPS限量說明。
發起認證請求
請求參數
method
字段傳入init
值表示調用發起認證請求接口。
發起認證請求時,傳入以下參數:
名稱 | 類型 | 是否必選 | 描述 | 示例值 |
method | String | 是 | 發起認證請求的操作。 取值:init。 | init |
sceneId | String | 是 | 認證場景ID,該ID在控制臺創建認證場景后自動生成。關于如何創建認證場景,請參見添加認證場景。 | 10000***** |
outerOrderNo | String | 是 | 客戶服務端自定義的業務唯一標識,用于后續定位排查問題時使用。值最長為32位長度的字母和數字組合,請確保唯一。 | e0c34a77f5ac40a5aa5e6ed20c******** |
bizCode | String | 是 | 認證場景碼和商戶發起認證的接入端有關:
| FACE |
identityType | String | 是 | 身份信息的參數類型,必須傳入CERT_INFO。 | CERT_INFO |
certType | String | 是 | 用戶證件類型。支持的證件類型,請參見方案概述。 不同證件類型,取值均為IDENTITY_CARD。 | IDENTITY_CARD |
certNo | String | 是 | 用戶身份證件號碼。 | 330103xxxxxxxxxxxx |
certName | String | 是 | 用戶姓名。 | 張三 |
returnUrl | String | 是 | 商戶業務頁面回調的目標地址。
| https://www.aliyun.com |
callbackUrl | String | 否 | 認證結果的回調通知地址,必須以HTTPS開頭。平臺完成認證后會回調該地址,并自動添加certifyId、passed。 | https://www.aliyun.com |
callbackToken | String | 否 | 安全Token,由您自行生成,用于防重復、防篡改校驗。如果設置了該值會在回調地址顯示CallbackToken字段。 | NMjvQanQgplBSaEI0sL******** |
encryptType | String | 否 | 加密類型。為空表示不加密。 如開啟加密傳輸,需傳入加密算法。目前僅支持SM2國密算法。 如需傳入加密算法,需對certName和certNo進行加密,并傳入加密后的密文。有關參數加密的更多信息,請參見參數加密說明。 說明 目前僅Java語言提供有關開啟加密傳輸的示例代碼。更多信息,請參見SDK調用示例。 | SM2 |
響應參數
名稱 | 類型 | 描述 | 示例值 |
RequestId | String | 請求ID。 | 130A2C10-B9EE-4D84-88E3-5384FF039795 |
Message | String | 請求消息的響應信息。 | OK |
certifyId | String | 認證ID,刷臉認證的唯一標識。 警告 CertifyId字段為計費統計字段,為了方便后續核對賬單,請您在本地留存該字段信息。 初始化接口返回的認證CertifyId在30分鐘有效且僅能認證提交一次,請您在有效期內應用,避免重復使用。 | 7eff3ad26a9c7b68c511b9f35eb1**** |
certifyUrl | String | 認證流程入口Url。 重要 初始化接口返回的認證CertifyUrl在30分鐘有效且僅認證僅能提交一次,請您在有效期內使用,避免重復使用。 | https://picker.antcloudauth.aliyuncs.com/gateway.do?... |
Code | String | 返回碼。200表示返回成功,其他返回碼均為失敗。 | 200 |
查詢認證結果
method參數的值需設定為query,表示調用查詢認證結果。
查詢認證結果時,傳入以下參數:
請求參數
名稱 | 類型 | 是否必選 | 描述 | 示例值 |
method | String | 是 | 查詢認證結果的操作。 取值:query。 | query |
certifyId | String | 是 | 認證ID,需與發起認證請求時返回的certifyId保持一致。 | 7eff3ad26a9c7b68c511b9f35eb1**** |
sceneId | String | 是 | 認證場景ID,需與發起認證請求時的sceneId保持一致。 | 100000***** |
encToken | String | 否 | 公鑰加密后的AES 256密鑰(Base64編碼),用于獲取加密圖片。僅面向持牌金融客戶KYC留存的認證圖片。如何使用RSA公鑰加密AES密鑰,請參見支付寶小程序或H5方案密鑰加密說明。 | l1tmZUQKdclKdGHzy2hljqltxPYPRo42JjRL04JVHxh9wWP19xHZpVvlKy9lxXRXCiWTKfJAaDfw4pKlZfetvZHdVdjroiXaLt7jx68rpp24wCeWo8wgjMF1lBwJmYZGcTrCVJ+Tonn7CHN7ur11Pn9d4IdkbTi5rBoOx8JITTn6krEH6ssZ5Cj3xFJ4/3PyvloU8UX+FQIPpskYR36jHcqs+Nt4EeTK/wWsAQItl6RfI9FN+8UJ42RVNt/IWHuk3U9aQNxzt7Z+7hbvqpBf/uKp4sgP6fbyYhZ+2tM+KXF1ODOYGenQ65wliaS/C1fTqjUJYcONMEW61Te/de4r4A== |
響應參數
名稱 | 類型 | 是否必選 | 描述 | 示例值 |
passed | String | 是 | 是否通過認證。取值:
| T |
identityInfo | String | 否 | 預留字段,默認返回為空。 | 無 |
materialInfo | String | 否 | 預留字段,默認返回為空。 | 無 |
SDK調用示例
Java
如需Java SDK源碼,請訪問aliyun-openapijava-sdk頁面下載。
在pom.xml中添加如下依賴,即可在Maven工程中使用SDK。
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-saf</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>LATEST</version> </dependency>
推薦Maven依賴仲裁:
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <optional>true</optional> <version>4.6.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.47</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>tea</artifactId> <version>LATEST</version> </dependency>
說明配置Java SDK環境的具體操作請參見阿里云SDK開發指南。
Credentials工具配置方法,請參見在Linux、macOS和Windows系統配置環境變量。
示例代碼如下:
import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSON; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.http.FormatType; import com.aliyuncs.http.MethodType; import com.aliyuncs.http.ProtocolType; import com.aliyuncs.profile.DefaultProfile; public class FaceVerifyTest { public static void main(String[] args) throws IOException { // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 // 本示例通過阿里云Credentials工具從環境變量中讀取AccessKey,來實現API訪問的身份驗證。 com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(); String accesssKeyId = credentialClient.getCredential().getAccessKeyId(); String accessKeySecret = credentialClient.getCredential().getAccessKeySecret(); DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai",accesssKeyId,accessKeySecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("saf.cn-shanghai.aliyuncs.com"); request.setSysVersion("2017-03-31"); request.setSysAction("ExecuteRequest"); request.setSysProtocol(ProtocolType.HTTPS); request.setHttpContentType(FormatType.FORM); // 業務詳細參數。 Map<String, Object> serviceParams = new HashMap<String, Object>(); // 發起認證請求。 serviceParams.put("method", "init"); serviceParams.put("sceneId", "100001***"); // outerOrderNo參數要求每次都唯一,建議使用UUID工具每次生成。 serviceParams.put("outerOrderNo", UUID.randomUUID().toString().replaceAll("-","")); // 當用戶在iOS或安卓平臺發起認證時,認證場景碼是FACE_SDK;在小程序中,認證場景碼則為FACE。 serviceParams.put("bizCode", "FACE"); serviceParams.put("identityType", "CERT_INFO"); serviceParams.put("certType", "IDENTITY_CARD"); serviceParams.put("certNo", "142702******"); serviceParams.put("certName", "張三"); // 認證后回調的頁面地址。 serviceParams.put("returnUrl", ""); //serviceParams.put("callbackUrl", "https://www.aliyundoc.com"); //serviceParams.put("callbackToken", "NMjvQanQgplBSaEI0sL86WnQplB"); /* // 如需開啟個人信息加密傳輸。 serviceParams.put("encryptType", "SM2"); serviceParams.put("certNo", "BMjsstxK3S4b1YH*****Pet8ECObfxmLN92SLsNg=="); serviceParams.put("certName", "BCRD/7ZkNy7Q*****M1BMBezZe8GaYHrLwyJv558w=="); */ // 查詢認證結果。 //serviceParams.put("method", "query"); //serviceParams.put("certifyId", "7eace0bcc45a07940d0c50cb69***"); //serviceParams.put("sceneId", "100001***"); request.putBodyParameter("ServiceParameters", JSON.toJSONString(serviceParams)); // 固定值,Service = fin_face_verify。 request.putBodyParameter("Service", "fin_face_verify"); try { CommonResponse response = client.getCommonResponse(request); System.out.println(response.getData()); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } } }
Python
安裝SDK核心庫。
如果您使用的是Python 2.x,執行以下命令,安裝阿里云SDK核心庫。
pip install aliyun-python-sdk-core
如果您使用的是Python 3.x,執行以下命令,安裝阿里云SDK核心庫。
pip install aliyun-python-sdk-core-v3
安裝云產品SAF SDK。
pip install aliyun-python-sdk-saf
安裝Credentials工具。Credentials工具配置方法,請參見身份驗證配置。
pip install alibabacloud_credentials==0.3.2
示例代碼如下:
from aliyunsdkcore import client from aliyunsdksaf.request.v20170331 import ExecuteRequestRequest from alibabacloud_credentials.client import Client as CredClient # 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 # 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 # 本示例通過阿里云Credentials工具從環境變量中讀取AccessKey,來實現API訪問的身份驗證。 cred = CredClient() accessKey = cred.get_access_key_id() accessKeySecret = cred.get_access_key_secret() clt = client.AcsClient(accessKey, accessKeySecret, 'cn-shanghai') # 設置參數。 request = ExecuteRequestRequest.ExecuteRequestRequest() request.set_accept_format('json') # 產品Service請參考[公共參數]文檔中的Service字段描述。 request.add_query_param('Service', '購買的產品Service') request.add_query_param('ServiceParameters', '入參JSON字符串') # 發起請求。 response = clt.do_action_with_exception(request) print(response)
Python SDK的環境準備、安裝和使用,請參見阿里云SDK開發指南。
PHP
安裝依賴。
安裝 SDK 核心庫 Core ,如果已在系統上全局安裝 Composer,請直接在項目目錄中運行以下內容來安裝 Alibaba Cloud SDK for PHP 作為依賴項:
復制composer require alibabacloud/client
一些用戶可能由于網絡問題無法安裝,可以通過以下命令切換為阿里云 Composer 全量鏡像。
復制composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
安裝云產品SAF SDK。
composer require alibabacloud/saf
示例代碼如下:
<?php require __DIR__ . '/vendor/autoload.php'; use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException; use AlibabaCloud\Credentials\Credential; // 設置一個全局客戶端。 // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 // 本示例通過阿里云Credentials工具從環境變量中讀取AccessKey,來實現API訪問的身份驗證。 $credential = new Credential([]); $credential->getAccessKeyId() = accessKey ; $credential->getAccessKeySecret() = accessKeySecret; AlibabaCloud::accessKeyClient(accessKey, accessKeySecret) ->regionId('cn-shanghai') ->asDefaultClient(); // 下述參數依照實際使用的接口做調整,本演示僅針對認證初始化接口。 $serviceParams = array( "method"=> "init", "sceneId"=> "1000000006", "outerOrderNo"=> "e0c34a77f5ac40a5aa5e6ed20c353903", "bizCode"=> "FACE", "identityType"=> "CERT_INFO", "certType"=> "IDENTITY_CARD", "certNo"=> "330103xxxxxxxxxxxx", "certName"=> "張三", "returnUrl"=> "https://www.aliyun.com", "callbackUrl"=> "https://www.aliyun.com", "callbackToken"=>"NMjvQanQgplBSaEI0sL86WnQplB" ); try { // 下述參數無需調整。 $result = AlibabaCloud::rpcRequest() ->product('saf') ->scheme('https') ->version('2017-03-31') ->action('ExecuteRequest') ->method('POST') ->host('saf.cn-shanghai.aliyuncs.com') ->options([ 'query' => [ 'Service' => 'fin_face_verify', 'ServiceParameters' => json_encode($serviceParams) ], ]) ->request(); echo($result); } catch (ClientException $exception) { echo $exception->getMessage() . PHP_EOL; } catch (ServerException $exception) { echo $exception->getMessage() . PHP_EOL; echo $exception->getErrorCode() . PHP_EOL; echo $exception->getRequestId() . PHP_EOL; echo $exception->getErrorMessage() . PHP_EOL; } ?>
PHP SDK的環境準備、安裝和使用,請參見阿里云SDK開發指南。
Credentials工具配置方法,請參見身份驗證配置。
C#
引入SDK依賴。
dotnet add package aliyun-net-sdk-saf --version 3.0.1 dotnet add package Aliyun.Credentials
代碼示例如下:
using System.Text.Json; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Exceptions; using Aliyun.Acs.Core.Profile; using Aliyun.Credentials.Models; class FaceVerifyTest { static void Main(string[] args) { // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 // 本示例通過阿里云Credentials工具從環境變量中讀取AccessKey,來實現API訪問的身份驗證。 Credential=new Aliyun.Credentials.Client(null) string accessKeyId = credentialClient.GetAccessKeyId(); string accessKeySecret = credentialClient.GetAccessKeySecret(); IClientProfile profile = DefaultProfile.GetProfile( "cn-shanghai", accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); try { // 構造請求 CommonRequest request = new CommonRequest(); request.Protocol = Aliyun.Acs.Core.Http.ProtocolType.HTTPS; request.Domain = "saf.cn-shanghai.aliyuncs.com"; request.Version = "2017-03-31"; request.Action = "ExecuteRequest"; //固定值,Service = fin_face_verify。 request.AddQueryParameters("Service", "fin_face_verify"); Dictionary<string, string> ServiceParameters = new Dictionary<string, string>(); ServiceParameters.Add("method", "init"); ServiceParameters.Add("sceneId", "100000000"); ServiceParameters.Add("outerOrderNo", "e0c34a77f5ac40a5aa5e6ed20c353888"); ServiceParameters.Add("bizCode", "FACE"); ServiceParameters.Add("identityType", "CERT_INFO"); ServiceParameters.Add("certType", "IDENTITY_CARD"); ServiceParameters.Add("certNo", "330103xxxxxxxxxxxx"); ServiceParameters.Add("certName", "張三"); ServiceParameters.Add("returnUrl", "https://www.aliyun.com"); ServiceParameters.Add("callbackUrl", "https://www.aliyun.com"); ServiceParameters.Add("callbackToken", "NMjvQanQgplBSaEI0sL86WnQplB"); /** * 查詢認證結果。 * map.Add("method", "query"); * map.Add("certifyId", "7eff3ad26a9c7b68c511b9f35eb1a354"); * map.Add("sceneId", "100000000"); */ request.AddQueryParameters("ServiceParameters", JsonSerializer.Serialize(ServiceParameters)); // 發起請求,并得到Response CommonResponse response = client.GetCommonResponse(request); System.Console.WriteLine(response.Data); } catch (ServerException ex) { System.Console.WriteLine(ex.ToString()); } catch (ClientException ex) { System.Console.WriteLine(ex.ToString()); } } }
C# SDK的環境準備、安裝和使用,請參見阿里云SDK開發指南。
Credentials工具配置方法,請參見管理訪問憑證。
Golang
安裝依賴。
安裝 SDK 核心庫 Core ,使用pip安裝包依賴:
pip install aliyun-python-sdk-core
安裝云產品SAF SDK。
pip install aliyun-python-sdk-saf==undefined
示例代碼:
package main import ( "encoding/json" "fmt" "github.com/aliyun/alibaba-cloud-sdk-go/sdk" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" "github.com/aliyun/credentials-go/credentials" ) // ResponseContent返回體。 type ResponseContent struct { Data map[string]string `json:"data"` RequestID string `json:"requestId"` Code string `json:"code"` Message string `json:"message"` } // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 // 本示例通過阿里云Credentials工具從環境變量中讀取AccessKey,來實現API訪問的身份驗證。 func main() { credential, _err := credentials.NewCredential(nil) if _err != nil { panic(_err) } accessKeyId, err := akCredential.GetAccessKeyId() accessKeySecret, err := akCredential.GetAccessKeySecret() client, err := sdk.NewClientWithAccessKey( "cn-shanghai", accessKeyId, accessKeySecret) request := requests.NewCommonRequest() // 下述參數無需調整。 request.Domain = "saf.cn-shanghai.aliyuncs.com" request.Version = "2017-03-31" request.ApiName = "ExecuteRequest" request.Scheme = "https" request.QueryParams["Service"] = "fin_face_verify" // 下述參數依照實際使用的接口做調整,本演示僅針對認證初始化接口。 serviceParam := map[string]string{ "method": "init", "sceneId": "1000000006", "outerOrderNo": "e0c34a77f5ac40a5aa5e6ed20c353900", "bizCode": "FACE", "identityType": "CERT_INFO", "certType": "IDENTITY_CARD", "certNo": "330103xxxxxxxxxxxx", "certName": "張三", "returnUrl": "https://www.aliyun.com", "callbackUrl": "https://www.aliyun.com", "callbackToken":"NMjvQanQgplBSaEI0sL86WnQplB" } serviceParamByte, err := json.Marshal(serviceParam) if err != nil { panic(err) } request.QueryParams["ServiceParameters"] = string(serviceParamByte) response, err := client.ProcessCommonRequest(request) if err != nil { panic(err) } respContent := ResponseContent{} err = json.Unmarshal(response.GetHttpContentBytes(), &respContent) fmt.Printf("response data is %#v\n", respContent.Data) fmt.Println("end") }
Golang SDK的環境準備、安裝和使用,請參見阿里云SDK開發指南。
Credentials工具配置方法,請參見管理訪問憑證。
Node.js
執行以下命令安裝
@alicloud/pop-core
模塊。$ npm install @alicloud/pop-core --save
命令中的--save會將模塊寫入應用的package.json文件中,作為依賴模塊。
Node.js 代碼示例:
const Core = require('@alicloud/pop-core'); const { default: Credential } = require('@alicloud/credentials'); // 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 // 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 // 本示例通過阿里云Credentials工具從環境變量中讀取AccessKey,來實現API訪問的身份驗證。 const cred = new Credential; var client = new Core({ credential: cred, endpoint: 'https://saf.cn-shanghai.aliyuncs.com', apiVersion: '2017-03-31' }); // 下述參數依照實際使用的接口做調整,本演示僅針對認證初始化接口。 var serviceParams = { "method": "init", "sceneId": "1000000006", "outerOrderNo": "e0c34a77f5ac40a5aa5e6ed20c353901", "bizCode": "FACE", "identityType": "CERT_INFO", "certType": "IDENTITY_CARD", "certNo": "330103xxxxxxxxxxxx", "certName": "張三", "returnUrl": "https://www.aliyun.com", "callbackUrl": "https://www.aliyun.com", "callbackToken":"NMjvQanQgplBSaEI0sL86WnQplB" } var params = { "RegionId": "cn-shanghai", "Service": "fin_face_verify", "ServiceParameters": JSON.stringify(serviceParams) } var requestOption = { method: 'POST' }; client.request('ExecuteRequest', params, requestOption).then((result) => { console.log(JSON.stringify(result)); }, (ex) => { console.log(ex); })
Node.js SDK的環境準備、安裝和使用,請參見阿里云SDK開發指南。
Credentials工具配置方法,請參見管理訪問憑證。