收藏
评论

内容安全检测API的DEMO(imgSecCheck, msgSecCheck)

使用imgSecCheck, msgSecCheck这两个API的时候碰到一些雷,现在就分享下.


msgSecCheck


传输的文本不可以是Unicode编码,要进行解码后再传输, 否则返回的是 "内容正常,无违规内容"

PHP DEMO:


private function scantxt($url, $data)

{

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($curl, CURLOPT_TIMEOUT, 500);

    curl_setopt($curl, CURLOPT_POST, 1);

    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);

    curl_setopt($curl, CURLOPT_URL, $url);

    $res = curl_exec($curl);

    curl_close($curl);

    return $res;

}


调用:

$data = ['content' => 'xxxxxxxxxxxxxxxxxxxxxxx'];

scantxt($url, json_encode($data, JSON_UNESCAPED_UNICODE));



imgSecCheck


  1. media参数类型为form-data, 应该是指POST表单的头格式为 Content-Type: multipart/form-data

  2. 其实就是服务器端模拟文件上传功能,上传文件给微信服务器, 被上传的文件不支持URL,只能为本地图片,图片路径推荐绝对路径(只要能根据路径找到该文件即可,有的可以相对路径)

  3. PHP 5.5以上和以下使用的API方法不同

  4. 其实微信可以考虑支持BASE64,这样更简便.

    5. API文章最下方的@, 其实可加可不加, 不加的时候微信也鉴别( @意思是上传的为图片)

    private function upimg($url)

    {

            $file = __DIR__ . '/123.jpg';

            $cfile = curl_file_create($file, 'image/jpg', '@testpic'); //这里硬编码了,自己修改

            $imgdata = array('media' => $cfile);

            $curl = curl_init();

            curl_setopt($curl, CURLOPT_URL, $url);

            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));

            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // stop verifying certificate

            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);

            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

            curl_setopt($curl, CURLOPT_POST, 1);

            curl_setopt($curl, CURLOPT_POSTFIELDS, $imgdata);

            $r = curl_exec($curl);

            curl_close($curl);

            return $r;

    }


收藏

2 个评论

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    2018-07-25

    传输的文本不可以是Unicode编码,要进行解码后再传输? 你好,这里需要开发者处理下把unicode转为utf-8(参考链接:https://www.jb51.net/article/70251.htm) 另外,form-data就是http协议里面的formdata哈

    2018-07-25
    赞同
    回复 2
    • 🙂sheldor
      🙂sheldor
      2018-07-25

      检测的内容,通常是文本数据, 从某个URL获取的.

      从实用简单角度来说, UNICODE解码或者你说的转UTF-8, 各个开发语言有自己便捷的API, https://www.jb51.net/article/70251.htm 这个里面的转换过于复杂了.


      http协议里面的formdata,这个说法有些抽象,从容易理解角度来说, 我认为其实就是模拟文件上传, http头设置Content-Type: multipart/form-data

      2018-07-25
      回复
    • ༺👀༻
      ༺👀༻
      2019-09-24
      敢问官方,你们的文档还能再简洁一点吗? 请问哪个里面写着要转化为utf-8了?
      2019-09-24
      回复
  • °不足为惧
    °不足为惧
    2018-07-26

    public function check_img(){

            $url = 'https://api.weixin.qq.com/wxa/img_sec_check?access_token=12_j1nlrQa29SUWYz_3OSEbfjc9vhduVcyu_MkR6VSLXjA86air3rw8xcCtSXeyU1qc3RyYVAR3IB2RLL3XHVYYLOKk5w-N917BgL9R-cILq2Zc0452WwWLoU6blBIxMJhzG7yYnhnROPOhABAYZY';

            $file = __DIR__ . '\640.jpg';

            $cfile = curl_file_create($file, 'image/jpg', 'testpic'); //这里硬编码了,自己修改

            $imgdata = array('media' => $cfile);

            

            $curl = curl_init();

            curl_setopt($curl, CURLOPT_URL,$url);

            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));

            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // stop verifying certificate

            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);

            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

            curl_setopt($curl, CURLOPT_POST, 1);

            curl_setopt($curl, CURLOPT_POSTFIELDS, $imgdata);

            $r = curl_exec($curl);

            curl_close($curl);

            dump($r);

        }

    返回的

    bool(false)


    2018-07-26
    赞同
    回复 2
    • °不足为惧
      °不足为惧
      2018-07-26

      图片路径没问题,不知道接口是不是这样拼接,还是其他地方有问题,望大神们指点

      2018-07-26
      回复
    • 路远
      路远
      2018-09-21回复°不足为惧

      请问你调用接口,这个问题最后解决了吗

      2018-09-21
      回复
登录 后发表内容