微信小程序自帶有安全校驗功能,戳我
獲取 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:錯誤信息
為完結,待更新···