微信 Laravel;微信 拉入黑名单 发信息
在开发微信相关功能时,有时需要将某些用户拉入黑名单,并且在用户被拉入黑名单后发送一条通知消息。介绍如何使用 Laravel 框架实现这一功能,并提供多种解决方案。
解决方案
通过以下步骤来实现功能:
1. 使用 Laravel 的数据库模型管理黑名单用户。
2. 使用微信的 API 将用户拉入黑名单。
3. 在用户被拉入黑名单后发送通知消息。
环境准备
在开始之前,请确保你已经安装了以下依赖:
- Laravel 框架
- 微信 SDK(如 overtrue/wechat
)
你可以通过 Composer 安装微信 SDK:
bash
composer require overtrue/wechat
创建黑名单模型和迁移
我们需要创建一个黑名单模型和相应的数据库迁移文件。
创建模型和迁移
运行以下命令创建模型和迁移文件:
bash
php artisan make:model Blacklist -m
在生成的迁移文件中,定义黑名单表的结构:
php
public function up()
{
Schema::create('blacklists', function (Blueprint $table) {
$table->id();
$table->string('openid')->unique(); // 微信用户的标识
$table->timestamps();
});
}
运行迁移命令:
bash
php artisan migrate
创建黑名单模型
在 app/Models/Blacklist.php
文件中,定义黑名单模型:
```php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Blacklist extends Model
{
use HasFactory;
protected $fillable = ['openid'];
}
```
拉入黑名单
接下来,我们编写一个方法将用户拉入黑名单,并调用微信 API。
编写控制器方法
在 app/Http/Controllers/WechatController.php
中,添加一个方法 addToBlacklist
:
```php
namespace AppHttpControllers;
use AppModelsBlacklist;
use EasyWeChatFactory;
class WechatController extends Controller
{
public function addToBlacklist($openid)
{
// 检查用户是否已经在黑名单中
if (Blacklist::where('openid', $openid)->exists()) {
return response()->json(['message' => 'User is already in blacklist'], 400);
}
// 添加用户到黑名单
Blacklist::create(['openid' => $openid]);
// 调用微信 API 将用户拉入黑名单
$app = Factory::officialAccount(config('wechat.official_account.default'));
$result = $app->user->block($openid);
if ($result['errcode'] === 0) {
// 发送通知消息
$this->sendNotification($openid);
return response()->json(['message' => 'User added to blacklist successfully'], 200);
} else {
return response()->json(['message' => 'Failed to add user to blacklist'], 500);
}
}
private function sendNotification($openid)
{
$app = Factory::officialAccount(config('wechat.official_account.default'));
$message = "您已被拉入黑名单。";
$app->customer_service->message($message)->to($openid)->send();
}
}
```
路由配置
在 routes/web.php
或 routes/api.php
中,添加路由:
php
Route::post('/wechat/blacklist/{openid}', [WechatController::class, 'addToBlacklist']);
多种思路
使用队列处理
为了提高系统的响应速度,可以将拉黑操作和发送通知消息放入队列中异步处理。
创建任务
运行以下命令创建任务:
bash
php artisan make:job AddToBlacklistJob
在 app/Jobs/AddToBlacklistJob.php
中,定义任务逻辑:
```php
namespace AppJobs;
use AppModelsBlacklist;
use EasyWeChatFactory;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class AddToBlacklistJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $openid;
public function __construct($openid)
{
$this->openid = $openid;
}
public function handle()
{
// 检查用户是否已经在黑名单中
if (Blacklist::where('openid', $this->openid)->exists()) {
return;
}
// 添加用户到黑名单
Blacklist::create(['openid' => $this->openid]);
// 调用微信 API 将用户拉入黑名单
$app = Factory::officialAccount(config('wechat.official_account.default'));
$result = $app->user->block($this->openid);
if ($result['errcode'] === 0) {
// 发送通知消息
$this->sendNotification();
}
}
private function sendNotification()
{
$app = Factory::officialAccount(config('wechat.official_account.default'));
$message = "您已被拉入黑名单。";
$app->customer_service->message($message)->to($this->openid)->send();
}
}
```
调用任务
在 WechatController
中,修改 addToBlacklist
方法:
php
public function addToBlacklist($openid)
{
dispatch(new AddToBlacklistJob($openid));
return response()->json(['message' => 'User will be added to blacklist'], 200);
}
使用定时任务
如果需要定期检查并处理黑名单用户,可以使用 Laravel 的定时任务功能。
创建命令
运行以下命令创建命令:
bash
php artisan make:command CheckBlacklistCommand
在 app/Console/Commands/CheckBlacklistCommand.php
中,定义命令逻辑:
```php
namespace AppConsoleCommands;
use AppModelsBlacklist;
use EasyWeChatFactory;
use IlluminateConsoleCommand;
class CheckBlacklistCommand extends Command
{
protected $signature = 'blacklist:check';
protected $description = 'Check and process blacklisted users';
public function handle()
{
$blacklistedUsers = Blacklist::all();
foreach ($blacklistedUsers as $user) {
// 调用微信 API 将用户拉入黑名单
$app = Factory::officialAccount(config('wechat.official_account.default'));
$result = $app->user->block($user->openid);
if ($result['errcode'] === 0) {
// 发送通知消息
$this->sendNotification($user->openid);
}
}
}
private function sendNotification($openid)
{
$app = Factory::officialAccount(config('wechat.official_account.default'));
$message = "您已被拉入黑名单。";
$app->customer_service->message($message)->to($openid)->send();
}
}
```
注册定时任务
在 app/Console/Kernel.php
中,注册定时任务:
php
protected function schedule(Schedule $schedule)
{
$schedule->command('blacklist:check')->daily();
}
通过以上步骤,你可以实现将用户拉入黑名单并发送通知消息的功能。能帮助你更好地管理和维护你的微信应用。