乐趣区

关于后端:Part-2连续更新实时风控决策系统的对接之后端接入

话接上文:【Part 1】间断更新:实时风控决策零碎的对接之前端接入

明天咱们来说一下风控决策零碎的后端对接。也就是上接原文的第三步。

Step 3:后端接入

1 第一步 申请 AppId

开明服务后可在实时危险决策的二级菜单“利用治理”中获取到 AppId、AppSecret。

2 第二步 下载 SDK 并接入

  • 非 maven 我的项目

    JAVA6 版本 SDK 下载点击下载.jar ),

    JAVA7、8 版本 SDK 下载点击下载.jar ),如需其余版本 SDK 请分割在线客服。

  • maven 我的项目引入依赖 (Java7 及以上版本)
<dependency>
  <groupId>com.dingxiang-inc</groupId>
  <artifactId>ctu-client-sdk</artifactId>
  <version>2.2</version>
</dependency>
  • PHP 版本 SDK 下载:点击下载
  • C# 版本 SDK 下载 反对.net framework 4.0:点击下载
  • Python 版本 SDK 下载:点击下载
  • NodeJS 版本 SDK 参考下方示例,间接从 npm 装置
  • Go 版本 SDK

接入事件的 event_code 和事件须要的参数,请征询官网在线客服

3 返回参数阐明

CtuRequest: 风控引擎的申请类,蕴含一次申请的所有业务数据

字段名称 类型 是否必须 阐明
eventCode String 事件的惟一编码,由顶象提供
flag String 申请标记,客户端能够标记该次申请
data Map<String, object> Map 构造,蕴含该次申请的业务数据
flag String Map 构造,蕴含该次申请的业务数据

CtuResponse:风控引擎返回的后果类,蕴含引擎返回的辨认后果

字段名称 类型 阐明
uuid String 服务端返回的申请标识码,供服务端排查问题
status String 服务端返回的状态
result CtuResult 服务端返回的辨认后果类

CtuResponse status 状态阐明

