你好,因用户投诉并经平台审核,你的小程序在用户自定义昵称或头衔、个人资料签名、聊天室、用户评论、上传图片视频、直播等场景。未具备过滤政治有害等违法违规不当信息的机制...你好,因用户投诉并经平台审核,你的小程序在用户自定义昵称或头衔、个人资料签名、聊天室、用户评论、上传图片视频、直播等场景。未具备过滤政治有害等违法违规不当信息的机制...
在做小程序的时候,特别是有评价、上传图片功能时,相信大家都会遇到这种关于小程序接入内容安全能力的警告通知。如果任由发展不予理会,小程序可能会被平台强制下架。
从给出的解决方案中,我觉得直接调用微信公众平台内容安全 API 是最快最好的一种解决方法,但是做起来却并不是那么容易,特别是一些细节方面的问题。
文档地址:微信官方文档
接口说明:
msgSecCheck: 检查一段文本是否含有违法违规内容。
请求地址:POST https://api.weixin.qq.com/wxa/msg_sec_check?access_token=ACCESS_TOKEN
请求参数:
参数名 | 参数类型 | 默认值 | 是否必填 | 说明 |
---|---|---|---|---|
access_token | string | 是 | 接口请求凭证(在请求链接上加上即可,无需通过 post 提交) | |
content | string | 是 | 要检测的文本内容,长度不超过 500KB |
代码示例:
//获取token并保存 redis
public function getAccessToken()
{
$access_token = Cache::store('redis')->get('wx_mini_access_token');
if(empty($access_token)) {
$config = Config::get('weMini');
$appid = $config["AppID"];
$secret = $config["AppSecret"];
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
$result = file_get_contents(sprintf($url,$appid,$secret));
$result = json_decode($result, true);
Log::record('获取小程序access_token:request=' . var_export(sprintf($url,$appid,$secret), true));
Log::record('获取小程序access_token:response=' . var_export($result, true));
if(isset($result['access_token']) && !empty($result['access_token'])) {
Cache::store('redis')->set('wx_mini_access_token', $result['access_token'], (intval($result['expires_in']) - 300));
$access_token = $result['access_token'];
} else {
return false;
}
}
}
//请求方法
private function http_request($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
//内容检测(写出关键步骤,一些非空、请求失败判断省略)
public function msgSecCheck()
{
$msg = $_POST['msg'];
//获取微信请求凭证
$access_token = $this->getAccessToken();
$url = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=".$access_token;
$data['content'] = $msg;
$requestData = json_encode($data, JSON_UNESCAPED_UNICODE);
$result = $this->http_request($url, $requestData);
var_dump($result);
}
imgSecCheck:校验一张图片是否含有违法违规内容。
请求地址:POST https://api.weixin.qq.com/wxa/img_sec_check?access_token=ACCESS_TOKEN
请求参数:
参数名 | 参数类型 | 默认值 | 是否必填 | 说明 |
---|---|---|---|---|
access_token | string | 是 | 接口请求凭证(在请求链接上加上即可,无需通过post提交) | |
media | FormData | 是 | 要检测的图片文件,格式支持PNG、JPEG、JPG、GIF,图片尺寸不超过 750px x 1334px |
示例代码:
//上传图片
public function upload()
{
$files = request()->file('pic');
$config = Config::get("upload");
foreach($files as $file) {
$fileAttr = $file->getInfo();
#存放到临时文件夹用于检测图片是否违规
$savename = 'temporary' . DS . date("Ymd") . DS . getRandom(16,'0123456789abcdefghijklmnopqrstuvwxyz');
$info = $file->move($config['path'],$savename);
if ($info) {
$pathName = $info->getPathName();
if(in_array(strtolower($fileAttr['type']), ['image/png','image/jpg','image/jpeg','image/gif'])) {
#图片检测(微信接口)
$access_token = $this->getAccessToken();
$cfile = new \CURLFile(realpath($pathName));
$cfile->setMimetype($fileAttr['type']);
$data['meida'] = $cfile;
$url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=".$access_token;
$result = $this->http_request($url, $data);
var_dump($result);
}
}
}
}
如有侵权请邮件通知