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

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

获取 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:错误信息

为完结,待更新···

原文地址:https://www.cnblogs.com/cap-rq/p/13268422.html