微信小程序服务端图片、内容检测接口

你好,因用户投诉并经平台审核,你的小程序在用户自定义昵称或头衔、个人资料签名、聊天室、用户评论、上传图片视频、直播等场景。未具备过滤政治有害等违法违规不当信息的机制...你好,因用户投诉并经平台审核,你的小程序在用户自定义昵称或头衔、个人资料签名、聊天室、用户评论、上传图片视频、直播等场景。未具备过滤政治有害等违法违规不当信息的机制...

在做小程序的时候,特别是有评价、上传图片功能时,相信大家都会遇到这种关于小程序接入内容安全能力的警告通知。如果任由发展不予理会,小程序可能会被平台强制下架。

从给出的警告通知可以看出,平台给出了2种解决方案:
  • 1,接入微信公众平台内容安全 API 或通过其他技术手段进行审核;
  • 2,人工审核,也就是用户评价或上传图片之后需后台审核通过之后才能在前台显示。

从给出的解决方案中,我觉得直接调用微信公众平台内容安全 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);
            }
        } 
    }   
}

小提示

如有侵权请邮件通知