Name Last Update
example Loading commit data...
src Loading commit data...
.gitignore Loading commit data...
README.md Loading commit data...
composer.json Loading commit data...
composer.lock Loading commit data...

安装

环境要求

  • PHP >= 7(代码中使用了一些PHP7的特性)

安装

composer require hanson/robot

文档

例子

自动回复

红包提醒

轰炸群

发送消息到某群名

消息转发

自定义处理器

是否@了我

基本使用

# 图灵API自动回复
require_once __DIR__ . './../vendor/autoload.php';

use Hanson\Robot\Foundation\Robot;
use Hanson\Robot\Message\Message;

$robot = new Robot([
    'tmp' => '/path/to/tmp/', # 用于生成登录二维码以及文件保存
    'debug' => true # 用于是否输出用户组的json
]);

$robot->server->setMessageHandler(function($message){
    if($message->type === 'Text'){
        $url = 'http://www.tuling123.com/openapi/api';

        $result = http()->post($url, [
            'key' => 'your tuling api key',
            'info' => $message->content
        ], true);

        return $result['text'];
    }
});

$robot->server->run();

API

server

# 消息处理处,接收到微信消息时的处理器
$robot->server->setMessageHandler(function($message){

});
# 自定义处理器,一直执行
$robot->server->setCustomHandler(function(){

});

Message

属性

类型 名称 解释
array from 消息来源
array sender 当消息来自于群组时,from为群组 ,而sender为消息发送者, 假若不为 group,sender 为空
string username 消息来源的username
array to 消息接收者,一般为自己
string content 经过处理的消息内容
carbon time 消息接收的的时间
string fromType 消息发送者的类型
string type 消息内容的类型

方法

bool send($word, $username) 发送消息给username的用户或者群组

  • 参数
    • string word 回复的文字
    • stirng username 用户或者群组的username

type 消息类型

  • Text 文字消息
  • Location 位置
  • Image 图片
  • Voice 语音
  • AddUser 添加朋友
  • Recommend 推荐名片
  • Animation
  • Share 链接分享
  • Video 小视频
  • VideoCall 视频聊天
  • Redraw
  • RedPacket 红包
  • Unknown 未知

fromType 消息发送者类型

  • System 系统消息
  • FriendRequest 加好友申请
  • Self 自己
  • FileHelper 文件助手
  • Group 群组
  • Contact 联系人
  • Official 公众号
  • Special qq邮件, 微信团队 , 漂流瓶等特殊账号
  • Unknown 未知

账号

无论是group, contact都有多个账号组成,而账号组成如下

{
  "@d5b4e97cd7bdf68152393e8e6c30ab67ba57e8fa57b4fcb5917490407c93fb06": {
    "Uin": 0,
    "UserName": "@d5b4e97cd7bdf68152393e8e6c30ab67ba57e8fa57b4fcb5917490407c93fb06",
    "NickName": "wendy",
    "HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgeticon?***",
    "ContactFlag": 3,
    "MemberCount": 0,
    "MemberList": [],
    "RemarkName": "",
    "HideInputBarFlag": 0,
    "Sex": 0,
    "Signature": "",
    "VerifyFlag": 0,
    "OwnerUin": 0,
    "PYInitial": "WENDY",
    "PYQuanPin": "wendy",
    "RemarkPYInitial": "",
    "RemarkPYQuanPin": "",
    "StarFriend": 0,
    "AppAccountFlag": 0,
    "Statues": 0,
    "AttrStatus": 135269,
    "Province": "",
    "City": "",
    "Alias": "",
    "SnsFlag": 17,
    "UniFriend": 0,
    "DisplayName": "",
    "ChatRoomId": 0,
    "KeyWord": "",
    "EncryChatRoomId": ""
  }
}

最重要的信息为

字段名 含义
UserName 每个账号唯一的ID,每次登录随机生成
NickName 账号的昵称
Alias 微信号

全局方法

本库用了大量的单例模式,为了方便写了一些方便的全局方法,contact,group,member等均继承了illuminate/support/Collection 相关文档: 中文文档 英文文档

account()

属性

类型 名称 解释
Hanson\Robot\Collections\Group group 群组
Hanson\Robot\Collections\Contact contact 联系人

方法

getAccount($username) 根据username返回账号 返回值 array

参数名 类型 解释
username string 账号数组

contact()

方法

getContactByUsername($username) 根据username获取Contact 返回值 array

参数名 类型 解释
username string 联系人的username

getContactById($id) 根据微信号获取Contact 返回值 array

参数名 类型 解释
id string 联系人的微信号

getUsernameById($id) 根据微信号获取 username 返回值 array

参数名 类型 解释
id string 联系人的微信号

group()

方法

isGroup($userName) 根据username判断是否群组 返回值 bool

参数名 类型 解释
username string 联系人的username

getGroupsByNickname($name, $blur = false, $onlyUsername = false) 根据名称筛选群组 返回值 array

参数名 类型 解释
name string 需要筛选的名称
blur bool 是否模糊匹配
onlyUsername bool 是否只筛选出username

member()

方法

getMemberByUsername($username) 根据username获取成员 返回值 array

参数名 类型 解释
name string 成员的username

myself()

属性

  • userName
  • nickname 昵称
  • sex 性别(0-女 1-男)

http()

方法

get($url, array $query = []) ajax get请求 返回值 string

参数名 类型 解释
url string 请求链接
query array 请求参数数组

post($url, array $query = [], $json = false) ajax post请求 返回值 string|array

参数名 类型 解释
url string 请求链接
query array 请求参数数组
array bool 是否进行json_decode处理

json($url, array $query = [], $json = false) ajax post json请求 返回值 string|array

参数名 类型 解释
url string 请求链接
query array 请求参数数组
array bool 是否进行json_decode处理

特别感谢

lbbniu/WebWechat

littlecodersh/ItChat

感谢以上两位作者曾对本人耐心解答

参考项目

liuwons/wxBot 参考了整个微信的登录流程与消息处理

to do list

  • 消息处理

    • 文字
    • 图片
    • 语音
    • 位置
    • 视频
    • 撤回
    • 表情
    • 红包
    • 转账
    • 名片
    • 好友验证
    • 分享
    • 小程序
  • 消息存储

    • 语音
    • 图片
    • 视频
    • 表情
  • 消息发送

    • 发送文字
    • 发送图片
    • 发送表情
    • 发送视频
  • 群操作

    • 创建群
    • 把某人踢出群
    • 邀请好友加入群
    • 修改群名称
  • 好友操作

    • 给好友添加备注
    • 通过好友验证
  • 聊天窗口操作

    • 置顶聊天会话
    • 取消聊天会话指定
  • 命令行操作信息发送

已知bug

  • 30% 的几率初始化失败(暂时无解,如清楚问题欢迎PR)