//实例化
function wx()
{
return new \EasyWeChat\MiniApp\Application([
'app_id' => env('WX_APPID'),
'secret' => env('WX_SECRET'),
'token' => 'X7gH5tQ3vB9sK1mP2dF4eR6cT8wU0xJ',
'aes_key' => 'GGCMzbtnlgXLcTfkWCqy4RI3vzqYYzYOICetP8P8RIf',
'response_type' => 'array',
'http' => [
'throw' => false
],
]);
}
//文本安全内容检测
$res = wx()->getClient()->postJson('wxa/msg_sec_check', [
'openid' => $openId,
'content' => $data['content'],
'version' => 2,
'scene' => 3,
]);
if($res->isFailed()){
return error('出错了', 0, $res->toArray());
}
if ($res['errmsg'] != "ok" || $res['result']['suggest'] != "pass") {
return error('内容存在违规', 0, $res->toArray());
}
//媒体内容,有几张图就循环几次
foreach ($data['imgs'] as $img) {
$res = wx()->getClient()->postJson('wxa/media_check_async', [
'media_url' => $img,
'media_type' => 2,
'version' => 2,
'scene' => 3,
'openid' => $openId
]);
if($res->isFailed()){
return error('出错了', 0, $res->toArray());
}
if ($res['errcode'] == 0) {
//记录下trace_id
$trace_id[] = $res['trace_id'];
}
}
$data['check_status'] = 1 + count($trace_id); //几张图片就是1+几 判断合规后-- 达到1为正常展示
$post = UserPostModel::create($data);
if (!empty($trace_id)) {
foreach ($trace_id as $trace){
// 异步检测结果在 30 分钟内会推送到你的消息接收服务器
cache([$trace => $post->id], 1800); //图片对应的post_id, 如果消息推送有违规,进行删除
}
return success('审核后展示');
}
//异步消息通知是否合规
public function wechatMsg(Request $request)
{
$app = wx();
$symfony_request = new SymfonyRequest($request->get(), $request->post(), [], $request->cookie(), [], [], $request->rawBody());
$symfony_request->headers = new HeaderBag($request->header());
$app->setRequestFromSymfonyRequest($symfony_request);
$server = $app->getServer();
try {
$message = $server->getDecryptedMessage();
if ($message->Event === 'wxa_media_check') {
$trace_id = $message->trace_id;
$result = $message->result;
if($result['suggest'] == 'pass') {
$postId = cache($trace_id);
if (!empty($postId)) {
UserPostModel::where('id', $postId)->decrement('check_status'); //这里自减,合格一个减去1,减到1刚好合规展示
}
} else {
//进行帖子投诉
$postId = cache($trace_id);
if (!empty($postId)) {
$post = UserPostModel::find($postId);
if (!empty($post)) {
//命中标签枚举值,100 正常;20001 时政;20002 色情;20006 违法犯罪;21000 其他
$label = [
'100' => '正常',
'20001' => '政治',
'20002' => '色情',
'20006' => '违法',
'21000' => '其他'
];
UserPostComplaintModel::create([
'type' => 2,
'user_id' => 1,
'to_user_id' => $post->user_id,
'post_id' => $postId,
'reason' => '微信安全检测结果"' . ($label[$result['label']] ?? '检测异常')
]);
}
}
}
}
}catch (\Exception $e){
}
$response = $server->serve();
return response($response->getBody()); //注意这里,用框架自己的response包一下,返回正常的响应
}
网友评论