PHP 微信机器人 Vbot 结合 Laravel 基础入门及实例
新来了项目,需要能监听指定微信群的消息并进行转发。基于 PHP 7 的 web 微信机器人 Vbot 可以满足需求。Vbot 本质上就是实现了登录网页版微信来进行自动回复、群管理等等操作。
github 地址:https://github.com/hanson/vbot,官网地址:http://create.hanc.cc/vbot/。
安装
环境要求:
PHP >= 7.0.0
PHP fileinfo 扩展
PHP gd 扩展
PHP SimpleXML 扩展
安装命令:
composer require hanson/vbot
基本使用
接下来是干货了。由于项目需求较简单,没有涉及到高深的东西,读者各取所需就行。
项目框架是 Laravel,从指定群中监听消息,如果符合格式,则自动转发到目标群中。
Vbot 的使用一般分为四步:初始化 Vbot 实例;设置消息处理器;设置监听器;启动 Vbot 服务。
初始化 Vbot 实例
Vbot 初始化配置只是修改指定了下载、日志、缓存文件等等的存储路径。
config/vbot.conf:
<?php $path = storage_path('wechat');
return [
'path' => $path,
/*
* swoole 配置项(执行主动发消息命令必须要开启,且必须安装 swoole 插件)
*/
'swoole' => [
'status' => false,
'ip' => '127.0.0.1',
'port' => '8866',
],
/*
* 下载配置项
*/
'download' => [
'image' => true,
'voice' => true,
'video' => true,
'emoticon' => true,
'file' => true,
'emoticon_path' => $path . '/emoticons', // 表情库路径(PS:表情库为过滤后不重复的表情文件夹)
],
/*
* 输出配置项
*/
'console' => [
'output' => true, // 是否输出
'message' => true, // 是否输出接收消息 (若上面为 false 此处无效)
],
/*
* 日志配置项
*/
'log' => [
'level' => 'debug',
'permission' => 0777,
'system' => $path . '/log', // 系统报错日志
'message' => $path . '/log', // 消息日志
],
/*
* 缓存配置项
*/
'cache' => [
'default' => 'file', // 缓存设置 (支持 redis 或 file)
'stores' => [
'file' => [
'driver' => 'file',
'path' => $path . '/cache',
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
],
],
/*
* 拓展配置
* ==============================
* 如果加载拓展则必须加载此配置项
*/
'extension' => [
// 管理员配置(必选),优先加载 remark(备注名)
'admin' => [
'remark' => '',
'nickname' => '',
],
// 'other extension' => [ ... ],
],
];
app/Console/Commands/SendVbot.php:
public function handle()
{
$vbot = new Vbot(config('vbot_conf'));
}
设置消息处理器
app/Console/Commands/SendVbot.php:
public function handle()
{
...
$myvbot = app(MyVbot::class); // 获取消息处理器实例
$messageHandler = $vbot->messageHandler; // 收到消息时触发
$messageHandler->setHandler([$myvbot, 'messageHandler']);
}
app/Handlers/MyVbot:
<?php namespace App\Handlers; use Hanson\Vbot\Message\Text;
use Illuminate\Support\Collection; class MyVbot
{
public function messageHandler(Collection $message)
{
// 消息发送者类型
$fromType = $message['fromType'] ?? null;
// 消息类型
$type = $message['type'] ?? null;
// 经过处理显示在控制台的消息
$content = $message['content'] ?? null;
// 转格式后的消息
$message_in = $message['message'] ?? null;
// 发送者的 Username,当为群消息时此值为 sender 的 username
$username = $message['username'] ?? null; // 消息来源
$fromUserName = $message['from']['UserName'] ?? null;
$fromNickName = $message['from']['NickName'] ?? null; // 群消息发送者
$senderUserName = $message['sender']['UserName'] ?? null;
$senderNickName = $message['sender']['NickName'] ?? null; ... vbot('console')->log("【转发消息】:{$content}");
Text::send($group_username, $content); ...
}
}
设置监听器
app/Console/Commands/SendVbot.php:
public function handle()
{
...
$myobserver = app(MyObserver::class); // 获取监听器实例
$observer = $vbot->observer; // 二维码监听器
$observer->setQrCodeObserver([$myobserver, 'setQrCodeObserver']); $observer->setLoginSuccessObserver([$myobserver, 'setLoginSuccessObserver']); $observer->setExitObserver([$myobserver, 'setExitObserver']);
}
app/Observers/MyObserver.php:
<?php namespace App\Observers; use App\Repositories\Ding2Repository; class MyObserver
{
protected $ding2Repository;
protected $uri;
protected $console; public function __construct(Ding2Repository $ding2Repository)
{
$this->ding2Repository = $ding2Repository;
$this->console = vbot('console');
$this->uri = 'https://oapi.dingtalk.com/robot/send?access_token=xxx';
} public function setQrCodeObserver($qrCodeUrl)
{
$qrcode_url = str_replace('/l/', '/qrcode/', $qrCodeUrl);
$this->ding2Repository->robotQrSend($this->uri, $qrcode_url);
} public function setLoginSuccessObserver()
{
$this->ding2Repository->robotLoginSuccessSend($this->uri); $this->console->log('登录成功');
} public function setExitObserver()
{
$this->ding2Repository->robotExitSend($this->uri); $this->console->log('程序退出');
}
}
启动 Vbot 服务
public function handle()
{
...
try {
$vbot->server->serve();
} catch (Exception $e) {
$this->error($e->getMessage());
}
}
编码完成之后就可以运行 PHP 命令来启动 Vbot 进程。
PHP 微信机器人 Vbot 结合 Laravel 基础入门及实例的更多相关文章
- 零基础入门微信小程序开发
注:本文来源于:<零基础入门微信小程序开发> 课程介绍 本达人课是一个系列入门教程,目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件.页面样式文件.Ja ...
- Laravel 推荐-基础入门+实战+拓展视频教程
1.laravel基础 1.Composer:类库管理神器 - Laravel的安装和配置 2.路由:地址和方法的小媒人 - 基础路由 3.控制器:管家婆 - 基础用法 4.视图:最终结果输出 5.b ...
- Python创建微信机器人
微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地,今天我们要将便是如何用Python来生成一个微信机器人,突然想起鲁迅先生曾经说过的一句话:因为是微信机器人系列的 ...
- 这是一款借助chrome 插件的微信机器人
1.chrome kit微信机器人简介 借助chrome 插件 js注入来实现消息的发送 chrome devtool api的调用来监听https请求 打开微信登录界面,在扫码登录前必须先打开too ...
- 基于itchat的微信群聊小助手基础开发(一)
前段时间由于要管理微信群,基于itchat开发了一个简单的微信机器人 主要功能有: 图灵机器人功能 群聊昵称格式修改提示 消息防撤回功能 斗图功能 要开发一个基于itchat的最基本的聊天机器人,在g ...
- C#区块链零基础入门,学习路线图 转
C#区块链零基础入门,学习路线图 一.1分钟短视频<区块链100问>了解区块链基本概念 http://tech.sina.com.cn/zt_d/blockchain_100/ 二.C#区 ...
- 机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT)【转】
转自:http://blog.exbot.net/archives/2966 导语:本期公开课面向想入手ROS却又不知从何下手的小伙伴,为大家梳理好学习思路. ROS和Android一样是开源的,功能 ...
- laravel基础课程---1、laravel安装及基础介绍(laravel如何安装)
laravel基础课程---1.laravel安装及基础介绍(laravel如何安装) 一.总结 一句话总结: [修改composer镜像地址].[明确laravel的安装要求].[安装指定版本的la ...
- 零基础入门 实战mpvue2.0多端小程序框架
第1章 课程快速预览(必看!!!)在这一章节中,老师讲带领你快速预览课程整体.其中,涉及到为什么要做这么一门实战课程.制作一个小程序的完整流程是怎么样的,以及如何做项目的技术选型. 第2章 30 分钟 ...
随机推荐
- 牛客-2018多校算法第五场C-KMP
字符串的问题 在原来的字符串中前缀与后缀相同,且原来的中间还含有这个子串: 这里加的num[]数组真是太厉害了,可以直接用来判断中间是否有子串: #include <iostream> # ...
- codeforces H. Queries for Number of Palindromes(区间dp)
题目链接:http://codeforces.com/contest/245/problem/H 题意:给出一个字符串还有q个查询,输出每次查询区间内回文串的个数.例如aba->(aba,a,b ...
- 2018 Multi-University Training Contest 1(部分题解)
Maximum Multiple Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Vue组件间通信方式
一.Props传递数据 在父组件中使用子组件,本质通过v-bind绑定属性传入子组件,子组件通过props接收父组件传入的属性 <template> <div> 父组件:{{m ...
- RHEL7破解密码操作步骤
首先查看系统是什么版本 cat /etc/redhat-release 第1步:然后重启Linux系统并出现引导界面时,按下键盘上的e键进入内核编辑界面. 第2步:在Linux16 参数这行的最后面追 ...
- Java获取两个日期之间的所有日期集合
1.返回Date的list private List<Date> getBetweenDates(Date start, Date end) { List<Date> resu ...
- MongoDB的入门使用以及遇到的坑
一:MonoDB的简单介绍 MongoDB是一个介于关系型数据库与非关系型数据库中间的数据库,是使用C++进行编写的,他的优点是在支持的查询格式特别的强大,可以进行存储比较复杂的数据类型,支持建立索引 ...
- SeekBar拖动条
seekbar拖动条,通过滑块的位置值的改变,来对某些数据进行调节,比如音量调节; 改变滑块的外观可以通过android:thumb属性完成 实例:拖动滑块改变图片透明度 <LinearLayo ...
- 从原理到场景 系统讲解 PHP 缓存技术
第1章课程介绍 此为PHP相关缓存技术的课堂,有哪些主流的缓存技术可以被使用? 第1章 课程介绍 1-1课程介绍1-2布置缓存的目的1-3合理使用缓存1-4哪些环节适合用缓存 第2章 文件类缓存 2- ...
- Vue路由(vue-router)详细讲解指南
中文文档:https://router.vuejs.org/zh/ Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.路由实际 ...