话接上文:【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 秒)
以上就是后端接入的大抵流程。实现后端接入之后,即可进行调试,并部署上线,最初能够在后盾实时看到危险数据。
以上。
实时风控引擎:收费试用