小程序风控 API

最近更新时间:2023-06-12 16:03:51

我的收藏

接口说明

当前风控 API 包括如下2项能力。
1. 账号风险识别提供给第三方 App 商户和开发者识别授权登录主体黑灰产恶意等级的能力。由于微信安全团队在微信内通过风控拦截了相当一部分黑灰产团伙,阻止其进一步作恶,因此他们将目光投向了授权登录的第三方商户或者 App。通过该能力,第三方商户和开发者可以识别授权登录主体的风险恶意等级,以便快速地制定安全策略,保障业务安全。
2. 营销活动反作弊能力是微信安全团队为了与黑灰产团伙长期对抗而开发的强大安全技术,通过风险识别引擎,对小程序、微信授权登录的移动应用的营销活动提供安全技术支持和防护意见,精准识别“羊毛党”、“黄牛党”等恶意群体。在第三方 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)