本文介绍如何通过SDK对接风险识别产品,这是一种简单便捷的API对接方式。
SDK调用方式介绍
通过使用阿里云风险识别SDK,调用方无需关注签名验证以及Body格式构建等繁琐的事情,推荐您使用风险识别SDK。目前支持JAVA、Python、PHP、C#、Golang、Node.js、Ruby共7种SDK。
JAVA SDK
JAVA SDK的环境准备、安装使用请参见阿里云SDK开发指南。
JAVA Maven依赖:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-saf</artifactId>
<version>3.0.1</version>
</dependency>
JAVA Maven推荐依赖仲裁:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<optional>true</optional>
<version>4.5.25</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68.noneautotype</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>io.opentracing</groupId>
<artifactId>opentracing-util</artifactId>
<version>0.31.0</version>
</dependency>
JAVA SDK源码:
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取账号的RAM用户AccessKey,来实现API访问的身份验证。运行本示例代码前,请确认配置这两个环境变量:ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 创建DefaultAcsClient实例并初始化,仅需初始化一遍
DefaultProfile profile = DefaultProfile.getProfile(
"<YOUR-REGION-ID>", // 地域ID 推荐用 cn-shanghai
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),// RAM账号的AccessKey ID
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); // RAM账号Access Key Secret
// http连接池相关配置
HttpClientConfig clientConfig = HttpClientConfig.getDefault();
clientConfig.setMaxRequestsPerHost(6);
clientConfig.setMaxIdleConnections(20);
// http超时时间配置
clientConfig.setReadTimeoutMillis(10000);
clientConfig.setConnectionTimeoutMillis(3000);
profile.setHttpClientConfig(clientConfig);
IAcsClient client = new DefaultAcsClient(profile);
//发起请求
ExecuteRequestRequest executeRequestRequest = new ExecuteRequestRequest();
//如果需要指定特殊版本号,可以在这里调整,默认为2019-05-21
//executeRequestRequest.setVersion(version);
// 指定请求方法
executeRequestRequest.setSysMethod(MethodType.POST);
//指定协议,目前只支持HTTPS
executeRequestRequest.setSysProtocol(ProtocolType.HTTPS);
//服务的产品码:account_abuse/coupon_abuse等,详见文档“公共参数”中service字段。
String service = "目标产品的service";
executeRequestRequest.setService(service);
// 业务详细参数,具体见文档里的业务参数部分,不需要的参数就不需要设置
Map<String, Object> serviceParams = new HashMap<String, Object>();
// IMEI
serviceParams.put("imei", "A000******A025");
//手机号13********3
serviceParams.put("mobile", "13********3");
executeRequestRequest.setServiceParameters(JSONObject.toJSONString(serviceParams));
executeRequestRequest.setAcceptFormat(FormatType.JSON);
try {
ExecuteRequestResponse httpResponse = client.getAcsResponse(executeRequestRequest);
System.out.println("httpResponse:" + JSONObject.toJSONString(httpResponse));
} catch (Exception e) {
e.printStackTrace();
}
Python SDK
单击此处下载Python SDK源码。
Python SDK的环境准备、安装使用请参见阿里云SDK开发指南。
安装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
Python用例:
import os
from aliyunsdkcore import client
from aliyunsdksaf.request.v20190521 import ExecuteRequestRequest
# 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
# 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
# 本示例通过从环境变量中读取账号的RAM用户AccessKey,来实现API访问的身份验证。运行本示例代码前,请确认配置这两个环境变量:ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET。
clt = client.AcsClient(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],'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)
如使用场景风控:
# -*- coding: utf-8 -*-
import os
import sys
from typing import List
from alibabacloud_tea_openapi.client import Client as OpenApiClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_openapi_util.client import Client as OpenApiUtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> OpenApiClient:
"""
使用AK&SK初始化账号Client
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
# 必填,您的 AccessKey ID,
access_key_id=access_key_id,
# 必填,您的 AccessKey Secret,
access_key_secret=access_key_secret
)
# Endpoint 请参考 https://api.aliyun.com/product/saf
config.endpoint = f'saf.ap-southeast-1.aliyuncs.com'
return OpenApiClient(config)
@staticmethod
def create_api_info() -> open_api_models.Params:
"""
API 相关
@param path: params
@return: OpenApi.Params
"""
params = open_api_models.Params(
# 接口名称,
action='ExecuteRequest',
# 接口版本,
version='2019-05-21',
# 接口协议,
protocol='HTTPS',
# 接口 HTTP 方法,
method='POST',
auth_type='AK',
style='RPC',
# 接口 PATH,
pathname=f'/',
# 接口请求体内容格式,
req_body_type='json',
# 接口响应体内容格式,
body_type='json'
)
return params
@staticmethod
def main(
args: List[str],
) -> None:
# 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式。
client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
params = Sample.create_api_info()
# query params
queries = {}
queries['ServiceParameters'] = '{"email":"example@alibabacloud.com","ip":"x.x.x.x","deviceToken":"******"}'
queries['Service'] = 'account_abuse_intl_pro'
# runtime options
runtime = util_models.RuntimeOptions()
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(queries)
)
# 复制代码运行请自行打印 API 的返回值
# 返回值为 Map 类型,可从 Map 中获得三类数据:响应体 body、响应头 headers、HTTP 返回的状态码 statusCode。
client.call_api(params, request, runtime)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
PHP SDK
单击此处下载PHP SDK源码。
PHP SDK的环境准备、安装使用请参见阿里云SDK开发指南。
PHP用例:
<?php
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
use saf\Request\V20190521 as saf;
// 初始化
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取账号的RAM用户AccessKey,来实现API访问的身份验证。运行本示例代码前,请确认配置这两个环境变量:ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET。
$iClientProfile = DefaultProfile::getProfile("cn-shanghai", getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'));
$client = new DefaultAcsClient($iClientProfile);
//设置参数
$request = new saf\ExecuteRequestRequest();
// 产品Service请参考[公共参数]文档中的Service字段描述
$request->setService('购买的产品Service');
$request->setServiceParameters('入参json字符串');
// 发起请求
$response = $client->getAcsResponse($request);
print_r("<br>");
print_r("test");
print_r("\r\n");
print_r($response);
print_r($client);
?>
如使用决策引擎:
<?php
namespace AlibabaCloud\SDK\Sample;
use Darabonba\OpenApi\OpenApiClient;
use AlibabaCloud\OpenApiUtil\OpenApiUtilClient;
use Darabonba\OpenApi\Models\Config;
use Darabonba\OpenApi\Models\Params;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\OpenApiRequest;
class Sample {
/**
* 使用AK&SK初始化账号Client
* @param string $accessKeyId
* @param string $accessKeySecret
* @return OpenApiClient Client
*/
public static function createClient($accessKeyId, $accessKeySecret){
$config = new Config([
// 必填,您的 AccessKey ID
"accessKeyId" => $accessKeyId,
// 必填,您的 AccessKey Secret
"accessKeySecret" => $accessKeySecret
]);
// Endpoint 请参考 https://api.aliyun.com/product/saf
$config->endpoint = "saf.ap-southeast-1.aliyuncs.com";
return new OpenApiClient($config);
}
/**
* API 相关
* @return Params OpenApi.Params
*/
public static function createApiInfo(){
$params = new Params([
// 接口名称
"action" => "RequestDecision",
// 接口版本
"version" => "2019-05-21",
// 接口协议
"protocol" => "HTTPS",
// 接口 HTTP 方法
"method" => "POST",
"authType" => "AK",
"style" => "RPC",
// 接口 PATH
"pathname" => "/",
// 接口请求体内容格式
"reqBodyType" => "json",
// 接口响应体内容格式
"bodyType" => "json"
]);
return $params;
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
// 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式。
$client = self::createClient(getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'));
$params = self::createApiInfo();
// query params
$queries = [];
$queries["ServiceParameters"] = "{\"email\":\"example@alibabacloud.com\",\"ip\":\"x.x.x.x\",\"deviceToken\":\"******\"}";
$queries["EventCode"] = "de_*****";
// runtime options
$runtime = new RuntimeOptions([]);
$request = new OpenApiRequest([
"query" => OpenApiUtilClient::query($queries)
]);
// 复制代码运行请自行打印 API 的返回值
// 返回值为 Map 类型,可从 Map 中获得三类数据:响应体 body、响应头 headers、HTTP 返回的状态码 statusCode。
$client->callApi($params, $request, $runtime);
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Sample::main(array_slice($argv, 1));
如使用场景风控:
<?php
namespace AlibabaCloud\SDK\Sample;
use Darabonba\OpenApi\OpenApiClient;
use AlibabaCloud\OpenApiUtil\OpenApiUtilClient;
use Darabonba\OpenApi\Models\Config;
use Darabonba\OpenApi\Models\Params;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\OpenApiRequest;
class Sample {
/**
* 使用AK&SK初始化账号Client
* @param string $accessKeyId
* @param string $accessKeySecret
* @return OpenApiClient Client
*/
public static function createClient($accessKeyId, $accessKeySecret){
$config = new Config([
// 必填,您的 AccessKey ID
"accessKeyId" => $accessKeyId,
// 必填,您的 AccessKey Secret
"accessKeySecret" => $accessKeySecret
]);
// Endpoint 请参考 https://api.aliyun.com/product/saf
$config->endpoint = "saf.ap-southeast-1.aliyuncs.com";
return new OpenApiClient($config);
}
/**
* API 相关
* @return Params OpenApi.Params
*/
public static function createApiInfo(){
$params = new Params([
// 接口名称
"action" => "ExecuteRequest",
// 接口版本
"version" => "2019-05-21",
// 接口协议
"protocol" => "HTTPS",
// 接口 HTTP 方法
"method" => "POST",
"authType" => "AK",
"style" => "RPC",
// 接口 PATH
"pathname" => "/",
// 接口请求体内容格式
"reqBodyType" => "json",
// 接口响应体内容格式
"bodyType" => "json"
]);
return $params;
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
// 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式。
$client = self::createClient(getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'));
$params = self::createApiInfo();
// query params
$queries = [];
$queries["ServiceParameters"] = "{\"email\":\"example@alibabacloud.com\",\"ip\":\"x.x.x.x\",\"deviceToken\":\"******\"}";
$queries["Service"] = "account_abuse_intl_pro";
// runtime options
$runtime = new RuntimeOptions([]);
$request = new OpenApiRequest([
"query" => OpenApiUtilClient::query($queries)
]);
// 复制代码运行请自行打印 API 的返回值
// 返回值为 Map 类型,可从 Map 中获得三类数据:响应体 body、响应头 headers、HTTP 返回的状态码 statusCode。
$client->callApi($params, $request, $runtime);
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Sample::main(array_slice($argv, 1));
C# SDK
单击此处下载C# SDK源码。
C# SDK的环境准备、安装使用请参见阿里云SDK开发指南。
C#用例
using System;
using System.Collections.Generic;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Auth;
namespace CommonRequestDemo
{
class Program
{
static void Main(string[] args)
{
// Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
AlibabaCloudCredentialsProvider provider = new AccessKeyCredentialProvider(
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
/* use STS Token
AlibabaCloudCredentialsProvider provider = new StsCredentialProvider(
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_SECURITY_TOKEN"));
*/
IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", provider);
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
CommonRequest request = new CommonRequest();
request.Method = MethodType.POST;
request.Domain = "saf.cn-hangzhou.aliyuncs.com";
request.Version = "2019-05-21";
request.Action = "ExecuteRequest";
// request.Protocol = ProtocolType.HTTP;
try {
CommonResponse response = client.GetCommonResponse(request);
Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
}
catch (ServerException e)
{
Console.WriteLine(e);
}
catch (ClientException e)
{
Console.WriteLine(e);
}
}
}
}
Golang SDK
单击此处下载Golang SDK源码。
Golang SDK的环境准备、安装使用请参见阿里云SDK开发指南。
Golang用例:
package main
import (
"os"
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/services/saf"
)
func main() {
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取账号的RAM用户AccessKey,来实现API访问的身份验证。运行本示例代码前,请确认配置这两个环境变量:ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET。
client, err := saf.NewClientWithAccessKey("cn-shanghai", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
request := saf.CreateExecuteRequestRequest()
endpoints.AddEndpointMapping("cn-shanghai", "saf", "saf.cn-shanghai.aliyuncs.com")
// 产品Service请参考[公共参数]文档中的Service字段描述
request.Service = "购买的产品Service"
request.ServiceParameters = "入参json字符串"
request.Scheme = "https"
response, err := client.ExecuteRequest(request)
if err != nil {
fmt.Print(err.Error())
}
fmt.Printf("response code is %#v\n", response.Code)
fmt.Printf("response data is %#v\n", response.Data)
fmt.Printf("response message is %#v\n", response.Message)
fmt.Printf("response requestId is %#v\n", response.RequestId)
}
Node.js
单击此处下载Node.js SDK源码。
Node.js SDK的环境准备、安装使用请参见阿里云SDK开发指南。
执行以下命令安装@alicloud/pop-core模块。命令中的--save会将模块写入应用的package.json文件中,作为依赖模块。
$ npm install @alicloud/pop-core --save
Node.js用例:
const Core = require('@alicloud/pop-core');
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取账号的RAM用户AccessKey,来实现API访问的身份验证。运行本示例代码前,请确认配置这两个环境变量:ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET。
var client = new Core({
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint: 'https://saf.cn-shanghai.aliyuncs.com',
apiVersion: '2019-05-21'
});
var params = {
"RegionId": "cn-shanghai",
// 产品Service请参考[公共参数]文档中的Service字段描述
"Service": "购买的产品Service",
"ServiceParameters": "入参json字符串"
}
var requestOption = {
method: 'POST'
};
client.request('ExecuteRequest', params, requestOption).then((result) => {
console.log(JSON.stringify(result));
}, (ex) => {
console.log(ex);
})
Ruby SDK
单击此处下载Ruby SDK源码。
Ruby SDK的环境准备、安装使用请参见阿里云SDK开发指南。
执行以下命令安装 Alibaba Cloud Core SDK for Ruby:
$ gem install aliyunsdkcore
Ruby用例:
require 'aliyunsdkcore'
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取账号的RAM用户AccessKey,来实现API访问的身份验证。运行本示例代码前,请确认配置这两个环境变量:ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET。
client = RPCClient.new(
access_key_id: ENV['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret: ENV['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint: 'https://saf.cn-shanghai.aliyuncs.com',
api_version: '2019-05-21'
)
response = client.request(
action: 'ExecuteRequest',
params: {
"RegionId": "cn-shanghai",
# 产品Service请参考[公共参数]文档中的Service字段描述
"Service": "购买的产品Service",
"ServiceParameters": "入参json字符串"
},
opts: {
method: 'POST'
}
)
print response