微信小程序自带有安全校验功能,戳我
获取 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 app\models\security; use lanpis\basic\BaseModel; use CURLFile; /** * TODO 安全校验 * Class Music * @package app\models\music */ 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:错误信息
为完结,待更新···