SDK方式调用

本文介绍如何通过SDK对接风险识别产品,这是一种简单便捷的API对接方式。

SDK调用方式介绍

通过使用阿里云风险识别SDK,调用方无需关注签名验证以及Body格式构建等繁琐的事情,推荐您使用风险识别SDK。目前支持JAVA、Python、PHP、C#、Golang、Node.js、Ruby7SDK。

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>

单击地址1地址2访问JAVA Maven仓库。

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开发指南

  1. 安装SDK核心库。

    • 如果您使用Python 2.x,执行以下命令,安装阿里云SDK核心库:

      pip install aliyun-python-sdk-core
    • 如果您使用Python 3.x,执行以下命令,安装阿里云SDK核心库:

      pip install aliyun-python-sdk-core-v3
  2. 安装云产品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