本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
当您使用SDK进行开发时,无需拼接HTTPS请求或实现签名算法,开发更方便。因此建议您通过SDK方式在服务端集成金融级实人认证。本文为您介绍金融级实人认证服务端需要集成的接口,以及多语言(Java、Python、PHP、C#、Golang、Node.js)的SDK调用示例。
调用说明
全局接入地址:saf.cn-shanghai.aliyuncs.com
请求方法:POST。
传输协议:HTTPS。
发起认证请求
查询认证结果详情
method参数的值需设定为query,表示调用查询认证结果。
除通用参数外,还需在ServiceParameters的JSON字符串里传入以下字段:
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> <dependency> <groupId>com.aliyun</groupId> <artifactId>tea</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>
说明配置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 org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
@RestController
@RequestMapping("InitFaceVerifyRequest")
public class InitFaceVerifyRequest {
@PostMapping("/initFaceVerify")
public String initFaceVerify() throws Throwable {
// 阿里云账号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", "10000*****");
// 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", "330103xxxxxxxxxxxx");
serviceParams.put("certName", "张三");
serviceParams.put("returnUrl", "https://www.aliyun.com");
serviceParams.put("callbackUrl", "https://www.aliyun.com");
serviceParams.put("callbackToken", "NMjvQanQgplBSaEI0sL********");
/*
// 如需开启个人信息加密传输。
serviceParams.put("encryptType", "SM2");
serviceParams.put("certNo", "BMjsstxK3S4b1YH*****Pet8ECObfxmLN92SLsNg==");
serviceParams.put("certName", "BCRD/7ZkNy7Q*****M1BMBezZe8GaYHrLwyJv558w==");
*/
/*
// 查询认证结果。
serviceParams.put("method", "query");
serviceParams.put("certifyId", "7eff3ad26a9c7b68c511b9f********");
serviceParams.put("sceneId", "10000*****");
*/
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
示例代码如下:
import os
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdksaf.request.v20190521.ExecuteRequestRequest import ExecuteRequestRequest
# 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
# 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
# 本示例通过阿里云Credentials工具从环境变量中读取AccessKey,来实现API访问的身份验证。
credentials = AccessKeyCredential(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
# use STS Token
# credentials = StsTokenCredential(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], os.environ['ALIBABA_CLOUD_SECURITY_TOKEN'])
client = AcsClient(region_id='cn-beijing', credential=credentials)
request = ExecuteRequestRequest()
request.set_accept_format('json')
# 示例参数值
temp_dict = {
"method": "init",
"sceneId": "10000*****",
"outerOrderNo": "e0c34a77f5ac40a5aa5e6ed20c********",
"bizCode": "FACE",
"identityType": "CERT_INFO",
"certType": "IDENTITY_CARD",
"certNo": "330103xxxxxxxxxxxx",
"certName": "张三",
"returnUrl": "https://www.aliyun.com",
"callbackUrl": "https://www.aliyun.com",
"callbackToken": "NMjvQanQgplBSaEI0sL********"
}
json_str = json.dumps(temp_dict)
request.set_ServiceParameters(json_str)
request.set_Service("购买的产品Service")
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
Python SDK的环境准备、安装和使用,请参见阿里云SDK开发指南。
PHP
下载PHP SDK。
代码示例:
<?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() = accessKeyId;
$credential->getAccessKeySecret() = accessKeySecret;
AlibabaCloud::accessKeyClient(accessKeyId, accessKeySecret)
->regionId('cn-shanghai')
->asDefaultClient();
// 下述参数依照实际使用的接口做调整,本演示仅针对认证初始化接口。
$serviceParams = array(
"method"=> "init",
"sceneId"=> "10000*****",
"outerOrderNo"=> "e0c34a77f5ac40a5aa5e6ed20c********",
"bizCode"=> "FACE",
"identityType"=> "CERT_INFO",
"certType"=> "IDENTITY_CARD",
"certNo"=> "330103xxxxxxxxxxxx",
"certName"=> "张三",
"returnUrl"=> "https://www.aliyun.com",
"callbackUrl"=> "https://www.aliyun.com",
"callbackToken"=>"NMjvQanQgplBSaEI0sL********"
);
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
下载Golang SDK。
示例代码:
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"`
}
func main() {
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过阿里云Credentials工具从环境变量中读取AccessKey,来实现API访问的身份验证。
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": "10000*****",
"outerOrderNo": "e0c34a77f5ac40a5aa5e6ed20c********",
"bizCode": "FACE",
"identityType": "CERT_INFO",
"certType": "IDENTITY_CARD",
"certNo": "330103xxxxxxxxxxxx",
"certName": "张三",
"returnUrl": "https://www.aliyun.com",
"callbackUrl": "https://www.aliyun.com",
"callbackToken": "NMjvQanQgplBSaEI0sL********",
}
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模块。命令中的--save会将模块写入应用的package.json文件中,作为依赖模块。
$ npm install @alicloud/pop-core --save
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": "10000*****",
"outerOrderNo": "e0c34a77f5ac40a5aa5e6ed20c********",
"bizCode": "FACE",
"identityType": "CERT_INFO",
"certType": "IDENTITY_CARD",
"certNo": "330103xxxxxxxxxxxx",
"certName": "张三",
"returnUrl": "https://www.aliyun.com",
"callbackUrl": "https://www.aliyun.com",
"callbackToken": "NMjvQanQgplBSaEI0sL********"
}
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工具配置方法,请参见管理访问凭证。