功能说明
用于过滤玩家输入的敏感词,避免出现不合规信息。
URL
https://[域名/IP]/v3/user/uic_filter
正式环境下使用域名:openapi.minigame.qq.com
后端接口,禁止从前端直接调用。
格式
JSON
HTTP请求方式
POST
输入参数说明
(1)url 参数
各个参数请进行URL 编码,编码时请遵守 RFC 1738。
注意:计算sig的源串以 POST 开头。sig校验地址 https://open.qq.com/tools
(2) header 参数
参数名称
类型
参数含义
可选/必选
openid
string
用户的唯一标识,根据APPID以及QQ号码生成
必选
openkey
string
用户的会话密钥
必选
appid
unsigned int
应用的唯一ID,可以通过appid查找APP基本信息
必选
sig
string
请求串的签名,以appkey作为密钥
必选
Content-Type: application/json;charset=utf-8
注意:header 不参与 sig 计算
Content-Type 的各种参数,将直接影响 body 的数据格式,可以参考文章:四种常见的 POST 提交数据方式
(3) Post body:
注意:body 不参与 sig 计算。
为了避免非法 json 格式,请求方可以调用 json 编码函数进行编码,编码函数将换行符、非法字符转义,以符合 json 规范。
如果手动组装 json,请处理好 text_ 中的不符合 json 规范的字符,否则将返回 1000020 错误。
参数名称
类型
参数含义
可选/必选
text_list_
json数组
请求文本数组,最长12个数组元素
必选
text_list_结构:
参数名称
类型
参数含义
可选/必选
text_
string
文本,最长2047个字符
必选
text_scene_
unsigned int
文本使用场景
1:名称
2:消息
3:标题
4:评论
5:签名
6:搜索
7:其他 详情参考附录内容
必选
请求示例
Post URL:
http://openapi.minigame.qq.com/v3/user/uic_filter?openid=14138F283ADE54B505EC9849254A25DA&openkey=A5ACECDBF7B8CD01EF7FA4C8FF809596&appid=100700930&sig=I8G6ncPeMBYIGBvjFOmD8BJyYqs%3D
注意:不要把 openid/openkey/appid/sig 参数填到了 Post 请求的 body 中,会造成 2000001 错误
相反,如果把 body 填到了 header 中,发送了空 body,会造成 2000024 错误
Post body: (参考 http/post规范)
{ "text_list_": [ { "text_": "normal text", "text_scene_": 1 }, { "text_": "方誌敏", "text_scene_": 2 } ] }
Curl 命令行请求如下:
curl --silent --location \ --request POST 'http://openapi.minigame.qq.com/v3/user/uic_filter?openid=14138F283ADE54B505EC9849254A25DA&openkey=A5ACECDBF7B8CD01EF7FA4C8FF809596&appid=100700930&sig=I8G6ncPeMBYIGBvjFOmD8BJyYqs%3D' \ --header 'Content-Type: application/json; charset=utf-8' \ --data-raw '{ "text_list_": [ { "text_": "normal text", "text_scene_": 1 }, { "text_": "方誌敏", "text_scene_": 2 } ] }'
PHP curl 请求示例:
$params = array(); $params['openid'] = '14138F283ADE54B505EC9849254A25DA'; $params['openkey'] = 'A5ACECDBF7B8CD01EF7FA4C8FF809596'; $params['appid'] = '100700930'; $params['sig'] = 'I8G6ncPeMBYIGBvjFOmD8BJyYqs%3D'; // 如果 sig 已经是经过 urlEncode 的,就不能调用 http_build_query,会造成2次编码,%会被再次编码成%25,直接组装即可 //$param_str = http_build_query($params); $query_str = 'openid='. $params['openid'] .'&openkey='.$params['openkey'] .'&appid=' . $params['appid'] .'&sig=' . $params['sig']; $url = "https://openapi.minigame.qq.com/v3/user/uic_filter"; $url = $url . '?' . $query_str; $data = ['text_list_'=>[['text_' => "normal text", 'text_scene_'=>1]]]; $data_json = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type:application/json; charset=utf-8', 'Content-Length:' . strlen($data_json) )); $rsp = curl_exec($ch);
HTTP 请求抓包则会显示如下:
POST /v3/user/uic_filter?openkey=A5ACECDBF7B8CD01EF7FA4C8FF809596&sig=I8G6ncPeMBYIGBvjFOmD8BJyYqs%3D&openid=14138F283ADE54B505EC9849254A25DA&appid=100700930 HTTP/1.1 Host: openapi.minigame.qq.com Content-Type: application/json;charset=utf-8 User-Agent: curl Accept: */* Cache-Control: no-cache Host: openapi.minigame.qq.com Accept-Encoding: gzip, deflate Content-Length: 198 Connection: keep-alive cache-control: no-cache { "text_list_": [ { "text_": "normal text", "text_scene_": 1 }, { "text_": "方誌敏", "text_scene_": 2 } ] }
注意:由于 POST 请求有多种格式,因此所用的 http 库可能有多种参数格式,建议详细了解所用的 http 库文档,并抓包对照格式。
如果使用的是OpenAPI V3.0 SDK,是不支持 application/json 的,需自行封装或修改。
* php sdk 的 post 请求实际使用的是 curl 库,且只使用了 curl 的 Content-Type:multipart/form-data。见 SnsNetwork.php makeRequestWithFile()。
* python sdk 的 https post 请求实际使用的是 httplib.HTTPSConnection,也没有支持 application/json。见 sns_network.py _https_send()。
返回参数说明
(1)公共返回
参数名称 |
类型 |
含义 |
ret |
int |
返回码:0正确返回,其他情况为异常 1000020:请求包body错误,1000020:请求包body错误,检查text_list_ 的json数组,text_ 的string类型, text_scene_ 的int类型 1000104:解包失败 1000106:参数错误 1000109:系统错误 2000020:url中缺少appid 2000024:sig 错误或者传了空 body 其他返回码对照:后台接口OpenAPI调用说明
|
msg |
string |
如果错误则返回错误信息,正确返回空 |
参数名称 |
类型 |
含义 |
text_result_cnt_ |
int |
返回的文本条数 |
text_result_list_ |
json 数组 |
返回的文本数组 |
text_result_list_结构:
参数名称 |
类型 |
含义 |
check_ret_ |
int |
0:合法 1:恶意 |
punish_type_ |
int |
1:完全恶意,禁止显示 2:部分恶意,需要替换成 result_text_ |
result_text_ |
string |
敏感词检测后的文本,敏感词被替换成** |
注意:私有返回只有在私有参数填写完整的情况下才会返回。
正确返回示例
JSON示例:
{ "msg": "success", "ret": 0, "text_result_cnt_": 2, "text_result_list_": [ { "check_ret_": 0, "punish_type_": 0, "result_text_": "normal text" }, { "check_ret_": 1, "punish_type_": 2, "result_text_": "***" } ] }
错误返回示例
JSON示例:
{ "ret":1000002, "msg":"您提交的参数不正确,请重新操作!" }
不同的异常,错误码不同。
附:文本场景类text_ scene_
1 名称
玩家昵称、备用昵称、公会名称、战队名称、房间名称、宠物名称、组织名称、联盟名称、门派名称、组队名称、车队名称、符文名称、摆摊(商店)名称等
2 消息
私聊(密聊、密语)消息、群聊消息、好友消息、世界消息、组队消息、公会消息、战队消息、局内消息、小喇叭消息、大喇叭消息、世界喇叭消息、局内所有人消息、门派聊天消息、附近频道消息、彩聊消息、地图消息、系统消息、仙人消息、动态消息、好友验证消息、直播间弹幕消息等
3 标题
邮件标题、帖子标题、文章标题
4 评论
资讯评论、新闻评论、帖子评论、博文评论、回复、视频评论、帖子、博文、邮件内容、
5 签名
个人简介、个人宣言、个人签名、个人心情、个人说说、车队简介、公会简介、组织简介、联盟简介、联盟宣言、门派简介、好友签名
6 搜索
搜索内容