这几天在用python写了一个模拟登陆web微信,发送和接受信息的程序。发现步骤不多,但需要的参数太多了
整个过程中,务必保证session、headers、cookie一致,不然的话,中间会出现登陆异常。
把流程和细节分享出来
第一步:登陆
1、get访问微信首页https://wx.qq.com
提供session、headers
用途:获取cookie
后续访问必须带session、headers、cookie这三个参数,并保持不变
2、get访问https://wx.qq.com/jslogin
get参数分别是
appid:值为自定义,格式为wx782c26e4c19acffb
fun:值为new
lang:值为en_us
redirect_uri:值为https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
_:值为当前时间戳
完整的URL例子https://wx2.qq.com/jslogin?redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&appid=wx782c26e4c19acffb&lang=en_US&_=1485065568&fun=new
用途:获取二维码uuid
3、get访问https://wx.qq.com/qrcode/{{uuid}}
例子:https://wx2.qq.com/qrcode/AfdK5U5qyw==
用途:下载和展示二维码
4、扫码和确认,访问https://wx.qq.com/cgi-bin/mmwebwx-bin/login,
get参数
loginicon:值必须为true
uuid:值为{{uuid}}
r:值为当前时间戳/1524
_:值为当前时间戳
完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=AacJ62nlRg==&tip=0&r=-974452&_=1485065779
用途:返回登陆状态,登陆成功之后的redirect_uri
返回状态码说明如下:
200,扫码和确认成功
201,扫码,未确认
其他,未扫码或者其他原因
第二步、初始化页面和获取登陆信息
1、get访问{{redirect_uri}}
完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=A0k1PKCiAX8_8nyisAG0R9d5@qrticket_0&uuid=AacJ62nlRg==&lang=en_US&scan=1485065793
用途:返回登陆认证等信息,一个字典类型的json格式,下文用login_info表示
2、post访问https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=【当前时间戳】
post参数为
BaseRequest:通过1返回参数获取值
例子:{"BaseRequest": {"DeviceID": "uKUD8e%2Bp7iXqNpbOuPTntL7OdbsfxEv5JdQjKtb7Mc%2FVQK2leE%2BRrNVkI5fQZZjB", "Sid": "xkQE8IoFPjwXEf2W", "Uin": "575635712", "Skey": "@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324", "isgrayscale": "1"}}
用途:返回微信用户信息、第一页好友信息、和BaseRequest、最新聊天信息等等
第三步、获取好友信息
get访问https://wx.qq.com/webwxgetcontact
get参数
r:值为当前时间戳
seq:值为0
skey:值为login_info[Skey]
完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1485065800&seq=0&skey=@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324
用途:返回所有的好友信息,字典json格式
有用的好友信息字段说明:
Sex:1表示男,2表示女,0为其他【没有设置性别的好友、公众号、群、系统账号等等】
UserName,微信系统为每个微信号分配一个唯一号码,开头@@表示群、字母或者数字开头表示系统账号,其他【公众号、好友等】以单@开头
NickName,个人设置的昵称,重复可能性很大
Alias,微信号,如果没有设置为空,不会出现重复
第四步、接受和发送新信息
1、接受信息
1)、定时检查是否有新信息
get访问https://{{sync_url}}/synccheck
get参数是:
'r' : 当前时间戳*1000
'skey' : login_info[skey]
'sid' : login_info[sid]
'uin' : login_info[uin]
'deviceid' : login_info[deviceid]
'synckey' : login_info[synckey]
'_' : 当前时间戳*1000
完整的URL例子:https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck?deviceid=e565817597249768&synckey=List_%5B%7B%27Key%27%3A+1%2C+%27Val%27%3A+645531166%7D%2C+%7B%27Key%27%3A+2%2C+%27Val%27%3A+645531276%7D%2C+%7B%27Key%27%3A+3%2C+%27Val%27%3A+645531125%7D%2C+%7B%27Key%27%3A+1000%2C+%27Val%27%3A+1485058018%7D%5D%7CCount_4&skey=%40crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324&sid=xkQE8IoFPjwXEf2W&r=1485065802608&_=1485065802608&uin=575635712
用途:返回最新信息数,0表示没有新消息
2)、获取新信息内容,post访问https://wx.qq.com/webwxsync?sid=login_info[sid]&skey=login_info[skey]&lang=en_US&pass_ticket=login_info[pass_ticket]
post参数为
'BaseRequest' : login_info[BaseRequest]
'SyncKey' : login_info[SyncKey]
'rr' :~当前时间戳*1000
例子:{"rr": -1485065809, "BaseRequest": {"Ret": 0, "ErrMsg": ""}, "SyncKey": {"List": [{"Key": 1, "Val": 645531166}, {"Key": 2, "Val": 645531278}, {"Key": 3, "Val": 645531125}, {"Key": 11, "Val": 645531260}, {"Key": 13, "Val": 645524153}, {"Key":
201, "Val": 1485065810}, {"Key": 203, "Val": 1485064747}, {"Key": 1000, "Val": 1485058018}, {"Key": 1001, "Val": 1485057992}, {"Key": 1002, "Val": 1485058221}, {"Key": 1004, "Val": 1484911834}], "Count": 11}}
完整的URL例子:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=xkQE8IoFPjwXEf2W&skey=@crypt_2b05caf0_2290c785d1bc5646d2ff0ff771ec3324&lang=en_US&pass_ticket=uKUD8e%2Bp7iXqNpbOuPTntL7OdbsfxEv5JdQjKtb7Mc%2FVQK2leE%2BRrNVkI5fQZZjB
用途:返回最新信息列表
注意:群信息的发送者放在Content开头部分
2、发送信息
post访问https://wx.qq.com/webwxsendmsg
post参数
'BaseRequest': self.base_request,
'Msg': {
'Type': login_info[BaseRequest],
'Content': content,
'FromUserName': 自己的username,
'ToUserName': 发送的username,
'LocalID': int(time.time() * 1000 * 1000 * 10),
'ClientMsgId': int(time.time() * 1000 * 1000 * 10),
},
'Scene' : 0
返回发送结果json字典
有错误之处,请指教
分享到:
相关推荐
在微信模拟登录中,我们需要按照微信提供的API文档,正确地进行授权流程,获取到访问令牌,才能进一步调用微信的接口进行操作。 在描述中提到的“支持组管理”,意味着模拟登录后可能需要进行微信群的管理操作,这...
C#代码微信开发 带参数二维码, 可用于不同渠道的推广宣传二维码制作。
【C# ASP.NET MVC Web微信三方扫码登录与授权登录】是一个关于使用C#编程语言、ASP.NET MVC框架,实现微信第三方登录功能的项目。在这个项目中,开发者将学习如何集成微信API,允许用户通过微信账号进行扫码登录或...
模拟登陆微信公众平台可发消息(2014-7-9) 教程:http://blog.csdn.net/wlmnzf/article/details/37607501
最详细的微信接口说明,很全面,是WEB微信的分析解剖!
最新版微信模拟登陆,实现最新微信模拟登陆,测试通过
通过以上步骤,你可以使用SpringBoot和微信开放平台实现一个完整的Web端扫码登录系统。在实际开发中,还需要考虑用户体验、错误处理以及与其他业务系统的集成。文件"yf_WeChatScanLoginCode"可能包含了实现这一功能...
【C#版本微信网页版模拟登陆】是一种使用C#编程语言实现的微信网页登录解决方案,主要目的是通过模拟浏览器的行为,实现自动登录微信网页版并处理登录过程中涉及的COOKIE问题。在这一技术中,开发者通常会利用.NET...
web版微信协议分析。当前分析到登陆部分。举一反三,后续的拉取好友列表和发送消息等协议都好分析出来了。作者:孙强壮。
微信SDK - 包括微信支付、微信公众号、微信登陆、微信消息处理源码.zip
实现基于web的微信三方扫码登录与授权登录
实现模拟登陆微信平台,获取用户列表后,向用户发送消息。jar包 文件已经给出,只要是添加上 公共平台的用户名 密码就可以了
微信Web开发者工具,可用于微信小程序,微信公众号的开发
培训项目运营SOP-微信群裂变流程细节及话术
在这个“微信支付,微信登陆,微信APP登陆,微信APP支付”的demo中,我们可以深入探讨这两个功能的实现原理和关键步骤。 首先,微信登录(WeChat Login)是通过微信SDK实现的,它允许用户使用微信账号一键登录到第...
不过目前而言,想拥有微信原生的体验,多数是用登陆web微信的方式。这种做法有两个限制 用的微信号是能够登陆网页版微信的,这种号会越来越少,阁下可以试试自己的号能不能登陆微信网页版,我想大概率是不能的 ...
首先,实现微信模拟登录的关键在于理解微信网页版的登录流程。通常,这个过程涉及到以下几个步骤: 1. **请求登录页面**:使用HttpClient类向微信登录URL发起GET请求,获取登录页面的HTML内容,其中包含了用于后续...
微信分享流程图1 微信分享流程图1是指在微信平台上实现分享功能的整个过程。下面将对该流程图进行详细的解读和分析...通过对微信分享流程图1的深入理解和掌握,可以更好地实现微信分享功能,提高分享的效率和安全性。
在Java编程中,模拟微信浏览器访问Web页面是一个常见的需求,特别是在自动化测试、数据抓取或者模拟用户行为的场景。这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们...