//實例化
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
],
]);
}
//文本安全內(nèi)容檢測
$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('內(nèi)容存在違規(guī)', 0, $res->toArray());
}
//媒體內(nèi)容,有幾張圖就循環(huán)幾次
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+幾 判斷合規(guī)后-- 達到1為正常展示
$post = UserPostModel::create($data);
if (!empty($trace_id)) {
foreach ($trace_id as $trace){
// 異步檢測結(jié)果在 30 分鐘內(nèi)會推送到你的消息接收服務(wù)器
cache([$trace => $post->id], 1800); //圖片對應(yīng)的post_id, 如果消息推送有違規(guī),進行刪除
}
return success('審核后展示');
}
//異步消息通知是否合規(guī)
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剛好合規(guī)展示
}
} else {
//進行帖子投訴
$postId = cache($trace_id);
if (!empty($postId)) {
$post = UserPostModel::find($postId);
if (!empty($post)) {
//命中標(biāo)簽枚舉值,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' => '微信安全檢測結(jié)果"' . ($label[$result['label']] ?? '檢測異常')
]);
}
}
}
}
}catch (\Exception $e){
}
$response = $server->serve();
return response($response->getBody()); //注意這里,用框架自己的response包一下,返回正常的響應(yīng)
}