本文介紹如何通過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