利用Mojo-Webqq/Weixin实现免QQ/微信登录来接收消息

初衷

有时候我会忘记登录QQ或者微信而错过一些非常重要得事,正好前几天看见了一篇文章,深入了解后我尽量简单介绍安装过程和实现目标。
值得说一句,这一篇文章只适用于喜欢折腾的少年,折腾的过程也是很享受的。觉得没多大用的朋友可以简单看一下文章,然后简简单单的登录QQ/微信就行了,就当了解这个东西一下!

文章中可能会出现一些错误,遇见了还请指正!

软件工作流程

使用Mojo-Webqq/Mojo-Weixin当作服务端获取消息,经过你设置的过滤方式,然后通过GCM/MiPush/HwPush/MzPushFmPush的推送服务推送到手机上,以上推送服务分别是由谷歌,小米,华为,魅族提供,你是什么手机就使用什么推送服务。
据原文作者介绍,使用GCM推送需要第一次设置时挂代理,之后就不用了,魅族的推送实际名为FmPush(配置文件中)
2017年08月19日时我使用FmPush推送出错,在项目的issues中有人提到了,我也遇见了

准备工作

一部安卓手机,一台服务器,境内境外都可以,至于一些操作,例如putty的使用这些这里就不介绍了。
以下操作都是在centos 7系统中操作完成,其它操作系统请自行更改一些命令来完成操作

安装过程

本来想直接给链接的,但是可能会出现不好阅读的情况,我看了原文的授权协议声明,在阅读协议说明后我觉得转账过来方便阅读
你也可以去看一下原文:原文链接

准备好环境和系统后接下来先解决依赖问题:

yum -y groupinstall "Development Tools"
yum install vim git openssl-devel perl cpan make gcc g++

由于我们需要 Mojo::WebQQ 这个 Perl 语言项目作为主机端接收QQ消息的平台,同时 CentOS 6.8 自带 yum 源没有 Cpanm 包管理,所以接下来需要安装 Cpanm:

cpan -i App::cpanminus

由于我们是第一次使用 Cpan ,程序会要求我们进行最基础的设定,一路回车即可,直到你看到:

CPAN needs access to at least one CPAN mirror.

As you did not allow me to connect to the internet 
you need to supply a valid CPAN URL now.

Please enter the URL of your CPAN mirror

不要惊慌,这是 Cpan 要求你设定一个 Cpan 仓库源,到这里找一个就可以,国内的主机可以去 China 列寻找,选择一个镜像服务器节点离你最近的地方,墙外的服务器可以直接用主站作为镜像源

Cpanm 安装完毕后,我们就可以安装 Mojo::WebQQ 了:

cpanm Mojo::Webqq

如果你是国内的主机,一般情况下下载速度会非常慢或者完全无法安装,这时候你可以这样做:

cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

如果出现了安装错误,一般情况下是 Mojolicious 未成功安装造成的,这时候你需要手动安装:

curl -L https://cpanmin.us | perl - -M https://cpan.metacpan.org -n Mojolicious

成功安装 Mojolicious 之后再次执行:

cpanm Mojo::Webqq

cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

应该就可以成功安装了
Mojo::Weixin的安装方法大致相同

设定

Mojo::WebQQ安装完毕后,就可以开始进行设定了

首先我们需要新建一个 Perl 脚本文件来执行:

touch GCM.pl

我们使用 vim 对文件进行操作:

vi GCM.pl

可能有人还不是很熟悉 vim 的使用方法,这里简单介绍一下会用到的功能:

i 进入编辑模式
ESC 退出编辑模式

在非编辑模式下
:wq 存盘退出 vim 
:q! 不存盘退出 vim

这里给出一个 Perl 脚本文件的模板,具体内容请根据实际情况替换更改:

