• 微信小程序 实现图片/文字安全校验


    微信小程序自带有安全校验功能,戳我 

    获取 access_token

    function getAccessToken(){
            $appid = 'xxx';
            $appSecret = 'xxx';
            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appSecret;
            // 调用curl接口 获取数据
            $access_token = curl_request($url);
            $access_token = json_decode($access_token);
            return $access_token->access_token;
    }

    通过php的curl发起请求

    function curl_request($url, $post = '') {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    
            if (!empty($post)) {
                curl_setopt($curl, CURLOPT_POST, TRUE);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
            $output = curl_exec($curl);
            curl_close($curl);
    
            return $output;
    }

    校验文字

    校验图片

     上传多张图片循环判断

    // 此处为线上地址
    $dirs = array('https://xxx.jpg','https://xxx.png','https://xxx.jpeg')
    
    foreach($dirs as $key=>$dir) {
           $imgSec = json_decode(SecurityCheck::imgCheck($dir,'img'),true);
           if(json_encode($imgSec['errcode']) == 87014) return app('json')->fail('第'.($key+1).'张图片内容违规!',$imgSec); 
           if(json_encode($imgSec['errcode']) != 0) return app('json')->fail($imgSec); 
    }

    检测模型

    <?php
    
    namespace appmodelssecurity;
    
    use lanpisasicBaseModel;
    use CURLFile;
    
    /**
     * TODO 安全校验
     * Class Music
     * @package appmodelsmusic
     */
    class SecurityCheck extends BaseModel
    {
        public static function imgCheck($path) {
            $token = getAccessToken();
            $url = 'https://api.weixin.qq.com/wxa/img_sec_check?access_token=' . $token;
    
            // 解析绝对路径
            $absolute_path = str_replace('https://','/data/wwwroot/',$path);
            $absolute_path = implode('/public/uploads', explode('/uploads', $absolute_path));
    
            $mime = get_img_info($path,1)['mime'];    // 获取图片类型,如image/jpeg
            $obj = new CURLFile($absolute_path);   // 此处$absolute_path 为本地路径(服务器路径,并非线上地址)
            $obj->setMimeType($mime);
            $postdata['media']=$obj;
            return curl_request($url, $postdata);
        }
    }

    如果你的图片是存在第三方服务器上,而非代码服务器,将 “解析绝对路径” 内容区域替换成一下内容即可:

    $suffix = explode('/', $mime)[1];   // 获取后缀
    $img = file_get_contents($path);  // $path就是远程的图片地址 http的图片地址
            $filePath = dirname(__FILE__).'/pic/1.'.$suffix;  // 注意这里是填写你保存这张远程图片在你服务器上的绝对路径地址
    file_put_contents($filePath, $img);
    $absolute_path=realpath($filePath);

    返回值

    • errcode:错误码
      • 0:内容正常
      • 87014:内容含有违法违规内容
      • 41005:media data missing(media为formdata数据,php使用CURLFile生成)
    • errMsg:错误信息

    为完结,待更新···

  • 相关阅读:
    什么是JSON?
    Linux命令 之 less
    oracle删除表语句
    DB2错误码(续)
    DB2错误号汇总
    HTTP 响应码
    硬盘 NTFS格式 与 exFAT格式 的比较
    关于spring的配置文件总结(转)
    logback与Spring、SpringMVC结合使用教程(转)
    在vue中使用elementUi的回到顶部backToTop组件
  • 原文地址:https://www.cnblogs.com/cap-rq/p/13268422.html
Copyright © 2020-2023  润新知