微信通讯协议。自动加人

13 篇文章 4 订阅
12 篇文章 1 订阅

微信网页版的通信协议,很多人都想自己写了个程序,实现微信的登录、初始化、读取联系人列表、发送微信、接收微信等功能,其实大家在网上看一下也有不少人做过这方面的内容。我主要用的工具是HTTPAnalyzer,我认为这个是目前分析http/https协议最好用的工具了,比wireshark和fiddler都清晰明确,推荐大家分析http/https协议内容使用这个工具。其实分析了协议自己再写代码就很容易了。

自己开发程序来收发微信,整个流程基本如下:

1、获取会话UUID

微信Web版本不使用用户名和密码登录,而是采用扫描二维码登录,所以服务器需要首先分配一个唯一的会话ID,用来标识当前的一次登录。

使用get方法,通过请求地址:https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&fun=new&lang=zh_CN&_=时间戳

其中,时间戳这个值是当前距离林威治标准时间的毫秒。

get成功,则返回:window.QRLogin.code = 200; window.QRLogin.uuid = 'XXXXXXX'

其中的XXXXXXX就是我们需要的uuid

2、获取登录二维码

访问网址:https://login.weixin.qq.com/qrcode/XXXXXX

这里的XXXXXXX就是我们刚才获取的uuid,这个网址直接显示的就是二维码

3、查询是否扫描二维码登录

显示了二维码以后,用户必须用手机微信扫描这个二维码才能登录。(有人会说微信为啥要这么设计?很奇怪的思维。我用电脑很多情况不就是因为手机没在旁边吗。其实是因为安全的考虑)

使用get方法,查询地址:https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=XXXXXX&tip=1&_=时间戳

这里的XXXXXX是我们刚才获取的uuid,时间戳同上。tip在第一次获取时应为1,这个数是每次查询要变的。

如果服务器返回:window.code=201,则说明此时用户在手机端已经完成扫描,但还没有点击确认,继续使用上面的地址查询,但tip要变成0;

如果服务器返回:

window.code=200

window.redirect_uri='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

则说明此时用户在手机端已经确认登录,window.redirect_uri=后面的这个网址要记下来,接着要访问这个地址。

如果服务器返回:window.code=408,则说明等待超时,继续使用上面的地址查询,但tip=1

4、访问登录地址,获得uin、sid、pass_ticket、skey

用get方法,访问在上一步骤获得访问地址,并在参数后面加上:&fun=new,会返回一个xml格式的文本,类似这样:

<error>

<ret>0</ret>

<message>OK</message>

<skey>xxx</skey>

<wxsid>xxx</wxsid>

<wxuin>xxx</wxuin>

<pass_ticket>xxx</pass_ticket>

<isgrayscale>1</isgrayscale>

</error>

把这里的wxuin,wxsid,skey,pass_ticket都记下来,这是重要数据。

5、微信初始化

这个是很重要的一步,我在这个步骤折腾了很久。。。

要使用POST方法,访问地址:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=时间戳&lang=ch_ZN&pass_ticket=XXXXXX

其中,时间戳不用解释,pass_ticket是我们在上面获取的一长串字符。

