由于相关管控,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实现相关推荐

  1. dedecms小程序插件升级到1.4.4(支持百度小程序,微信小程序,头条小程序,QQ小程序,支付宝小程序...)

    从2019年6月份开发到现在 dede织梦小程序插件已经升级到1.4.4版本,现在已经支持:微信小程序,百度小程序,头条/抖音小程序,QQ小程序,支付宝小程序. dedecms小程序插件目前主要的功能 ...

  2. 微信推出“腾讯QQ”小程序;马化腾又要发红包;GitLab 12.5 稳定版发布| 极客头条...

    整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...

  3. 【小程序】QQ小程序的入门与开发

    最近QQ小程序也开放了注册,于是公司就注册了小程序,打算把原本微信端的也copy一个到QQ端.打开文档后发现,其实还挺简单的. QQ小程序大概就是微信小程序的翻版.把微信小程序api中的绝大部分或者视 ...

  4. api 定位 微信小程序 精度_一行代码区分微信小程序或QQ小程序

    背景 很多开发者发现微信小程序的代码作为QQ小程序也能运行,可谓是无缝移植,这点为腾讯开发团队点赞. 但是QQ和微信小程序之间的服务端API有所不同,由此产生了一个需求:判断小程序当前是运行在微信还是 ...

  5. 从微信小程序到QQ小程序:云开发CloudBase的一云多端实践

    本文整理自<IGS.全球数字文创大会>上腾讯云云开发CloudBase团队,高级产品经理史燕飞的分享,主要介绍云开发CloudBase的多端探索,及对QQ小程序开发者的全栈支持. 前言 Q ...

  6. 唤醒手腕 - 微信小程序、QQ小程序、抖音小程序学习笔记(更新中)

    Textarea 自动增高 首先就是 qml 页面中,height 属性要绑定 data 中,bindlinechange 检测 textarea 行高变化. <textarea class=& ...

  7. 微信小程序移植qq小程序

    随着微信小程序的越来越成熟,其他平台都相继效仿,所以对我们开发人员来说,不可避免的会有从微信小程序移植到 别的平台,最近公司需要将微信小程序移植到qq小程序,我就写下我的一点小小的经验. qq与微信同 ...

  8. 微信小程序转QQ小程序

    如题,直接把微信小程序代码复制到QQ上,就可以用,API部分WX开头的也可以在QQ上用,目前是这样.不过跳转小程序的地方需要改还有登录逻辑,APPID目前是纯数字.目前QQ开发者工具没有编辑器,我用的 ...

  9. 【服务器】微信小程序转qq小程序

    1.客户端 单独的页面pages以及设置文件app.js app.json app.xxx都是一样的 调用接口的时候把wx.改成qq., 文件名从wxml改成qml之类的 2.服务端 接口调用凭证不一 ...

最新文章

  1. XML解析简介及Xerces-C++简单使用举例
  2. 第07课:【实战】调试Redis准备工作
  3. VS2008 包加载失败导致VS2008打开 WebApplication项目时没有设计视图
  4. ITK:从标量图像创建矢量图像
  5. Java黑皮书课后题第8章:*8.24(检验数独的解决方案)程序清单8-4通过检测棋盘上的每个数字是否是有效的,从而检验一个解决方案是否是有效的。重写该程序,通过检验是否每行、每列、每个小方盒中具有
  6. 每天一道LeetCode-----计算一个直方图空隙的容量(如果装水能装多少)
  7. 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...
  8. iOS学习笔记11 多线程入门
  9. 面对行业难题,华为云邀请物联网全行业拿出“亮剑”精神
  10. nginx+tomcat+redis实现session共享
  11. Confluence 6 数据收集隐私策略
  12. 跨域请求的常用方式及解释
  13. 霍夫森林(Hough Forest)目标检测算法
  14. 8086 MOV 指令的注意事项
  15. 一般不要在头文件中定义变量
  16. Android 签名机制 v1、v2、v3
  17. Mirth连接Sybase数据库
  18. ecshop网店系统简评
  19. 极光尔沃3D打印《英雄联盟》精美手板
  20. 软件开发生命周期模型总结

热门文章

  1. Android camera2 实现估算眼睛到屏幕的距离 人脸识别 护眼实验室
  2. Redis 大量数据插入
  3. JS 倒计时 获取本周周六或者周日10点
  4. Unity3d自制字体
  5. python图像分类_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)...
  6. 怎么实现跨域?配置vue跨域proxy,jsonp跨域很简单
  7. Java实现发送邮件功能
  8. 企鹅号的文章推荐到那里了,企鹅号选什么领域容易爆文
  9. MacBooster8全新Mac系统清理优化工具
  10. Unigui出现CoInitialize未启动