话接上文:【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: 风控引擎的申请类,蕴含一次申请的所有业务数据

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

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

字段名称类型阐明
uuidString服务端返回的申请标识码,供服务端排查问题
statusString服务端返回的状态
resultCtuResult服务端返回的辨认后果类

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 字段解释

字段名称类型阐明
riskLevelRiskLevel类该次申请的危险级别,枚举类型,包含 ACCEPT(无风险,倡议放过),REVIEW(不确定,须要进一步审核),REJECT(有危险,倡议回绝)
riskTypeString危险类型,例如 垃圾注册,账号盗用
hitPolicyCodeString命中的策略code
handleFlagString处理标识
hitPolicyNameString命中的策略题目
handleFlagString处理标识
hitRulesList命中的规定列表,每个规定包含规定id和左变量
suggestPoliciesList倡议的防控策略
suggestionList命中策略处理倡议
flagString客户端申请带上来的标记
extraInfoMap<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-8import jsonfrom CtuRequest import CtuRequestfrom CtuClient import CtuClientfrom RiskLevel import RiskLevelclass 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 "以后申请有危险,倡议回绝"            passNodeJS版本npm install dx-ctu-client-sdk --saveconst 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秒)

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

以上。

实时风控引擎:收费试用