POST的内容是个json串,{'BaseRequest':{'Uin':'XXXXXXXX','Sid':'XXXXXXXX','Skey':XXXXXXXXXXXXX','DeviceID':'e123456789012345'}}

uin、sid、skey分别对应上面步骤4获取的字符串,DeviceID是e后面跟着一个15字节的随机数。

程序里面要注意使用UTF8编码方式。

POST成功,则服务器返回一个很长的JSON串,格式是这样:

{

'BaseResponse': {

'Ret': 0,

'ErrMsg': ''

},

'Count': 8,

'ContactList': [...],

'SyncKey': {

'Count': 4,

'List': [

{

'Key': 1,

'Val': 635705559

},

...

]

},

'User': {

'Uin': xxx,

'UserName': xxx,

'NickName': xxx,

'HeadImgUrl': xxx,

'RemarkName': '',

'PYInitial': '',

'PYQuanPin': '',

'RemarkPYInitial': '',

'RemarkPYQuanPin': '',

'HideInputBarFlag': 0,

'StarFriend': 0,

'Sex': 1,

'Signature': 'Apt-get install B',

'AppAccountFlag': 0,

'VerifyFlag': 0,

'ContactFlag': 0,

'WebWxPluginSwitch': 0,

'HeadImgFlag': 1,

'SnsFlag': 17

},

'ChatSet': xxx,

'SKey': xxx,

'ClientVersion': 369297683,

'SystemTime': 1453124908,

'GrayScale': 1,

'InviteStartCount': 40,

'MPSubscribeMsgCount': 2,

'MPSubscribeMsgList': [...],

'ClickReportInterval': 600000

}

这其中,User里面是自己的信息,UserName是用户名,NickName是昵称。要注意UserName是每次都会变的。。。也就是说,获取不到唯一的不变标识表示身份,无语。。。SyncKey一般是4个,要记下这里的Key和val,后面每次收信息都要用。至于count和contactList先不用管。

6、获取好友列表

使用POST方法,访问:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=时间戳

POST的内容为空。成功则以JSON格式返回所有联系人的信息。格式类似:

{

'BaseResponse': {

'Ret': 0,

'ErrMsg': ''

},

'MemberCount': 21,

'MemberList': [

{

'Uin': 0,

'UserName': xxx,

'NickName': 'Urinx',

'HeadImgUrl': xxx,

'ContactFlag': 3,

'MemberCount': 0,

'MemberList': [],

'RemarkName': '',

'HideInputBarFlag': 0,

'Sex': 0,

'Signature': 'xxxx',

'VerifyFlag': 8,

'OwnerUin': 0,

'PYInitial': 'URINX',

'PYQuanPin': 'Urinx',

'RemarkPYInitial': '',

'RemarkPYQuanPin': '',

'StarFriend': 0,

'AppAccountFlag': 0,

'Statues': 0,

'AttrStatus': 0,

'Province': '',

'City': '',

'Alias': 'Urinxs',

'SnsFlag': 0,

'UniFriend': 0,

'DisplayName': '',

'ChatRoomId': 0,

'KeyWord': 'gh_',

'EncryChatRoomId': ''

},

...

],

'Seq': 0

}

其中,MemberCount表示总共有多少联系人,里面的内容都比较清晰。

7、开启微信状态通知

用POST方法,访问:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxstatusnotify

POST的内容是JSON串,格式:

{

BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx },

Code: 3,

FromUserName: 自己ID,

ToUserName: 自己ID,

ClientMsgId: 时间戳

}

8、心跳包,与服务器同步并获取状态

以上步骤完成以后,就可以进入收发微信的循环了,可以用线程方式发送心跳包。

使用get方法,设置超时为60秒,访问:https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck?sid=XXXXXX&uin=XXXXXX&synckey=XXXXXX&r=时间戳&skey=XXXXXX&deviceid=XXXXXX&_=时间戳

其他几个参数不用解释,这里的synckey需要说一下,前面的步骤获取的json串中有多个key信息,需要把这些信息拼起来,key_val,中间用|分割,类似这样:

1_652651920|2_652651939|3_652651904|1000_0

服务器返回:window.synccheck={retcode:”0”,selector:”0”}

retcode为0表示成功,selector为2和6表示有新信息。4表示公众号新信息。

9、读取新信息

检测到有信息以后,用POST方法,访问:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=XXXXXX&skey=XXXXXX

POST的内容:

{'BaseRequest' : {'DeviceID':'XXXXXX,'Sid':'XXXXXX', 'Skey':'XXXXXX', 'Uin':'XXXXXX'},'SyncKey' : {'Count':4,'List':[{'Key':1,'Val':652653204},{'Key':2,'Val':652653674},{'Key':3,'Val':652653544},{'Key':1000,'Val':0}]},'rr' :时间戳}

注意这里的SyncKey格式,参考前面的说明。

请求成功之后服务器会返回一个JSON串,其中AddMsgCount表示有多少信息,AddMsgList中是一个数组,包含了所有新消息,里面的MsgType表示信息类型,Content就是信息内容。

注意again,返回的信息中,会有新的synckey,要更新这个内容,下次获取信息访问要用这个新的key。

10、发送信息

这个比较简单,用POST方法,访问:https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg

POST的还是json格式,类似这样:

{'Msg':{'Type':1,'Content':'测试信息','FromUserName':'XXXXXX','ToUserName':'XXXXXX','LocalID':'时间戳','ClientMsgId':'时间戳'},'BaseRequest':{'Uin':'XXXXXX','Sid':'XXXXXX','Skey':'XXXXXX','DeviceID':'XXXXXX'}}

这里的Content是信息内容,LocalID和ClientMsgId都用当前时间戳。

以上就是基本的微信收发流程了。参考这个,可以自己去开发其他相关内容

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 微信iPad协议API是指用于iPad设备的微信应用程序接口。微信是一款广泛使用的社交媒体平台,在其手机版本中提供了很多功能。然而,为了满足用户的需求,微信也开发了专门用于iPad设备的应用程序。 通过iPad设备上的微信应用程序,用户可以享受到与手机版本相似的功能和体验。而微信iPad协议API则是为开发人员提供的一组接口,以便他们可以使用这些接口来创建和定制iPad上的微信应用程序。 使用微信iPad协议API,开发人员可以在应用程序中实现很多功能,比如发送和接收消息、查看朋友圈、添加好友、创建群组等。这些接口可以使开发人员有更多的自由度,可以根据自己的需求来设计和定制微信iPad应用程序的功能和界面。 除了基本功能外,微信iPad协议API还提供了一些高级功能,比如支付接口、地理位置共享、语音通话、视频通话等。这些接口可以为用户提供更丰富、更全面的微信体验。 总之,微信iPad协议API是用于在iPad设备上开发微信应用程序的一组接口。通过这些接口,开发人员可以定制和扩展微信的功能,以满足用户在iPad上使用微信的需求。 ### 回答2: 微信iPad协议API是指用于iPad设备上的微信应用程序的接口和协议。通过这些接口和协议,开发人员可以对微信应用程序进行功能扩展和定制。 微信iPad协议API提供了一系列能够与微信应用程序进行交互的功能接口,例如发送消息、接收消息、获取好友列表、管理群组等。开发人员可以使用这些接口来开发各种功能,如自动回复消息、发送群消息、自动添加好友等。 通过微信iPad协议API,开发人员可以实现与微信应用程序的无缝集成。例如,可以在iPad上开发一个应用程序,通过微信iPad协议API接入微信的消息通知功能,使得用户可以在应用程序中直接接收和发送微信消息,而无需切换到微信应用程序。 微信iPad协议API还提供了一些扩展接口,可以用于开发与微信相关的第三方应用。这些接口可以实现与微信的账号绑定、支付功能、获取用户信息等。 总之,微信iPad协议API为开发人员提供了丰富的功能接口和协议,使得他们可以在iPad设备上开发出更加丰富、个性化的微信应用程序。 ### 回答3: 微信iPad协议API是微信为开发者提供的一套接口,用于在iPad上调用和使用微信的功能和服务。通过微信iPad协议API,开发者可以在自己的应用程序中集成微信的功能,例如发送消息、接收消息、查看朋友圈、发起语音通话等。 微信iPad协议API的使用需要开发者先进行注册和申请,获得API的访问权限。开发者需要提供相关的身份和应用信息,以便微信进行认证和审核。一旦申请通过,开发者就可以使用提供的API接口进行开发工作。 微信iPad协议API提供了各种功能模块的接口,包括登录认证、消息发送、通讯录管理、支付接口等等。开发者可以根据自己的需求选择相应的接口进行调用,并根据返回结果进行相应的处理。 使用微信iPad协议API可以帮助开发者将微信的功能融入到自己的应用程序中,提升用户体验和便利性。开发者可以通过API接口实现与微信的数据交互,使得应用程序具有更多的交互性和社交性。 总之,微信iPad协议API是一种开发者可以利用的工具,通过使用API接口,开发者可以将微信的功能集成到自己的应用程序中,提升用户体验和应用程序的功能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值