detectrisk
接口说明
检测用户是否是作弊用户。
请求地址
POST https://openapi.baidu.com/rest/2.0/smartapp/detectrisk?access_token=ACCESS_TOKEN
方法参数
query 参数
参数名 | 类型 | 是否必须 | 描述 |
---|---|---|---|
access_token | String | 是 | 接口调用凭证 |
post 参数
参数名 | 类型 | 是否必须 | 描述 |
---|---|---|---|
appkey | String | 是 | 小程序 appkey,智能小程序 AppKey 示例:4fecoAqgCIUtzIyA4FAPgoyrc4oUc25c |
xtoken | JSON | 是 | 小程序通过swan-getSystemRiskInfo 获取的内容,格式:{“key”:”xxxx”,”value”:”xxxx”} |
type | String | 是 | 运营活动的类型,该值由风控平台分配。目前只有一种 marketing |
clientip | String | 是 | 客户端的 IP,非小程序服务本地 IP,示例:127.0.0.1 |
ts | Int | 是 | 服务器的时间戳,秒级别,示例:1598528349 |
ev | String | 否 | 事件类型,预先分配事件 ID 定义。 1、点击活动按钮(或者活动操作),活动相关操作默认选择此事件 2、 进入活动页面 3、注册 4、登录 5、分享 6、点赞 7、评论 8、 提现 9、下单/提单 10、支付 11、业务自定义动作 12、浏览 feed 13、开宝箱 14、领取红包 15、分享 feed 16、做任务 17、签到 18、排行榜 19、邀请 20、新客红包 21、摇一摇 22、语音红包 23、视频红包 24、金融授信 25、答题 |
useragent | String | 否 | 客户端请求小程序 Server 的 useragent,示例:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36 |
phone | String | 否 | 加密后的电话号码,加密方法:sha1 |
返回值说明
名称 | 类型 | 描述 |
---|---|---|
errno | Int | 错误码 0:正确返回,非 0:异常返回 |
errmsg | String | 错误信息 |
request_id | String | 请求 ID,标识一次请求 |
data | Object | 详细数据,errno 为 0 的情况下才有意义 |
data 字段描述
名称 | 类型 | 描述 |
---|---|---|
level | String | 风险级别,目前有四个,风险等级依次降低(其中 1 最高,4 最低) 1 - 高危 2 - 嫌疑 3 - 普通 4 - 正常。 建议开发者将风险等级为 1、2 的做拦截处理 |
tag | Array | 对应的描述 |
返回值示例
{
"data": {
"level": "3",
"tag": [
"空"
]
},
"errmsg": "succ",
"errno": 0,
"request_id": "3922098303",
"timestamp": 1561110003
}
返回值示例
错误码 | 描述 |
---|---|
400 | 请求参数错误 |
20020100 | 解析失败,请检查xtoken参数是否正确 |
20020200 | 服务端内部异常,请稍候重试 |
检测作弊用户参考代码
- PHP
- GOLANG
<?php
/**
* @desc php curl方式检测用户是否是作弊用户
*/
// 参考 accessToken 获取文档;
$accessToken = "xxx";
// 小程序 appKey,从 B 端平台获取;
$appKey = "xxxx";
// 获取方式参考文档中 "post 参数" 解释
$xtokenArr = array(
"key" => "XXX",
"value" => "XXX"
);
// 用户 ip
$clientIp = "xxx.xxx.xxx.xxx";
// 11位明文手机号
$phone = "130xxxxxxxx";
// 从请求 header 中获取
$useragent = "xxxxxxx";
// ev 1 为点击按钮获取,请按照文档设置合理的数值
$ev = "1";
$ret = dectectRisk($accessToken, $appKey, $xtokenArr, $clientIp, $phone, $useragent, $ev);
var_dump($ret);
/**
* @desc 发起检测用户是否是作弊用户请求
*/
function dectectRisk($accessToken, $appKey, $xtokenArr, $clientIp, $phone, $useragent, $ev){
$url = "https://openapi.baidu.com/rest/2.0/smartapp/detectrisk?access_token={$accessToken}";
$encryptedPhone = sha1($phone);
$postDataArr = array(
'appkey' => $appKey,
'xtoken' => json_encode($xtokenArr),
// 风控类型 目前只有 marketing
'type' => "marketing",
'clientip' => $clientIp,
'ts' => time(),
'ev' => $ev,
'useragent' => $useragent,
'phone' => $encryptedPhone,
);
$resp = curlPost($url, $postDataArr);
return $resp;
}
/**
* @desc curl POST请求,可以按照自己实际编程环境替换
* @param string $url 请求的url地址
* @param array $postDataArr 传递的数组参数
* @return string 检测结果json字符串
*/
function curlPost($url, $postDataArr){
$headerArr =array("Content-type:application/x-www-form-urlencoded");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postDataArr);
curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArr);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
// Go http PostForm 方式检测用户是否是作弊用户
package main
import (
"crypto/sha1"
"fmt"
"net/url"
"strconv"
"strings"
"time"
"encoding/json"
"io/ioutil"
"log"
"net/http"
)
// 返回的信息
type detectriskResp struct {
Errno int `json:"errno"`
Errmsg string `json:"errmsg"`
RequestId string `json:"request_id"`
Timestamp int64 `json:"timestamp"`
Data struct {
Level string `json:"level"`
Tag []string `json:"tag"`
} `json:"data"`
}
func main() {
// 获取方式参考文档中 "post 参数" 解释
xtokenMap := map[string]string{
"key": "XXX",
"value": "XXX",
}
xtokenByte, err := json.Marshal(xtokenMap)
if err != nil {
log.Fatalln(err)
return
}
// 参考 accessToken 获取文档;
accessToken := "xxx"
// 小程序 appKey,从 B 端平台获取;
appKey := "xxxx"
// 用户 ip
clientIp := "xxx.xxx.xxx.xxx"
// 11位明文手机号
phone := "130xxxxxxxx"
// 11位明文手机号
useragent := "xxxxxxx"
// ev 1 为点击按钮获取,请按照文档设置合理的数值
ev := "1"
xtoken := string(xtokenByte)
resp, err := dectectRisk(accessToken, appKey, xtoken, clientIp, ev, useragent, phone)
fmt.Println(resp, err)
}
// dectectRisk 发起检测用户是否是作弊用户请求
func dectectRisk(accessToken, appKey, xtoken, clientIp, ev, useragent, phone string) (*detectriskResp, error) {
urlPath := "https://openapi.baidu.com/rest/2.0/smartapp/detectrisk?access_token=" + accessToken
h := sha1.New()
h.Write([]byte(phone))
phoneSha1 := fmt.Sprintf("%x", h.Sum(nil))
timeNowStr := strconv.FormatInt(time.Now().Unix(), 10)
data := make(url.Values)
data.Add("appkey", appKey)
data.Add("xtoken", xtoken)
// 风控类型 目前只有 marketing
data.Add("type", "marketing")
data.Add("clientip", clientIp)
data.Add("ts", timeNowStr)
data.Add("ev", ev)
data.Add("useragent", useragent)
data.Add("phone", phoneSha1)
resp, err := netPost(urlPath, &data)
if err != nil {
log.Println(err)
return nil, err
}
return resp, nil
}
// netPost POST请求,可以按照自己实际编程环境替换
func netPost(urlPath string, data *url.Values) (*detectriskResp, error) {
req, err := http.NewRequest("POST", urlPath, strings.NewReader(data.Encode()))
req.Header.Add("content-type", "application/x-www-form-urlencoded")
if err != nil {
log.Println(err)
return nil, err
}
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Do(req)
if err != nil || resp.Body == nil {
log.Println(err)
return nil, err
}
defer resp.Body.Close()
result, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return nil, err
}
respData := &detectriskResp{}
err = json.Unmarshal(result, respData)
if err != nil {
log.Println(err)
return nil, err
}
return respData, nil
}