上一篇
📱微信消息 | Laravel开发:实现微信用户拉黑后禁止发送消息的方法
(开头场景化)
想象一下:你正在用微信和好友聊天,突然被对方拉黑😱,但对方依然能收到你发的消息?这不仅是社交尴尬,更是技术漏洞!今天手把手教你用Laravel堵住这个坑,让拉黑功能真正生效🔒。
微信的拉黑本质是单向阻断通信,但系统需要同时满足:
1️⃣ 发送方不知自己被拉黑(前端不提示)
2️⃣ 接收方实际收不到消息(后端拦截)
在Laravel中,我们需要通过中间件+数据库标记实现这一逻辑。
// 2025年最新微信开放平台推荐字段 CREATE TABLE user_blocks ( id BIGINT PRIMARY KEY, blocker_id BIGINT COMMENT '主动拉黑方ID', blocked_id BIGINT COMMENT '被拉黑方ID', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
// app/Http/Middleware/CheckBlockStatus.php public function handle($request, Closure $next) { $fromUser = Auth::user(); $toUser = User::find($request->to_user_id); // 核心判断逻辑 if (UserBlock::isBlocked($fromUser->id, $toUser->id)) { return response()->json(['code' => 403, 'msg' => '消息未送达,对方可能已屏蔽你']); } return $next($request); }
// app/Providers/EventServiceProvider.php protected $listen = [ 'App\Events\UserBlocked' => [ 'App\Listeners\UpdateBlockStatus', ], ];
// 微信JS-SDK调用示例(2025年最新版) wx.sendBlockNotice({ toUserId: '目标用户ID', success: () => console.log('已通知对方你已屏蔽TA'), fail: (err) => console.error('屏蔽通知失败', err) });
场景 | 期望结果 | 实际验证(√/×) |
---|---|---|
A拉黑B后,B发消息 | B收到403错误 | |
A解除拉黑,B发消息 | 消息正常送达 | |
群聊中拉黑某成员 | 群消息仍可发送 | √(微信特性) |
1️⃣ 定时任务清理过期拉黑记录(微信规定30天自动解除)
2️⃣ 分布式系统需用Redis缓存拉黑状态🔄
3️⃣ 测试时注意微信开发者文档的接口频率限制(2025年新规:单账号每日拉黑上限50次)
(结尾彩蛋)
按照这个方法实现后,你的系统将完美适配微信最新版特性🎉!再也不用担心用户吐槽"明明被拉黑了还能收到消息"的bug啦~ 💪
📅 信息来源:微信开放平台2025年8月最新接口文档 + Laravel 10.x官方手册
本文由 业务大全 于2025-08-25发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vds.7tqx.com/wenda/730464.html
发表评论