detectrisk

接口说明

检测用户是否是作弊用户。

请求地址

  1. POST https://openapi.baidu.com/rest/2.0/smartapp/detectrisk?access_token=ACCESS_TOKEN

方法参数

query 参数

参数名类型是否必须描述
access_tokenString接口调用凭证

post 参数

参数名类型是否必须描述
appkeyString小程序 appkey,智能小程序 AppKey 示例:4fecoAqgCIUtzIyA4FAPgoyrc4oUc25c
xtokenJSON小程序通过swan-getSystemRiskInfo获取的内容,格式:{“key”:”xxxx”,”value”:”xxxx”}
typeString运营活动的类型,该值由风控平台分配。目前只有一种 marketing
clientipString客户端的 IP,非小程序服务本地 IP,示例:127.0.0.1
tsInt服务器的时间戳,秒级别,示例:1598528349
evString事件类型,预先分配事件 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、答题
useragentString客户端请求小程序 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
phoneString加密后的电话号码,加密方法:sha1

返回值说明

名称类型描述
errnoInt错误码 0:正确返回,非 0:异常返回
errmsgString错误信息
request_idString请求 ID,标识一次请求
dataObject详细数据,errno 为 0 的情况下才有意义

data 字段描述

名称类型描述
levelString风险级别,目前有四个,风险等级依次降低(其中 1 最高,4 最低)
1 - 高危
2 - 嫌疑
3 - 普通
4 - 正常。
建议开发者将风险等级为 1、2 的做拦截处理
tagArray对应的描述

返回值示例

  1. {
  2. "data": {
  3. "level": "3",
  4. "tag": [
  5. "空"
  6. ]
  7. },
  8. "errmsg": "succ",
  9. "errno": 0,
  10. "request_id": "3922098303",
  11. "timestamp": 1561110003
  12. }

返回值示例

错误码描述
400请求参数错误
20020100解析失败,请检查xtoken参数是否正确
20020200服务端内部异常,请稍候重试