use Mojo::Webqq;
#微信使用 use Mojo::Weixin
my $client = Mojo::Webqq->new(log_encoding=>"utf-8");
$client->load("ShowMsg");
#请根据自己所需的推送服务进行选择并删除或注释不需要的部分,填写格式请仿照 GCM 的方式填写
#以下为 GCM 推送
$client->load("GCM",data=>{
    api_url => 'https://gcm-http.googleapis.com/gcm/send',
    api_key=>'AIzaSyB18io0hduB_3uHxKD3XaebPCecug27ht8',
    registration_ids=>["输入你自己从 GCMForMojo APP中获取到的令牌"],
    allow_group=>["接受群消息的号码,如需要推送全部群消息可删除这一行,每个群号码之间使用 "", 分隔"],
    ban_group=>[],
    allow_discuss=>[],
    ban_discuss=>[],
    #此处为讨论组,填写格式同上
});
#以下为 MiPush 推送
$client->load("MiPush",data=>{
    registration_ids=>[""],
    allow_group=>[""],
    ban_group=>[],
    allow_discuss=>[],
    ban_discuss=>[],
});
#以下为 HwPush 推送
$client->load("HwPush",data=>{
    registration_ids=>[""],
    allow_group=>[""],
    ban_group=>[],
    allow_discuss=>[],
    ban_discuss=>[],
});
#以下为 FmPush 推送
$client->load("FmPush",data=>{
    registration_ids=>[""],
    allow_group=>[""],
    ban_group=>[],
    allow_discuss=>[],
    ban_discuss=>[],
       });
$client->load("Openqq",data=>{
    #如果是微信改为 Openwx
    listen => [{host=>"0.0.0.0",port=>5000}, ] ,
    #如果是推送微信的话需要保证端口不重复,并请保证所设定的端口已经在防火墙内放行,同时需要在 APP 内设定好推送服务器的地址和端口
});
#不需要 APP 内回复功能请删除以上三行(不包括被 # 号注释掉的几行)
$client->run(); 

保存退出后执行:

perl GCM.pl

这时候你的 GCMForMojo APP 应该会弹出一条检测到二维码事件的通知,点击它,使用手机端 QQ 扫描这个二维码,你的 GCMForMojo 就跑起来了
我的实际情况是会在控制台会弹出一个网址,进入后有一个二维码,用手机QQ扫描

注意事项

Perl 进程并不会后台运行!!!同时如果你的 SSH 连接中断的话当前终端下运行的全部会话均会被杀死,若想保持后台运行且断掉 SSH 连接后依旧可正常工作,请使用 screen 命令:

screen -S docker
perl GCM.pl

然后请按 Ctrl+A ,再按 D 键使此 screen 进入后台驻守,然后就可以中断 SSH 连接了,如果需要恢复此 screen 的话,请执行:

screen -r docker

Cpanm 仓库更新:

cpanm Mojo::Webqq

cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

Git 仓库源编译安装升级:

yum install perl-ExtUtils-MakeMaker git
git clone https://github.com/sjdy521/Mojo-Webqq.git
cd Mojo-Webqq
perl Makefile.PL
make
make install
make clean

以后更新时:

cd Mojo-Webqq
git pull
perl Makefile.PL
make
make install
make clean

Mojo::Weixin 的更新方式类似,请自行替换相应字符串

安全

安全性问题,例如开启https,或者加盐这里就不阐述了,请查看原文链接

客户端配置

我一直没提客户端那边的设置,是因为客户端那边是中文的,在项目地址中的链接中可以看见,酷安评论也有一些教程!
当你安装软件后,看了软件你自然就会配置了!

项目地址

6 评论

  1. fsadf 2018年06月14日 回复
    怎么实现加群功能,楼主有尝试吗
    1. Curtion [博主] 2018年06月16日 回复
      回复 fsadf: 没有尝试过,你可以加此项目的QQ群询问一下 498880156
  2. 姜辰 2018年02月15日 回复
    弱弱的说一句,你弄成功了吗?debian系一脸懵逼= =、
    1. Curtion [博主] 2018年02月15日 回复
      回复 姜辰: 写文章时我是成功了的,在shell中可以获取到消息。不过因为我的手机是魅族的,使用FmPush推送到手机这一步出错,然后就没有尝试了。
      1. 姜辰 2018年02月16日 回复
        回复 Curtion: 新年快乐~同魅族。= =、在想折不折腾。
        1. Curtion [博主] 2018年02月16日 回复
          回复 姜辰: 新年快乐。别折腾了,愉快的度过这个春节