接口说明
当前风控API包括如下2项能力。
- “帐号风险识别”提供给第三方APP商户和开发者识别授权登录主体黑灰产恶意等级的能力。由于微信安全团队在微信内通过风控拦截了相当一部分黑灰产团伙,阻止其进一步作恶,因此他们将目光投向了授权登录的第三方商户或者APP。通过该能力,第三方商户和开发者可以识别授权登录主体的风险恶意等级,以便快速地制定安全策略,保障业务安全。
- “营销活动反作弊”能力是微信安全团队为了与黑灰产团伙长期对抗而开发的强大安全技术,通过风险识别引擎,对小程序、微信授权登录的移动应用的营销活动提供安全技术支持和防护意见,精准识别“羊毛党”、“黄牛党”等恶意群体。在第三方App的商户进行补贴、优惠等商业营销活动时,保护第三方产品的营销资源,降低业务安全问题给产品带来的损失,为相关活动保驾护航。
申请使用
目前微信安全风险识别能力需要申请使用,发送邮件到 elontian@tencent.com,填写公司名、对接人手机号码、小程序名、使用场景说明。我们将在3个工作日内,与您联系接入使用。
接口鉴权方式
接口地址:POST https://api.weixin.qq.com/tcb/servicemarket?access_token=this-is-your-accesstoken
说明:接口调用的参数是
ACCESS_TOKEN
,所以需要获取开发者票据:
- access_token,开发者票据获取方式(小程序):https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html
- access_token,开发者票据获取方式(移动应用):https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Smart_APIs/servicemarket.html
示例:
curl https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appId&secret=secret
接口参数说明
请求
小程序请求数据示例
{
"service": "wxd8a88093cf541a77",
"api": "weopensecriskservice",
"data": {
"openid": "openid",
"serviceid": 3,
"sale_risk": {
"mchcode": "mchcode",
"phonenum": "phonenum",
"certid": "certid",
"wifibssid": "wifibssid",
"clientip": "clientip",
"deviceid": "deviceid"
}
},
"client_msg_id": "1234567890"
}
请求参数
参数名称 | 描述 | 类型 | 是否必选 |
---|---|---|---|
access_token | 开发者票据 | string | 是 |
service | 服务 ID,业务风险识别服务 ID:wxd8a88093cf541a77 | string | 是 |
api | 接口名,业务风险识别接口名:weopensecriskservice | string | 是 |
data | 服务提供方接口定义的 JSON 格式的数据 | string | 是 |
client_msg_id | 随机字符串 ID,调用方请求的唯一标识,随机值,例如:client_msg_id_${random_string} | string | 是 |
服务请求 data 数据说明
参数名称 | 描述 | 类型 | 是否必选 |
---|---|---|---|
openid | 用户 openid | string | 是 |
serviceid | 营销风险识别 serviceid = 3,账号风险识别为 2 | number | 是 |
user_access_token | 用户票据,仅移动应用必须 注意:当来源是移动应用时,为必选项。 |
string | 否 |
mchcode | 商户号 | string | 否 |
phonenum | 用户手机号 | string | 否 |
certid | 证件 ID | string | 否 |
wifibssid | 用户网络环境 WIFI 信息 | string | 否 |
clientip | 用户客户端 IP | string | 否 |
deviceid | 用户设备信息(Android:IMEI;iOS:IDFA) | string | 否 |
返回
返回数据示例
{
"errcode": 0,
"errmsg": "ok",
"data": "{\"code\": 0,\"msg\": \"$msg\",\"data\":{\"risklevel\": 3}"
}
服务返回 data 说明
参数名称 | 描述 | 类型 | 是否必选 |
---|---|---|---|
code | 返回状态码 | number | 是 |
msg | 返回说明信息,若 code 码正常则此处为空,若 code 码为错误则次数说明错误原因 | string | 是 |
data.risklevel | 风险识别等级: 0-无风险 1-低风险 2-中风险 3-高风险 风险等级>=1,业务侧可以考虑增加风控措施 |
number | 是 |
服务返回 data 内 code 字段说明
返回码 | 说明 |
---|---|
0 | 请求成功 |
1 | data 内参数错误 |
2 | 非正常的 openid |
3 | 该产品尚无权限调用 |
4 | 内部服务错误 |
5 | 内部服务错误 |
6 | 内部服务错误 |
7 | 内部服务错误 |
8 | 内部服务错误 |
9 | serviceid 参数错误 |
10 | 内部服务错误 |
11 | 非正常的 openid |
12 | 当前用户未登录无法使用该产品 |
13 | 余额不足,无法请求 |
调用接口
营销活动反作弊
接口说明:将 小程序请求数据示例 中的数据 openid
替换为真实用户 openid
可以调通,另外注意:sale_risk
下级参数可选,但是 sale_risk
本身不可省略。
调用示例:
curl --header "Content-Type: application/json" --request POST --data \
'{"service":"wxd8a88093cf541a77","api":"weopensecriskservice","data":{"openid":"oPDER5U0VMARiyXxUruU4SYmyOiw","serviceid":3,"sale_risk":{"mchcode":"mchcode","phonenum":"phonenum","certid":"certid","wifibssid":"wifibssid","clientip":"clientip","deviceid":"deviceid"}},"client_msg_id":"1234567890"}' \
https://api.weixin.qq.com/tcb/servicemarket\?access_token\=this-is-your-accesstoken
{"errcode":0,"errmsg":"ok","data":"{\"code\":0,\"msg\":\"请求成功\",\"data\":{\"risklevel\":0}}","request_id":"MLx7w80xCxC2GxvudqpZjJXbYWsuQhYmPobZki66-kFOTVB9xG3UiCDh8hIb8X8Njow","provider_errmsg":""}
帐号风险识别
接口说明:将 小程序请求数据示例 中的数据 openid
替换为真实用户 openid
可以调通,另外注意:login_risk
下级参数可选,但是 login_risk
本身不可省略。
调用示例:
curl --header "Content-Type: application/json" --request POST --data \
'{"service":"wxd8a88093cf541a77","api":"weopensecuseracctrisklevel","data":{"openid":"oPDER5U0VMARiyXxUruU4SYmyOiw","serviceid":2,"login_risk":{"mchcode":"mchcode","phonenum":"phonenum","certid":"certid","wifibssid":"wifibssid","clientip":"clientip","deviceid":"deviceid"}},"client_msg_id":"client_msg_id_wxd8a88093cf541a77"}' \
https://api.weixin.qq.com/tcb/servicemarket?access_token=43_j1p5v9s_euINp-JJu7hfP0FFoWtK7ztuiQJBXNsxlLdE1L4KA-dEJfOoLHWf1oZhH2ZnnULFvOQZTQtEIKLyHD9ZXYdbXVyIIYbbZNU27idcwUn7EUUqesEFXVAMlqFxdTLNZ6RzNTxxxKInOTShAEAXCB
{"errcode":0,"errmsg":"ok","data":"{\"code\":0,\"msg\":\"请求成功\",\"data\":{\"risklevel\":0}}","request_id":"MLzsyVZzE4Wru-xlcihkjbFws5ByWab9DQPLH_Ku7l9eQASbp9y6GnB7cgmoXNXSBvE","provider_errmsg":""}
代码示例
营销活动反作弊 接口代码示例:
pip install requests
python getsalerisk.py
getsalerisk.py 代码如下:
# -*- coding: utf-8 -*-
import requests
import json
def get_access_token(appid, secret):
getAccessTokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}'.format(appid, secret)
getAccessTokenReq = requests.get(getAccessTokenUrl)
getAccessTokenReqContent = json.loads(getAccessTokenReq.text)
access_token = getAccessTokenReqContent['access_token']
return access_token
def getsalerisk(appid, secret, openid):
# 获取开放者票据
access_token = get_access_token(appid, secret)
# 请求营销反作弊接口
Url = 'https://api.weixin.qq.com/wxa/servicemarket?access_token={0}'.format(access_token)
data = json.dumps({
"service": "wxd8a88093cf541a77",
"api": "weopensecriskservice",
"data": {
"openid": "{0}".format(openid),
"serviceid": 3,
"sale_risk": {
"mchcode": "mchcode",
"phonenum": "phonenum",
"certid": "certid",
"wifibssid": "wifibssid",
"clientip": "clientip",
"deviceid": "deviceid"
}},
"client_msg_id": "client_msg_id_wxd8a88093cf541a77"
})
session = requests.Session()
req = session.post(Url, data)
total_seconds = req.elapsed.total_seconds()
reqcontent = req.text
return (str(total_seconds), reqcontent)
if __name__ == '__main__':
appid = 'your-appid'
secret = 'your-secret'
openid = 'openid'
res = getsalerisk(appid, secret, openid)
print(res)