使用微信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
    评论
Spring Boot 微信登录验证是一个非常流行的实践,它允许开发者使用微信账号进行网站或应用的验证微信登录验证通常被用于提高用户的便捷性和方便性,减少用户的注册时间和密码记忆负担,同时也保证了网站或应用的安全性。 首先,需要在微信开放平台注册并获取 AppID 和 AppSecret。随后,可通过 OAuth2 协议实现微信登录验证,其中重要的参数是:AppID,AppSecret,redirect_uri,code 等。 以下是实现微信登录验证的流程: 1. 创建一个授权链接,其中包括微信开放平台的 AppID,授权回调地址等信息。 2. 用户点击授权链接后,跳转到微信开放平台进行授权,用户输入微信账号密码后,微信将授权信息返回到开发者设置的回调地址上。 3. 开发者根据微信返回的授权信息,获取到用户的 OpenID 和 AccessToken。 4. 如果是新用户,将用户的 OpenID 和 AccessToken 存储到数据库中,即注册;如果是老用户,验证是否有未过期的 AccessToken,有则直接进入系统,无则刷新 AccessToken。 5. 验证通过后,返回用户信息并设置登录状态,之后用户就可以正常使用系统。 值得注意的是,在实现微信登录验证的过程中,安全性是非常重要的。因此需要在服务器端对获取到的 OpenID 和 AccessToken 进行校验,确保请求是来自微信验证中心,并没有被篡改。同时,开发者还要定期刷新和更换 AccessToken,以保证系统的安全性。 在 Spring Boot 中,可以通过 Spring Security、Spring Social 等方式来实现微信登录验证。Spring Security 提供了丰富的用户验证和权限管理功能,而 Spring Social 则专注于社交媒体的认证和授权。开发者可以根据需求和技术水平选择合适的方式来实现微信登录验证

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值