access_token请求地址
GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
(1)图片检测security.imgSecCheck
调用方式:
1.HTTPS 调用
检测请求地址:
POST https://api.weixin.qq.com/wxa/img_sec_check?access_token=ACCESS_TOKEN
请求参数:
access_token(String)接口调用凭证
media(FormData)要检测的图片文件,格式支持PNG、JPEG、JPG、GIF,图片尺寸不超过 750px x 1334px
接口返回:
{"errcode": "0内容正常,87014内容含有违法违规内容","errmsg": "ok/risky content"}
2.云调用
接口方法:
openapi.security.imgSecCheck
接口参数:
media(FormData)媒体文件数据,包含参数{
contentType(string):数据类型,传入 MIME Type;value(Buffer):文件 Buffer}
接口返回:同上
(2)文本检测security.msgSecCheck
调用方式:
1.HTTPS 调用
检测请求地址:
POST https://api.weixin.qq.com/wxa/msg_sec_check?access_token=ACCESS_TOKEN
请求参数:
access_token(String)接口调用凭证
content(string)要检测的文本内容,长度不超过 500KB
接口返回:
{"errcode": "0内容正常,87014内容含有违法违规内容","errmsg": "ok/risky content"}
2.云调用
接口方法:
openapi.security.msgSecCheck
接口参数:
content(string)要检测的文本内容,长度不超过 500KB
接口返回:同上
(0)获取access_token
$appid ="小程序唯一凭证";
$secret ="小程序密钥";
$grant_type='client_credential';
$result=http_curl("https://api.weixin.qq.com/cgi-bin/token?appid=$appid&secret=$secret&grant_type=$grant_type");
/*
{
"access_token": "",
"expires_in": 7200
}
*/
$access_token = json_decode($result,true)['access_token'];
echo $access_token;
function http_curl($url){
//初始化一个cURL会话,返回一个cURL句柄,供curl_setopt(), curl_exec()和curl_close() 函数使用
$curl = curl_init();
//设置URL
curl_setopt($curl,CURLOPT_URL,$url);
//curl_setopt — 设置一个cURL传输选项
//设置发起链接等待超时
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,30);
//将curl_exec()获取的信息以文件流的形式返回
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
//https请求 不验证证书和hosts
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
//执行命令
$response=curl_exec($curl);
//关闭请求
curl_close($curl);
return $response;
}
(1)文本检测
https调用
$content = $_GET['content'];
method($content,$accessToken);
function method($content,$accessToken)
{
$data['content'] = $content;
$result=json_decode(curlPost("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=$accessToken",$data),true);
print_r($result);
/*
{
"errcode": 0,
"errmsg": "ok"
}
*/
}
function curlPost($url,$data)
{
$ch = curl_init();
//设置URL和相应的选项
$params[CURLOPT_URL] = $url;
$params[CURLOPT_HEADER] = FALSE;
//https请求 不验证证书和hosts
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
$params[CURLOPT_RETURNTRANSFER] = true;
//启用时会发送一个常规的POST请求
$params[CURLOPT_POST] = true;
//传递一个数组到CURLOPT_POSTFIELDS,cURL会把数据编码成 multipart/form-data,而然传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded。
$params[CURLOPT_POSTFIELDS] = $data;
//为 cURL 传输会话批量设置选项,不需要重复地调用 curl_setopt()
curl_setopt_array($ch, $params);
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
云调用
// 云函数入口文件
const cloud = require('wx-server-sdk')
//初始化 SDK 实例
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
try{
let result = await cloud.openapi.security.msgSecCheck({
content: event.content
})
if (result && result.errCode.toString() === '87014'){
return { code: 300, msg: '涉嫌含有违法违规内容,请重新填写', data: result }
}else{
return { code: 200, msg: 'ok', data: result }
}
} catch (err) {
if (err.errCode.toString() === '87014'){
return { code: 300, msg: '涉嫌含有违法违规内容,请重新填写', data: err }
}
return { code: 400, msg: '调用security接口异常', data: err }
}
}
(2)图片安全检测
https调用
$image = $_FILES['image'];
print_r($image);
/*
Array
(
[name] => eioihgklsdads.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phplsdk
[error] => 0
[size] => 219833
)
*/
$fileAdrr = download($image);
method($fileAdrr,$image,$accessToken);
function method($fileAdrr,$image,$accessToken)
{
//创建一个 CURLFile 对象, 用与上传文件
$curl_file = curl_file_create($fileAdrr,$image['type'],$image['name']);
print_r($curl_file);
/*
CURLFile Object
(
[name] => 1617590721.jpg
[mime] => image/jpeg
[postname] => JKHLDKJHDIUH323HKJDHKJ8982379387HH.jpg
)
*/
$data['media'] = $curl_file;
$result=json_decode(curlPost("https://api.weixin.qq.com/wxa/img_sec_check?access_token=$accessToken",$data),true);
print_r($result);
/*
{
"errcode": 0,
"errmsg": "ok"
}
*/
if (file_exists($fileAdrr)){
unlink($fileAdrr); //删除文件
}
}
function curlPost($url,$data)
{
$ch = curl_init();
//设置URL和相应的选项
$params[CURLOPT_URL] = $url;
$params[CURLOPT_HEADER] = FALSE;
//https请求 不验证证书和hosts
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
$params[CURLOPT_RETURNTRANSFER] = true;
//启用时会发送一个常规的POST请求
$params[CURLOPT_POST] = true;
//传递一个数组到CURLOPT_POSTFIELDS,cURL会把数据编码成 multipart/form-data,而然传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded。
$params[CURLOPT_POSTFIELDS] = $data;
//为 cURL 传输会话批量设置选项,不需要重复地调用 curl_setopt()
curl_setopt_array($ch, $params);
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
//下载文件到本地,并返回路径
function download($image) {
//explode()函数把字符串打散为数组
$temp = explode(".", $image["name"]);
//获取文件后缀名,end()函数将数组内部指针指向最后一个元素
$extension = end($temp);
$fileAddr = time().'.'.$extension;
move_uploaded_file($image["tmp_name"], $fileAddr);
return $fileAddr;
}
云调用:imgSecCheck.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
//初始化sdk示例
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
try{
//获取CDN链接的文件流
const qs = await new Promise((resolve, reject) => {
//encoding: null,这个是关键,否则返回字符串而不是二进制数组
request({method: 'GET',url:event.url,encoding: null},
(error, response, body) => {
if (error) {
reject(error)
} else {
resolve(body)
}
})
})
/**
let qs = await axios({
method: 'get',
url: event.url,
responseType: 'arraybuffer',
headers: { "Content-Type": "*" }
})
*/
let result = await cloud.openapi.security.imgSecCheck({
media: {
contentType: 'image/png',
value: qs
}
})
if (result && result.errCode.toString() === '87014'){
return { code: 300, msg: '涉嫌含有违法违规内容,请重新上传', data: result }
}else{
return { code: 200, msg: 'ok', data: result }
}
} catch (err) {
if (err.errCode.toString() === '87014'){
return { code: 300, msg: '涉嫌含有违法违规内容,请重新上传', data: err }
}
return { code: 400, msg: '调用security接口异常', data: err }
}
}
wx.chooseImage({
count: 1, //图片数量限制
sizeType: ['compressed'
], //压缩图
sourceType: ['album', 'camera'
],//相册,相机
success: (res) => {
const tempFiles = res.tempFiles;
console.log(tempFiles)
//[path:"http://tmp/JKLDSn4353DSLKHKJLDH.jpg",size: 3253]
tempFiles.forEach( (items,id) => {
// 官方云调用imgSecCheck 限1M
if (items && items.size <= 1024*1024) {
//图片转buffer
//获取全局唯一的文件管理器,读取本地文件内容
wx.getFileSystemManager().readFile({
filePath: items.path,
success: res => {
//data(string/ArrayBuffer)
var buff = res.data
wx.cloud.callFunction({
name: 'imgSecCheck',
data: {
//如果 data 中包含大数据字段(建议临界值 256KB),建议使用 wx.cloud.CDN 标记大数据字段,标记后在调用云函数时,该字段的内容将会上传至临时 CDN,然后在云函数中接收到的该字段值将是 CDN url,可在云函数中下载访问。通过这种方式,可以避免大数据传输造成的性能问题、及避免触及调用链路的传输大小限制。
url:wx.cloud.CDN(buff)
}
})
.then(res => {
let {errCode} = res.result.data;
switch (errCode) {
case 87014:
//此时说明图片内容不过
console.log("图片违规")
break;
case 0:
break;
default:
break;
}
})
.catch(err => {
console.error(err);
})
}
})
}
})
}
})
参考:https://developers.weixin.qq.com/community/develop/article/doc/0004829fb5419803893b162eb51813
https://developers.weixin.qq.com/community/develop/doc/000288cdd340f8c7798b289bb5c000?highLine=axios