微信小程序和QQ小程序图片安全内容检测接口之ThinkPHP实现
由于相关管控,UGC小程序的开发者,必须要过滤违法违规内容(如黄)。
UGC小程序官方定义:
小程序中的功能或服务中,涉及用户将自己自定义编辑的文字、图片、音频、视频等内容通过小程序进行展示或提供给其他用户的,属于UGC小程序。
拒审条例:
存在平台为允许的服务内容,违反《微信小程序平台运营规范常见拒绝情形3.2》
原因:
小程序提供用户图片处理功能,但是未接入图片安全内容检测接口https://api.weixin.qq.com/wxa/img_sec_check
注意:不要尝试做假调用,审核人员真的会用有颜色的图片来测试!!!
解决方案:
尝试过小程序云开发,但是云函数大小有限制太死,行不通。改自己服务器用php实现安全校验接口。用的是ThinkPHP,你们自行调整。
其实微信小程序和QQ小程序的安全检测接口思路和代码差不多一次,但是为了大家方便参考比对和Copy,就全贴出来了。
微信小程序服务端相关代码
- 图片敏感检测接口
//微信小程序图片敏感检测public function wxImgSecCheck() {$access_token = $this->getMiniToken();$img = request()->param('img');if (empty($img)) {return RJson::error("");}$filePath = $this->saveBase64Image($img, 0);if (empty($filePath)) {return RJson::error("");}$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 = $this->httpRequest($url,$file);return RJson::success($info);}
- 获取access_token
//微信小程序获取access_tokenprivate function getMiniToken() {$cacheKey = 'miniRcubeAccessToken';$access_token = Cache::get($cacheKey); if (empty($token)) {$appid = "你的APPID";$secret = "你的SECRET";$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $secret;$jsonResult = file_get_contents($url);$resultArray = json_decode($jsonResult, true);$access_token = $resultArray["access_token"];Cache::set($cacheKey,$access_token,180);}return $access_token;}
QQ小程序服务端相关代码
- 图片敏感检测接口
//QQ小程序图片敏感检测public function qqImgSecCheck() {$access_token = $this->getQQMiniToken();$img = request()->param('img');if (empty($img)) {return RJson::error("");}$filePath = $this->saveBase64Image($img, 1);if (empty($filePath)) {return RJson::error("");}$obj = new \CURLFile(realpath($filePath));$obj->setMimeType("image/jpeg");$file['media'] = $obj;$url = "https://api.q.qq.com/api/json/security/ImgSecCheck?access_token=".$access_token;$info = $this->httpRequest($url,$file);return RJson::success($info);}
- 获取access_token
//QQ小程序获取access_tokenprivate function getQQMiniToken() {$cacheKey = 'miniQQRcubeAccessToken';$access_token = Cache::get($cacheKey); if (empty($token)) {$appid = "你的APPID";$secret = "你的SECRET";$url = "https://api.q.qq.com/api/getToken?grant_type=client_credential&appid=" . $appid . "&secret=" . $secret;$jsonResult = file_get_contents($url);$resultArray = json_decode($jsonResult, true);$access_token = $resultArray["access_token"];Cache::set($cacheKey,$access_token,180);}return $access_token;}
主要代码到这里就完了,下面补充用到的私有方法和类:
- HTTP请求(支持HTTP/HTTPS,支持GET/POST)
//HTTP请求(支持HTTP/HTTPS,支持GET/POST)private function httpRequest($url, $data = null){$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($data)) {curl_setopt($curl, CURLOPT_POST, TRUE);curl_setopt($curl, CURLOPT_POSTFIELDS,$data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);$output = curl_exec($curl);curl_close($curl);return $output;}
- 保存Base64图片
private function saveBase64Image($base64_image, $ptype) {//保存位置--图片名$image_name =date('His').str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT).".jpg";$group_name = "_" . date('Ymd');$group_path = ROOT_PATH . 'public' . DS . 'static' . DS . 'jjfly'. DS . $group_name;$image_path = $group_path .'/'.$image_name;$http_path = "https://www.iftangtang.com/static/jjfly/" . $group_name . '/'.$image_name;if (!file_exists($group_path)) {mkdir ($group_path,0777,true);}//解码$base64_image = str_replace (" ","+", $base64_image);$base64_image = str_replace('data:image/jpg;base64,', '', $base64_image);$base64_image = str_replace('\n', '', $base64_image);$base64_image = str_replace('\t', '', $base64_image);$decode = base64_decode($base64_image);if (file_put_contents($image_path, $decode)){return $image_path;}return false;}
- 简易封装接口用到的Json返回类:RJson.php
<?phpclass RJson
{/** 状态码code* 200成功,201失败* 1001未登录或登录信息过期,1002为access_toke过期* *///请求成功返回json格式数据public static function success($data='',$msg='操作成功',$code=200){$result = ['data' => $data,'msg' => $msg,'code' => $code];return json_encode($result, JSON_UNESCAPED_UNICODE);}//请求失败返回json格式数据public static function error($msg='操作失败',$code=201,$data=''){$result = ['data' => $data,'msg' => $msg,'code' => $code];return json_encode($result, JSON_UNESCAPED_UNICODE);}
}
微信小程序和QQ小程序图片安全内容检测接口之ThinkPHP实现相关推荐
- dedecms小程序插件升级到1.4.4(支持百度小程序,微信小程序,头条小程序,QQ小程序,支付宝小程序...)
从2019年6月份开发到现在 dede织梦小程序插件已经升级到1.4.4版本,现在已经支持:微信小程序,百度小程序,头条/抖音小程序,QQ小程序,支付宝小程序. dedecms小程序插件目前主要的功能 ...
- 微信推出“腾讯QQ”小程序;马化腾又要发红包;GitLab 12.5 稳定版发布| 极客头条...
整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...
- 【小程序】QQ小程序的入门与开发
最近QQ小程序也开放了注册,于是公司就注册了小程序,打算把原本微信端的也copy一个到QQ端.打开文档后发现,其实还挺简单的. QQ小程序大概就是微信小程序的翻版.把微信小程序api中的绝大部分或者视 ...
- api 定位 微信小程序 精度_一行代码区分微信小程序或QQ小程序
背景 很多开发者发现微信小程序的代码作为QQ小程序也能运行,可谓是无缝移植,这点为腾讯开发团队点赞. 但是QQ和微信小程序之间的服务端API有所不同,由此产生了一个需求:判断小程序当前是运行在微信还是 ...
- 从微信小程序到QQ小程序:云开发CloudBase的一云多端实践
本文整理自<IGS.全球数字文创大会>上腾讯云云开发CloudBase团队,高级产品经理史燕飞的分享,主要介绍云开发CloudBase的多端探索,及对QQ小程序开发者的全栈支持. 前言 Q ...
- 唤醒手腕 - 微信小程序、QQ小程序、抖音小程序学习笔记(更新中)
Textarea 自动增高 首先就是 qml 页面中,height 属性要绑定 data 中,bindlinechange 检测 textarea 行高变化. <textarea class=& ...
- 微信小程序移植qq小程序
随着微信小程序的越来越成熟,其他平台都相继效仿,所以对我们开发人员来说,不可避免的会有从微信小程序移植到 别的平台,最近公司需要将微信小程序移植到qq小程序,我就写下我的一点小小的经验. qq与微信同 ...
- 微信小程序转QQ小程序
如题,直接把微信小程序代码复制到QQ上,就可以用,API部分WX开头的也可以在QQ上用,目前是这样.不过跳转小程序的地方需要改还有登录逻辑,APPID目前是纯数字.目前QQ开发者工具没有编辑器,我用的 ...
- 【服务器】微信小程序转qq小程序
1.客户端 单独的页面pages以及设置文件app.js app.json app.xxx都是一样的 调用接口的时候把wx.改成qq., 文件名从wxml改成qml之类的 2.服务端 接口调用凭证不一 ...
最新文章
- XML解析简介及Xerces-C++简单使用举例
- 第07课:【实战】调试Redis准备工作
- VS2008 包加载失败导致VS2008打开 WebApplication项目时没有设计视图
- ITK:从标量图像创建矢量图像
- Java黑皮书课后题第8章:*8.24(检验数独的解决方案)程序清单8-4通过检测棋盘上的每个数字是否是有效的,从而检验一个解决方案是否是有效的。重写该程序,通过检验是否每行、每列、每个小方盒中具有
- 每天一道LeetCode-----计算一个直方图空隙的容量(如果装水能装多少)
- 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...
- iOS学习笔记11 多线程入门
- 面对行业难题,华为云邀请物联网全行业拿出“亮剑”精神
- nginx+tomcat+redis实现session共享
- Confluence 6 数据收集隐私策略
- 跨域请求的常用方式及解释
- 霍夫森林(Hough Forest)目标检测算法
- 8086 MOV 指令的注意事项
- 一般不要在头文件中定义变量
- Android 签名机制 v1、v2、v3
- Mirth连接Sybase数据库
- ecshop网店系统简评
- 极光尔沃3D打印《英雄联盟》精美手板
- 软件开发生命周期模型总结