使用微信imgSecCheck验证内容安全

小程序使用时,难免会需要用户上传图片,为了规范上传图片,微信提供了图片内容审核为了保障小程序内容合规,发布时事新闻、具有社交属性或以视频、电台为载体的小程序需在上线前,完成向省/自治区/直辖市属地网信部门申请报备的工作。特别是,为避免小程序违法违规风险,UGC小程序需要对用户发布的内容做好安全审查措施。
在这里插入图片描述
在这里插入图片描述
下面是PHP使用imgSecCheck验证图安全的方法

//基于ThinkPHP
	/**
     * 获取access_token
     */
    public function get_access_token($appid,$appsecret){
        //提取缓存中的access_token
        $token  = Cache::get('access_token');
        if ($token){
            return self::to_array(1,$token);
        }
        //获取access_token
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
        //获取access_token
        $get_token = curl_get($url);
        //错误结果
        $msg =[
            '-1'    =>'系统繁忙,此时请开发者稍候再试',
            '0'     =>'请求成功',
            '40001' =>'AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性',
            '40002' =>'请确保grant_type字段值为client_credential',
            '40164' =>'调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。)',
        ];
        //access_token解析
        $get_token = json_decode($get_token,true);
        if (!empty($get_token['access_token'])){
            //保存token 2小时
            Cache::set('access_token',$get_token['access_token'],7200);
            return self::to_array(1,$get_token['access_token']);
        }else{
            //返回错误
            return self::to_array(0,$msg[$get_token['errcode']],$get_token);
        }
    }

    /**
     * 图像校验
     * @param $filePath  图片本地位置
     */
    public function checkImg($filePath){
        //获取微信token
        $appid ='微信APPid';
        $secret = '微信秘钥';
        $get_access = self::get_access_token($appid,$secret);
        if (empty($get_access['status']))  return self::to_array(0,'调用失败');
        //获取token
        $access_token = $get_access['data'];
        //数据处理
        $obj = new \CURLFile(realpath($filePath));
        $obj->setMimeType('image/jpeg');
        $file['media'] = $obj;
        $url = 'https://api.weixin.qq.com/wxa/img_sec_check?access_token='.$access_token;
        $info = self::curl_post($url,$file,[]);
        //返回解析
        $res = json_decode($info,true);
        //返回结果  errcode 为0 则图片为安全图片
        if ($res['errcode'] == 0){
            return self::to_array(1,$res['errmsg']);
        }else{
            return self::to_array(0,$res['errmsg']);
        }
    }
    /**
	 * 结果返回
	 * @param  [状态] $status [结果状态 1为成功,0为失败]
	 * @param  [说明] $msg    [返回说明]
	 * @param  [数据] $data   [其他数据,status为1是返回]
	 * @return [array]        [结果集合]
	 */
	private function to_array($status,$msg,$data='')
	 {
	     $back['status']=$status;
	     $back['msg']=$msg;
	     $back['data']=$data;
	     return $back;
	 }
	/**
	  * @param string $url  请求连接  
	  * @param array $post_data  请求数据
	  * @param array | boolean $header  请求头
	  * @return mixed
	  */
	private function curl_post($url,$post_data,$header)
	{
	    //开启curl
	    $ch = curl_init();
	    //设置请求地址
	    curl_setopt($ch, CURLOPT_URL, $url);
	    // 执行后不直接打印出来
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	    // 设置请求方式为post
	    curl_setopt($ch, CURLOPT_POST, true);
	    // post的变量
	    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
	    // 请求头,可以传数组
	    curl_setopt($ch, CURLOPT_HEADER, $header);
	    // 跳过证书检查
	    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	    // 不从证书中检查SSL加密算法是否存在
	    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	    $output = curl_exec($ch);
	    curl_close($ch);
	    return $output;
	}

代码为提取出来的,实际应用中可能需要调整下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值