附加内容:
1、微信文档 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.imgSecCheck.html
2、PHP5.4,json_encode函数,新增了一个参数选项,JSON_UNESCAPED_UNICODE,中文不编码,内容原样输出
第一部分:【违规文字】检查校验
文件:index
/**
* 微信-违规【文字】检测
* @return mixed
*/
public function test_wx_check()
{
$param = '神鼎飞丹砂发生的';
$type = 1;
$result = $this->wx_check($param, $type);
echo'';var_dump($result);exit();
}
第二部分:【违规图片】检查校验
文件:index
a、表单部分
b、后端部分
/**
* 微信-违规【图片】检测
* @return mixed
*/
public function test_wx_check()
{
$param = $_FILE['uploadImg'];
$type = 1;
$result = $this->wx_check($param, $type);
echo'
';var_dump($result);exit();
}
第三部分:核心代码部分
文件:index
/**
* 微信-违规【文字/图片】检测
* @param $param
* @return mixed
*/
public function wx_check($param, $type=1)
{
// 对参数进行验证,空直接返回false
if(!$param || !$type){
return false;
}
// 参数分类处理
if($type==1){
$data = ['content'=>$param];
}else if($type==2){
$data = ['media'=>$param];
}
// 获取access_token
$this->load->service('order_service');
$access_token = $this->order_service->get_access_token();
// access_token不能为空
if(!$access_token){
return false;
}
// 请求地址
$this->load->config('dict/dict_wx_check');
$config = $this->config->item('wx_check_config');
$url = ($type==1?$config['content_url']:$config['img_url']).'?access_token='.$access_token;
// 请求数据
$result = $this->curl_post_weixin($url, $data);
// json结果反转
return json_decode($result, true);
}
/**
* cURL方式POST数据到微信
* @param string $url 请求地址
* @param array $data 发送数据
* @return mixed
* @author LiuDongrang
* @time 2019/05/19
*/
private function curl_post_weixin($url, $data)
{
if($url && count($data)){
$headers = ['Content-Type:application/json'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 关键点
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE)); // 【* 关键点】
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
}
文件:order_service
/**
* 获取token
* @author LiuDongrang
* @time 2019/07/05
*/
public function take_access_token()
{
$access_token = $this->get_access_token();
// 获取存入redis
$this->load->library('dbredis');
$this->dbredis->set('redis_access_token', $access_token);
return $this->dbredis->get('redis_access_token');
}
/**
* 获取access_token值
* @return string $access_token
* @author LiuDongrang
* @time 2019/05/19
*/
public function get_access_token()
{
$appConfig = [
'app_id' => 'wxsdfdsfsdfsdfdfdefc',
'secret' => 'ecsdfsdfdfuyttrrlo9887jfa7d29106'
];
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appConfig['app_id'].'&secret='.$appConfig['secret'];
$ch = curl_init(); // 创建句柄
curl_setopt($ch, CURLOPT_URL, $url); // 通过url获取数据
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 跳过证书验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是
$output = json_decode(curl_exec($ch));
$access_token = $output->access_token;
curl_close($ch);
return $access_token;
}
文件:dict/dict_wx_check
/**
* 微信【图文】违规校验 - 配置文件
*/
/** 图文校验请求地址 **/
$config['wx_check_config'] = [
'content_url'=>'https://api.weixin.qq.com/wxa/msg_sec_check',
'img_url'=>'https://api.weixin.qq.com/wxa/img_sec_check',
];
最后总结:
图文内容校验(涉黄、涉政)本身没有什么难点,但是,却有需要注意的地方!
图片检查这块,微信端要求的图片参数media的格式为form-data,因此,表单属性必须有 enctype="multipart/form-data",否则,测试的时候就会报“格式错误”的提示,切记!
文字检查这块,有一个关键点,就是对content内容,转为json格式传输的时候,json_encode这个函数,必须要加 "JSON_UNESCAPED_UNICODE" 这个参数,否则,那些敏感词汇根本测不出来!这是为什么呢?因为json_encode在处理中文的时候,中文都会被编码,变成类似 "\u****" 的不可读的格式,这样,微信端接受的都是一堆这样的字符,敏感词汇当然检验不出来了!而JSON_UNESCAPED_UNICODE这个参数,加到json_encode函数里后,所有的中文字符,将原样输出,这样,就可以过滤出敏感内容来了!