状态 code 形容 呈现的场景
SUCCESS 胜利 调用胜利无误
INVALID_REQUEST_PARAMS 申请不非法, 短少必须参数 1. 申请 url 中短少 sign 参数 2. 短少 AppId 3. 短少 eventCode 4. 短少执行策略过程中的某些字段指标, 在这种状况下会额定返回谬误形容信息在 CtuResult 中 extraInfo 的_rule_eval_error 和_error_policy, 标识产生在哪条策略, 哪条规定
INVALID_REQUEST_BODY 申请不非法, 申请 body 为空 申请中没有传 CtuRequest 对象
INVALID_REQUEST_NO_EVENT_DATA 申请不非法, 申请事件的数据为空 申请中没有传业务数据, `CtuRequest.data
INVALID_REQUEST_SIGN 申请签名谬误 申请签名校验失败
INVALID_APP_KEY 不非法的 AppId 找不到传入的 AppId
INVALID_EVENT_CODE 不非法的事件 传入的事件 Code 有误
INVALID_APP_EVENT_RELATION 利用和事件的绑定关系谬误 传入的 AppId 和事件 Code 没有关联关系
EVENT_GRAY_SCALE 事件有灰度管制, 非灰度申请 事件设置了灰度值, 本次申请非灰度申请
POLICY_HAS_ERROR 防控策略配置有谬误 执行策略过程中产生异样
NOT_SUPPORTED_POLICY_OPERATOR 不反对防控策略里的操作符 某个策略中应用的操作符不存在
SERVICE_INTERNAL_ERROR 服务器外部谬误 执行过程中产生了异样, 在这种状况下会额定返回谬误形容信息在 CtuResult 中 extraInfo 的_exception_msg
QPS_EXCEEDING_MAXIMUM_THRESHOLD 并发超过限度 流量过大时,服务端会进行限流,超出局部流量返回 ACCEPT

CtuResult 字段解释

字段名称 类型 阐明
riskLevel RiskLevel 类 该次申请的危险级别,枚举类型,包含 ACCEPT(无风险,倡议放过),REVIEW(不确定,须要进一步审核),REJECT(有危险,倡议回绝)
riskType String 危险类型,例如 垃圾注册,账号盗用
hitPolicyCode String 命中的策略 code
handleFlag String 处理标识
hitPolicyName String 命中的策略题目
handleFlag String 处理标识
hitRules List 命中的规定列表,每个规定包含规定 id 和左变量
suggestPolicies List 倡议的防控策略
suggestion List 命中策略处理倡议
flag String 客户端申请带上来的标记
extraInfo Map<String, Object> 附加信息

4 示例代码

JAVA 版

/**
 * 风控引擎 url
 **/
public static final String url = "https://sec.dingxiang-inc.com/ctu/event.do";
/**
 * 利用 AppId,公钥
 **/
public static final String appId = "你的 AppId";
/**
 * 利用 AppSecret,私钥
 **/
public static final String appSecret = "你的 AppSecret";

public static void checkRisk() throws Exception {
    /** 业务申请数据,仅供参考,具体传参根据风控场景而定 **/
    Map<String, Object> data = new HashMap<>();
    data.put("const_id", "exxxxxxwbZsF1PqoflWOyhKLIhAzw9X1");
    // 设施指纹 token,端上获取 传入后盾
    data.put("user_id", 456799324); // 用户 ID
    data.put("phone_number", "13800138000"); // 手机号
    data.put("source", 2); // 登录起源
    data.put("ip", "127.0.0.1"); // 终端用户的 ip 地址
    data.put("register_date", "注册工夫,工夫格局 2017-09-27 10:09:20");
    // 波及工夫参数,请勿传 date 类型,须要转为规范工夫格局 yyyy-MM-dd HH:mm:ss 后以 String 类型传入
    data.put("ext_amount", "123.456"); // 波及浮点类型,请转为 String 类型传入


    /** 创立一个申请数据实例 **/
    CtuRequest request = new CtuRequest();
    /** 设置事件编码 **/
    request.setEventCode("event_code");
    request.setData(data);
    request.setFlag("申请惟一标识符,可自定义,可选");
    /** 创立一个客户端实例 **/
    CtuClient client = new CtuClient(url, appId, appSecret);
   /** CtuClient client = new CtuClient(url,appKey,appSecret, connectTimeout, connectionRequestTimeout,socketTimeout)
     用户能够自定义超时设置
     connectTimeout,connectionRequestTimeout,socketTimeout 单位:毫秒
     默认超时设置均为 2000 毫秒
     **/
    /** 向风控引擎发送申请,获取引擎返回的后果 **/
    CtuResponse response = client.checkRisk(request);
    if (RiskLevel.ACCEPT.equals(response.getResult().getRiskLevel())) {System.out.printf(JSON.toJSONString(response));
        //... 业务代码,以后申请没有危险
    } else if (RiskLevel.REVIEW.equals(response.getResult().getRiskLevel())) {System.out.printf(JSON.toJSONString(response));
        //... 业务代码,以后申请有肯定危险,倡议复审
    } else if (RiskLevel.REJECT.equals(response.getResult().getRiskLevel())) {System.out.printf(JSON.toJSONString(response));
        //... 业务代码,以后申请有危险,倡议回绝
    }
}

PHP 版

include "./CtuClient.php";

$url = "https://sec.dingxiang-inc.com/ctu/event.do";
$appId = "你的 AppId";
$appSecret = "你的 AppSecret";

// 时区
ini_set('date.timezone','Asia/Shanghai');

// 结构申请参数
$request = new CtuClient($url, $appId, $appSecret);
$reqJsonString =  json_encode($request, JSON_UNESCAPED_UNICODE);
$ctuRequest = new CtuRequest();

// $data 具体的业务参数, 依据业务理论状况传入
$data = array (
  "const_id" => "exxxxxxKgiPKBMmcwbZsF1PqoflWOyhKLIhAzw9X1",  // 设施指纹 token,端上获取 传入后盾
  "user_id" => "438888824",
  "phone_number" => "13800138000",
  "source" => 2,
  "activity_id" => 1,
  "register_date" => date('Y-m-d H:i:s'),
  "ext_user_level" => 5,
  "ext_open_id" => "58888888174dde1f",
  "ip" => "127.0.0.1"
);

// $eventCode 事件 code
$ctuRequest -> eventCode = "event_code";
$ctuRequest -> flag = "activity_" . time();
$ctuRequest -> data = $data;

// 申请超时工夫, 单位秒
$timeout = 1;
// 调用风控引擎
$responseData = $request -> checkRisk($ctuRequest, $timeout);
echo "危险引擎返回后果:" . $responseData. "\n";
$jsonResult = json_decode($responseData, true);
$result = $jsonResult['result']["riskLevel"];

// ... 依据不同危险做出相干解决
if ($result == "ACCEPT") {
    // 无风险, 倡议放过
    echo "危险后果: 无风险, 倡议放过" . "\n";
} else if ($result == "REVIEW") {
    // 不确定, 须要进一步审核
    echo "危险后果: 不确定, 须要进一步审核" . "\n";
} else if ($result == "REJECT") {
    // 有危险, 倡议回绝
    echo "危险后果: 有危险, 倡议回绝" . "\n";
}

C# 版

String appId = "560074aad5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
 /** 利用 AppId,公钥 **/

String appSecret = "ea2662cxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
/** 利用 AppSecret,私钥 **/

String url = "https://sec.dingxiang-inc.com/ctu/event.do";
/** 风控引擎 url**/
CtuClient ctuClient = new CtuClient(url, appId, appSecret);

Dictionary<string, string> data = new Dictionary<string, string>();
/** 业务申请数据,依据理论状况传入 **/
data.Add("const_id", "exxxxxxKgiPKBMmcwbZsF1PqoflWOyhKLIhAzw9X1");// 设施指纹 token,端上获取 传入后盾
data.Add("user_id", "438888824");
data.Add("ext_referer", "ext_refererext_referer");
data.Add("phone_number", "1801002000");
data.Add("ip", "123.21.21.12");
data.Add("time", "2016-10-15 20:12:12"); // 工夫格局
CtuRequest ctuRequest = new CtuRequest();
ctuRequest.data = data;
ctuRequest.eventCode = "your event code";
ctuRequest.flag = "自定义标记,能够用 uuid";
CtuResponse response = ctuClient.CheckRisk(ctuRequest);

/** 向风控引擎发送申请,获取引擎返回的后果 **/
if (String.Equals(response.result.RiskLevel, "ACCEPT"))
{//... 业务代码,以后申请没有危险}
else if (String.Equals(response.result.RiskLevel, "REVIEW"))
{//... 业务代码,以后申请有肯定危险,倡议复审}
else if (String.Equals(response.result.RiskLevel, "REJECT"))
{//... 业务代码,以后申请有危险,倡议回绝}

Python 版

# coding=utf-8
import json
from CtuRequest import CtuRequest
from CtuClient import CtuClient
from RiskLevel import RiskLevel

class Demo:
    URL = "https://sec.dingxiang-inc.com/ctu/event.do"
    #风控引擎 url
    APP_ID = 'appId'
    #利用 AppId,公钥
    APP_SECERT = 'appSecret'
    #利用 AppSecret,私钥
    if __name__ == '__main__':
        event_code = 'event_code'
        flag = 'test1'
        data = { #业务申请数据,依据理论状况传入
            'const_id': 'constId', #设施指纹 token,端上获取 传入后盾
            'user_id': '123',
            'phone_number': '15700000000',
            'ip': '127.0.0.1'
        }
        ctuRequest = CtuRequest(event_code, flag, data)
        client = CtuClient(URL, APP_ID, APP_SECERT)
        #client.timeout = 2
        #设置超时工夫 默认两秒
        ctuResponse = client.checkRisk(ctuRequest)
        #向风控引擎发送申请,获取引擎返回的后果
        print ctuResponse
        if ctuResponse["result"]["riskLevel"] == RiskLevel.ACCEPT:
            print "以后申请没有危险"
            pass
        elif ctuResponse["result"]["riskLevel"] == RiskLevel.REVIEW:
            print "以后申请有肯定危险,倡议复审"
            pass
        elif ctuResponse["result"]["riskLevel"] == RiskLevel.REJECT:
            print "以后申请有危险,倡议回绝"
            pass
NodeJS 版本
npm install dx-ctu-client-sdk --save
const ClientSDK = require('dx-ctu-client-sdk')

const sdk = new ClientSDK('服务 url', '您的 appId', '您的 appSecret')

sdk.checkRisk({
  "data": {
    "phone_number": "17800000000",
    "user_id": "12345326232",
    "ip": "125.121.232.219",
    "const_id": "N4RG6TtsY6ILK5ePY6HVtjj12pu5Yi5wnjnbaUI41" // 设施指纹 token,端上获取 传入后盾
  },
  "eventCode": "test_event_1",
  "flag": "test1"
}).then((resp) => {
  const level = resp.result.riskLevel

  if (level === 'ACCEPT') {// 业务代码,以后申请没有危险} else if (level === 'REVIEW') {// 业务代码,以后申请有肯定危险,倡议复审} else if (level === 'REJECT') {// 业务代码,以后申请有危险,倡议回绝}
})

// 设置超时工夫
// checkRisk 第二个参数为超时工夫,默认为 2000(2 秒)

以上就是后端接入的大抵流程。实现后端接入之后,即可进行调试,并部署上线,最初能够在后盾实时看到危险数据。

以上。

实时风控引擎:收费试用

退出移动版