hexsum / Mojo-Webqq

【重要通知:WebQQ将在2019年1月1日停止服务,此项目目前已停止维护,感谢大家四年来的一路陪伴】使用Perl语言(不会没关系)编写的smartqq/webqq客户端框架(非GUI),可通过插件提供基于HTTP协议的api接口供其他语言或系统调用
BSD 2-Clause "Simplified" License
1.72k stars 321 forks source link

【重要通知】关于账号密码登录以及无法成功获取到uid的问题 #183

Open hexsum opened 6 years ago

hexsum commented 6 years ago

最新的情况通报:

账号密码登录的方式似乎已经被腾讯封禁了,只能使用二维码的方式登录,但是如果希望获取uid等信息,仍然需要提供账号,密码信息,所以需要这样设置

use Digest::MD5;
Mojo::Webqq->new(login_type=>"qrlogin",account=>'你的QQ账号', pwd=>Digest::MD5::md5_hex('你的QQ账号登录密码'));

-------------------------------旧的讨论------------------------------------------

写在开头:

程序当前获取uid的方式并不完美,如果存在昵称相同的好友,或者一个群里存在昵称相同的群成员,这相同昵称的好友或者群成员都无法获取到uid 所以,如果你获取uid的目的只是为了调用api接口发送消息,那么直接使用昵称来发送更为简单,不需要账号密码登录,也不需要获取uid,比如: http://127.0.0.1:5000/openqq/send_group_message?name=test&content=hello(中文要做urlencode) 发送消息接口详见:https://github.com/sjdy521/Mojo-Webqq/blob/master/API.md 唯一的差别就是uid不会变化,但是昵称可能会被用户修改,但是一般修改昵称的频率也不会很高

注意: 原生的SmartQQ是不支持账号密码登录的 程序实际上是通过 http://qun.qq.com 页面账号密码登录 然后和SmartQQ共享登录状态,从而实现账号密码登录以及获取uid(QQ号)的扩展信息 所以,账号密码的登录方式并不稳定,一旦失败,程序会再次自动尝试使用二维码扫描登录 并且请关闭帐号的密保功能,不支持密保登录

首先,Mojo::Webqq 需要至少升级到v2.1.8版本 扩展信息(uid)的获取是从腾讯官方的 http://qun.qq.com 获取的,但是这个页面获取数据需要先进行账号密码登录 登录过程涉及到复杂的RSA加密,因此除了Mojo::Webqq,你还需要再安装一个新的模块 Webqq::Encryption Webqq::Encryption 安装过程参考:https://github.com/sjdy521/Webqq-Encryption

然后在你的pl脚本中增加login_type、account和pwd参数,如下:

Mojo::Webqq->new(login_type=>"login",account=>'你的QQ账号', pwd=>'你的QQ账号登录密码的32位md5值');

shell下可以通过 echo -n xxxxxxx|md5sum 生成md5值

如果你不介意直接把密码写在pl脚本中,可以直接调用perl的md5函数来直接计算md5,如下:

use Digest::MD5;
Mojo::Webqq->new(login_type=>"login",account=>'你的QQ账号', pwd=>Digest::MD5::md5_hex('你的QQ账号登录密码'));

如果你登录过程中碰到如下异常:

[18/01/08 17:21:28] [warn] 更群扩展信息授权失败: 可能因为登录环境变化引起

可能的原因是,基于账号密码的登录方式,一旦登录所在地发生较大变化,则腾讯服务器可能需要你输入图片验证码,这样就很难实现自动化操作,为了避免这种情况,你需要尽量在pl脚本所在的网络中用浏览器多登录一下 http://qun.qq.com 让腾讯服务器消除登录异常的判断

你可以在服务端搭建ssh隧道,socks5代理,支持SSL转发(CONNECT方法)的http代理等方式,然后浏览器通过服务端代理访问,可能需要多访问几天才能最终接触账号的异地登录状态,从而实现账号密码自动登录

simonsmh commented 6 years ago

勘误:

不建议直接把密码写在pl脚本中

介意直接把密码写在pl脚本中

Digest::MD5::md5_hex('你的QQ账号登录密码的32位md5值')

Digest::MD5::md5_hex('你的QQ账号登录密码')

apt-get install libcrypt-opensssl-bignum-perl libcrypt-openssl-rsa-perl

apt-get install libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl

hexsum commented 6 years ago

@simonsmh 感谢,均已更正

Rain0193 commented 6 years ago

用Mojo-Webqq不能群发消息请问是什么原因,是因为不能返回组员的uid嘛,求解决方法!!

Sendurl: http://170.240.203.180:5000/openqq/send_group_message?uid=511854474&content=%E5%90%84%E4%BD%8D%E5%B0%8F%E4%BC%99%E4%BC%B4%EF%BC%8C%E9%A1%B9%E7%9B%AEFM_Android_%23154_QaRelease_V3.8.0%E7%BC%96%E8%AF%91%E6%88%90%E5%8A%9F%EF%BC%81%0A%E5%BA%94%E7%94%A8%E5%90%8D%E7%A7%B0%EF%BC%9A%E5%B0%81%E9%9D%A2%E6%96%B0%E9%97%BB%28Android%29%0A%E7%89%88%E6%9C%AC%E4%BF%A1%E6%81%AF%EF%BC%9A3.8.0%0A%E7%8E%AF%E5%A2%83%EF%BC%9A%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%0A%E8%AF%B7%E5%89%8D%E5%BE%80%E8%92%B2%E5%85%AC%E8%8B%B1%E4%B8%8B%E8%BD%BD%EF%BC%9Ahttps%3A%2F%2Fwww.pgyer.com%2FFm_AndroidTest

response: {"code":101,"id":null,"status":"group not found"}

hexsum commented 6 years ago

@Rain0193 是的 要想获取uid可以参加此issue开头的解决方案 或者你可以用id来发送消息,id可以通过/openqq/get_group_info /openqq/search_group之类的api来获取到

mind9blowing commented 6 years ago

@sjdy521 请问是否有更好的方法防止账号被冻结呢

tusooa commented 6 years ago

给疼逊充钱,注册企业账号。

tusooa commented 6 years ago

努力提高qq等级,实名认证。。。

david082321 commented 6 years ago

分享一下我的做法,在安装Mojo的VPS上安装SSR,连上SSR之后,开启qun.qq.com,反复登录、退出。大概五次之后,等一阵子。再去登录时,如果不用图形验证,表示成功了。

SerCom-KC commented 6 years ago

有没有可能通过下载 qun.qq.com 快速安全登录的二维码来回避图片验证呢?我的账号比较奇葩,正常登录也带图片验证( 虽然要下两个二维码也是比较蛋疼就是了

qjzcj2008 commented 6 years ago

分享一下我的做法,在安装Mojo的VPS上安装SSR,连上SSR之后,开启qun.qq.com,反复登录、退出。大概五次之后,等一阵子。再去登录时,如果不用图形验证,表示成功了。

想问一下你在安全验证通过之后会不会提示账号或密码错误啊,我连我vps上的酸酸乳似乎没有办法登陆所有腾讯的服务,都会在输入密码通过安全验证后提示“你输入的帐号或密码不正确,请重新输入。 ”

yuhangrao commented 6 years ago

执行use Digest::MD5的时候提示use command not found怎么解决啊