检测作弊用户参考代码

  • PHP
  • GOLANG
  1. <?php
  2. /**
  3. * @desc php curl方式检测用户是否是作弊用户
  4. */
  5. // 参考 accessToken 获取文档;
  6. $accessToken = "xxx";
  7. // 小程序 appKey,从 B 端平台获取;
  8. $appKey = "xxxx";
  9. // 获取方式参考文档中 "post 参数" 解释
  10. $xtokenArr = array(
  11. "key" => "XXX",
  12. "value" => "XXX"
  13. );
  14. // 用户 ip
  15. $clientIp = "xxx.xxx.xxx.xxx";
  16. // 11位明文手机号
  17. $phone = "130xxxxxxxx";
  18. // 从请求 header 中获取
  19. $useragent = "xxxxxxx";
  20. // ev 1 为点击按钮获取,请按照文档设置合理的数值
  21. $ev = "1";
  22. $ret = dectectRisk($accessToken, $appKey, $xtokenArr, $clientIp, $phone, $useragent, $ev);
  23. var_dump($ret);
  24. /**
  25. * @desc 发起检测用户是否是作弊用户请求
  26. */
  27. function dectectRisk($accessToken, $appKey, $xtokenArr, $clientIp, $phone, $useragent, $ev){
  28. $url = "https://openapi.baidu.com/rest/2.0/smartapp/detectrisk?access_token={$accessToken}";
  29. $encryptedPhone = sha1($phone);
  30. $postDataArr = array(
  31. 'appkey' => $appKey,
  32. 'xtoken' => json_encode($xtokenArr),
  33. // 风控类型 目前只有 marketing
  34. 'type' => "marketing",
  35. 'clientip' => $clientIp,
  36. 'ts' => time(),
  37. 'ev' => $ev,
  38. 'useragent' => $useragent,
  39. 'phone' => $encryptedPhone,
  40. );
  41. $resp = curlPost($url, $postDataArr);
  42. return $resp;
  43. }
  44. /**
  45. * @desc curl POST请求,可以按照自己实际编程环境替换
  46. * @param string $url 请求的url地址
  47. * @param array $postDataArr 传递的数组参数
  48. * @return string 检测结果json字符串
  49. */
  50. function curlPost($url, $postDataArr){
  51. $headerArr =array("Content-type:application/x-www-form-urlencoded");
  52. $curl = curl_init();
  53. curl_setopt($curl, CURLOPT_URL, $url);
  54. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  55. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
  56. curl_setopt($curl, CURLOPT_POST, 1);
  57. curl_setopt($curl, CURLOPT_POSTFIELDS, $postDataArr);
  58. curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArr);
  59. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  60. $output = curl_exec($curl);
  61. curl_close($curl);
  62. return $output;
  63. }
  1. // Go http PostForm 方式检测用户是否是作弊用户
  2. package main
  3. import (
  4. "crypto/sha1"
  5. "fmt"
  6. "net/url"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "encoding/json"
  11. "io/ioutil"
  12. "log"
  13. "net/http"
  14. )
  15. // 返回的信息
  16. type detectriskResp struct {
  17. Errno int `json:"errno"`
  18. Errmsg string `json:"errmsg"`
  19. RequestId string `json:"request_id"`
  20. Timestamp int64 `json:"timestamp"`
  21. Data struct {
  22. Level string `json:"level"`
  23. Tag []string `json:"tag"`
  24. } `json:"data"`
  25. }
  26. func main() {
  27. // 获取方式参考文档中 "post 参数" 解释
  28. xtokenMap := map[string]string{
  29. "key": "XXX",
  30. "value": "XXX",
  31. }
  32. xtokenByte, err := json.Marshal(xtokenMap)
  33. if err != nil {
  34. log.Fatalln(err)
  35. return
  36. }
  37. // 参考 accessToken 获取文档;
  38. accessToken := "xxx"
  39. // 小程序 appKey,从 B 端平台获取;
  40. appKey := "xxxx"
  41. // 用户 ip
  42. clientIp := "xxx.xxx.xxx.xxx"
  43. // 11位明文手机号
  44. phone := "130xxxxxxxx"
  45. // 11位明文手机号
  46. useragent := "xxxxxxx"
  47. // ev 1 为点击按钮获取,请按照文档设置合理的数值
  48. ev := "1"
  49. xtoken := string(xtokenByte)
  50. resp, err := dectectRisk(accessToken, appKey, xtoken, clientIp, ev, useragent, phone)
  51. fmt.Println(resp, err)
  52. }
  53. // dectectRisk 发起检测用户是否是作弊用户请求
  54. func dectectRisk(accessToken, appKey, xtoken, clientIp, ev, useragent, phone string) (*detectriskResp, error) {
  55. urlPath := "https://openapi.baidu.com/rest/2.0/smartapp/detectrisk?access_token=" + accessToken
  56. h := sha1.New()
  57. h.Write([]byte(phone))
  58. phoneSha1 := fmt.Sprintf("%x", h.Sum(nil))
  59. timeNowStr := strconv.FormatInt(time.Now().Unix(), 10)
  60. data := make(url.Values)
  61. data.Add("appkey", appKey)
  62. data.Add("xtoken", xtoken)
  63. // 风控类型 目前只有 marketing
  64. data.Add("type", "marketing")
  65. data.Add("clientip", clientIp)
  66. data.Add("ts", timeNowStr)
  67. data.Add("ev", ev)
  68. data.Add("useragent", useragent)
  69. data.Add("phone", phoneSha1)
  70. resp, err := netPost(urlPath, &data)
  71. if err != nil {
  72. log.Println(err)
  73. return nil, err
  74. }
  75. return resp, nil
  76. }
  77. // netPost POST请求,可以按照自己实际编程环境替换
  78. func netPost(urlPath string, data *url.Values) (*detectriskResp, error) {
  79. req, err := http.NewRequest("POST", urlPath, strings.NewReader(data.Encode()))
  80. req.Header.Add("content-type", "application/x-www-form-urlencoded")
  81. if err != nil {
  82. log.Println(err)
  83. return nil, err
  84. }
  85. client := &http.Client{Timeout: 5 * time.Second}
  86. resp, err := client.Do(req)
  87. if err != nil || resp.Body == nil {
  88. log.Println(err)
  89. return nil, err
  90. }
  91. defer resp.Body.Close()
  92. result, err := ioutil.ReadAll(resp.Body)
  93. if err != nil {
  94. log.Println(err)
  95. return nil, err
  96. }
  97. respData := &detectriskResp{}
  98. err = json.Unmarshal(result, respData)
  99. if err != nil {
  100. log.Println(err)
  101. return nil, err
  102. }
  103. return respData, nil
  104. }