微信网页版登陆原理

微信网页版登陆原理

  1. 请求微信服务器返回一个会话ID

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

    https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1377482012272(其中1377482012272这个值是当前距离林威治标准时间的毫秒)

服务器会返回如下的字符串:

window.QRLogin.code = 200; window.QRLogin.uuid = "AdrEiQJo7Q==";

而这个AdrEiQJo7Q==字符串就是微信服务器返回给我们的ID。
  1. 通过会话ID获得二维码

    利用刚才获得的ID去请求服务器生成的二维码,通过上面的ID我们组合得到以下的URL地址:
    https://login.weixin.qq.com/qrcode/AdrEiQJo7Q==
    该请求返回的便是我们需要的二维码,此时需要用户在微信的手机版本中扫描这个二维码即可登陆(长按识别二维码都不行,必须是扫描)

  2. 轮询手机端是否已经扫描二维码并确认在Web端登录
    当获得二维码之后,就需要用户去手机端去扫描二维码,并获得用户的授权,此时我们并不知道用户何时完成这个操作,所以我们只有轮询,而轮询的地址就是:
    https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=DeA6idundY9VKn&tip=1&_=1377482045264(注意UUID和最后时间这两个参数)

  • 如果服务器返回:
    window.code=201; window.userAvatar = ''
    则说明此时用户在手机端已经完成扫描,但还没有点击确认;
  • 如果服务器返回:
    window.code=408;
    则说明此时用户在手机端�还未扫描;
  • 如果服务器返回:
    window.code=201;window.redirect_uri=一个URL地址
    则说明此时用户已经在手机端完成了授权过程,保存下这个URL地址下一步 骤中使用.
  1. 访问登录地址,获得uin和sid
    通过访问上一步骤中获得的URL地址,
    https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AVGnnO4cQDp0D-oRRdFpPdKk@qrticket_0&uuid=Qa5hIYJlPg==&lang=zh_CN&scan=1487128220
    可以在服务器返回的Cookies中获得到wxuin和wxsid这两个值,

<?xml version="1.0" encoding="utf-8"?>
<error>
<ret>0</ret>
<message/>
<skey>@crypt_6c791e4d_d2cc04dcc3df812824b41abd98616a44</skey>
<wxsid>BqaMHRqFxeQvdOWD</wxsid>
<wxuin>31213e21</wxuin>
<pass_ticket>fVJ6%2FwoyREZ%2BDIeadCjR%2Fz%2BvAh4keU3A3AvI29NzSaXOdBcxxekwJ51O9S05Q6MG</pass_ticket>
<isgrayscale>1</isgrayscale>
</error>

这两值在后续的通信过程中都要使用到这两个值,并且Cookies中也需要包括这两项。

  1. 初使化微信信息

前面的步骤算是完成了这个复杂的登录过程,如果我们需要使用微信就需要获得当前用户的信息、好友列表等,还有一个关键的就是同步信息(后续与服务器轮询中需要使用同步信息),通过访问以下的链接:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=1377482058764(r依然是时间)
访问该链接需要使用POST,并且在Body中带上以下的JSON信息:

{"BaseRequest":
{"Uin":"2545437902","Sid":"QfLp+Z+FePzvOFoG","Skey":"","DeviceID":"e1615250492"}}

这个JSON串中Uin和Sid分别是上面步骤中获得的那两个Cookie值,DeviceID是一个本地生成的随机字符串(分析了官方的总是e+一串数字,所以我们也保持这样的格式)。
服务器就会返回一个很长的JSON串,这其中包括:BaseResponse中的值用来表示请求状态码,ContactList主要用来表示联系人(此列表不全,只包括了类似通讯录助手、文件助手、微信团队和一些公众帐号等,后面会通过另一接口去获得更全面的信息),SyncKey是用户与服务器同步的信息,User就是当前登录用户自己的信息。

6.获得所有的好友列表

在上一步骤中已经获得了部分好友和公众帐号,如果需要获得完整的好友信息,就需要访问以下的链接:

https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1377482079876(r依然是时间)

访问该链接同样需要POST方式,但Body为空JSON:{},服务器对身份的判定是通过Cookies,所以需要保持之前访问的Cookies不被修改(在Objective-C中会自动保存相关的Cookies,无需程序特殊处理),在返回的JSON串中,MemberList中就包含了所有的好友信息。

7.保持与服务器的信息同步

与服务器保持同步需要在客户端做轮询,该轮询的URL如下:

https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?callback=jQuery18309326978388708085_1377482079946&r=1377482079876& sid=QfLp+Z+FePzvOFoG&uin=2545437902&deviceid=e1615250492&synckey=(见以下说明)&_=1377482079876

其中的参数r和_都是time,sid,uin,deviceid与上面步骤的值相对应,此处的synkey是上步步骤获得的同步键值,但需要按一定的规则组合成以下的字符串:

1_124125|2_452346345|3_65476547|1000_5643635

就是将键和值用_隔开,不同的键值对用|隔开,但记得|需要URL编码成%7C,通过访问上面的地址,会返回如下的字符串:

window.synccheck={retcode:”0”,selector:”0”}

如果retcode中的值不为0,则说明与服务器的通信有问题了,但具体问题我就无法预测了,selector中的值表示客户端需要作出的处理,目前已经知道当为6的时候表示有消息来了,就需要去访问另一个接口获得新的消息。

8.获得别人发来的消息

当一个步骤中知道有新消息时,就需要去获取消息内容,通过访问以下的链接:

https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=QfLp+Z+FePzvOFoG&r=1377482079876

上面链接中的参数sid对应上面步骤中的值,r为时间,访问链接需要使用POST方式,Body中包括JSON串,该JSON串格式如下:

{"BaseRequest" : {"Uin":2545437902,"Sid":"QfLp+Z+FePzvOFoG"},
"SyncKey" : {"Count":4,"List":[{"Key":1,"Val":620310295},{"Key":2,"Val":620310303},{"Key":3,"Val":620310285},{"Key":1000,"Val":1377479086}]},
"rr" :1377482079876};

以下的信息中BaseRequest中包括的Uin与Sid与上面步骤中的值对应,SyncKey也是上面步骤中获得的同步键值对,rr为时间,访问成功之后服务器会返回一个JSON串,其中AddMsgList中是一个数组,包含了所有新消息。

9.向用户发送消息

用户主动发送消息,通过以下的URL地址:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?sid=QfLp+Z+FePzvOFoG&r=1377482079876
上面的sid和r参数不再解释了,访问该URL采用POST方式,在Body中的JSON串形如以下的格式:

{
"BaseRequest":{
"DeviceID" : "e441551176",
"Sid" : "S8wNi91Zry3024eg",
"Skey" : "F820928BBA5D8ECA23448F076D2E8A915E1349E9FB4F4332",
"Uin" : "2545437902"
},
"Msg" : {
"ClientMsgId" : 1377504862158,
"Content" : "hello",
"FromUserName" : "wxid_2rrz8g8ezuox22",
"LocalID" : 1377504862158,
"ToUserName" : "wxid_j4nu420ojhsr21",
"Type" : 1
},
"rr" = 1377504864463
}

其中BaseRequest都是授权相关的值,与上面的步骤中的值对应,Msg是对消息的描述,包括了发送人与接收人,消息内容,消息的类型(1为文本),ClientMsgId和LocalID由本地生成。rr可用当前的时间。
在返回JSON结果中BaseResponse描述了发送情况,Ret为0表示发送成功。


推荐一个平时工作中非常好用的、简约的ToDoList 待办事项

将工作归还给工作,将生活归还给生活!

ZTodoList ZToDoList今日待办

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55472.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web网页登录

web登录验证 1.创建loginDemo项目 2.添加tomcat 3.在web目录下创建jsp文件login fail success UserData 4.修改web.xml设置首页 5.演示 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器…

百度登录界面

1 <!doctype html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>百度一下</title>6 <meta name"Keywords" content"关键字">7 <meta name"Descript…

pc端网页实现微信扫码登录

微信开发文档&#xff1a;https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 点击按钮&#xff0c;跳转到微信授权页面&#xff0c;会出现一个二维码。 //拉取授权页面 let APPID 网页应用的appid let REDIRECT_URI encodeUR…

电脑wifi只能微信聊天但是不能打开百度上网

问题描述&#xff1a;WiFi手机可以连接&#xff0c;电脑上也能连接&#xff0c;可以微信聊天&#xff0c;但是不能浏览器上网&#xff0c;显示域名解析错误。 背景:小编过了年回来上班后&#xff0c;发现公寓里的无线网在电脑上无法访问互联网&#xff0c;就非常的纳闷。首先我…

高级程序员和新手小白程序员区别你是那个等级看解决bug速度

IT入门深似海 ,程序员行业&#xff0c;我觉得是最难做的。加不完的班&#xff0c;熬不完的夜。 和产品经理&#xff0c;扯不清,理还乱的宿命关系 一直都在 新需求-做项目-解决问题-解决bug-新需求 好像一直都是这么一个循环。&#xff08;哈哈哈&#xff09;我觉得一个好的程序…

微软Office Plus吊打WPS Office?不一定,WPS未来被它“拿捏”了

微软Office Plus吊打WPS Office&#xff1f; 微软的Office是一款非常强大的软件。不仅仅在办公领域中能给我们带来便利&#xff0c;在娱乐和生活的各个方面的管理也能带来很多便利。 当然&#xff0c;作为国产办公软件的排头兵WPS与微软Office的抗衡已经有长达30多年&#xf…

百度的文心一言 ChatGTP 的对比

同样的5个问题&#xff0c;让百度的“文心一言”与ChatGPT来回答&#xff0c;两者区别在于&#xff0c;前者是就坡下驴的“傻瓜”式回复&#xff0c;后者是细思极恐的AI脱口秀。抛开高下立判不谈&#xff0c;尽管百度十年磨一剑专攻人工智能&#xff0c;但和国外的AI产业相比&a…

毕业写论文不要傻傻的到中国知网CNKI充值了,分享几个常用的写论文必备的网站!

我把这 7 个工具&#xff0c;发给了毕业两年的学姐&#xff01;看完学姐都懵了&#xff0c;说&#xff1a;早知道有这么好的资源&#xff0c;当年在学校写毕业论文也不会那么痛苦了&#xff01; 1、搜论网 找学术论文&#xff0c;就上搜论网 www.soolun.com为老师、学生、媒…

【快速写好毕业论文】你不得不知晓的七个常用文献搜索平台

本篇推文共计2000个字&#xff0c;阅读时间约3分钟。 01 引言 又是一年的毕业季&#xff0c;毕业论文成为了大多数同学们难以逾越的屏障。 毕业论文存在以下特点&#xff1a; 章节多、页码多、图表多、文献多、编号多。 那么如何快速写好毕业论文&#xff0c;安稳度过学生阶段最…

大数据时代,我竟然在用Excel和SPSS做数据分析,真香!

目录 写在前面概述什么是统计?统计.计算机与统计软件(重点)变量及其分类数据收集 第二章问卷的组成和结构几种典型的问卷题型: 第三章:数据的录入和清理数据的录入数据的清理3.4在Excel中核对数据建立调查问卷的SPSS数据文件 第4章单变量的一维频率分析利用SPSS对单选题进行一…

教你接入Midjourney,不用梯子也能玩

1、效果 话不多说&#xff0c;先上最终出图效果&#xff0c; 我给的关键词是一只白色的猫 2、接入流程 API文档可以来这里查&#xff08;可以白嫖100次midjourney出图和10次gpt4体验&#xff09;&#xff0c;我这里精简一下接入流程&#xff0c;方便大家快速接入 2.1、文字生…

超级编程AI登上Science封面!AlphaCode编程大赛卷趴一半程序员

【导读】在编程比赛中达到人类水平的AlphaCode&#xff0c;再登Science封面。 这个12月&#xff0c;正当OpenAI的ChatGPT势头正旺时&#xff0c;那个曾经卷趴一半程序员的AlphaCode登上Science封面了&#xff01; 论文链接&#xff1a;https://www.science.org/doi/10.1126/sc…

斯坦福2023【FrugalGPT】减少大模型的商业化应用成本

文章目录 主要解决问题采用什么方法Prompt adaptationLLM approximationLLM cascade 实验结论讨论与展望 FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance 主要解决问题 这篇文章主要是要解决如何降低调用大语言模型的成本(Chat…

智见|黄铁军:未来的大模型生态中将会只有少数赢家

2023智源大会可谓群星璀璨。中外200余位人工智能顶级专家参会&#xff0c;人工智能领域最关键的人物、机构悉数亮相。 全面、专业、前沿&#xff0c;会场上大咖们观点激荡、多元碰撞&#xff0c;会场下观众们兴奋异常、座无虚席。 会上&#xff0c;北京智源人工智能研究院院长黄…

开放丨Kaldi语音识别理论与实践

语音识别是一门涉及数字信号处理、人工智能、语言学、数理统计学、声学、情感学及心理学等多学科交叉的科学。这项技术可以提供比如自动客服、自动语音翻译、命令控制、语音验证码等多项应用。近年来&#xff0c;随着人工智能的兴起&#xff0c;语音识别技术在理论和应用方面都…

【语音之家】AI产业沙龙—VoxSRC-22说话人识别挑战赛快商通方案介绍

由CCF语音对话与听觉专委会 、中国人工智能产业发展联盟&#xff08;AIIA&#xff09;评估组、快商通、语音之家、北京希尔贝壳科技有限公司共同主办的【语音之家】AI产业沙龙—VoxSRC-22说话人识别挑战赛快商通方案介绍&#xff0c;将于2022年10月9日18:30-19:30线上直播。 沙…

说话人识别(speaker Recognition/Verification)简介

1.分类 2.研究方向 说话人识别研究方向主要有三个&#xff1a; 语音信号参数化&#xff1a;即提取音频特征spectral features&#xff0c;目前主流研究都采用MFCCs系数&#xff0c;以及其Δ和ΔΔ系数(即时间上的一阶导数和二阶导数)。什么是MFCC系数以及如何提取可以看这个…

听障人士亲述:我们在VRChat用手语交流,成员规模5000人

如果你在B站上搜索VRChat&#xff0c;排在前面的热门视频几乎都是与老外聊天的内容。除了练习语言、交文化流外&#xff0c;你还能在VRChat上遇到不少哇哇乱叫的小孩。作为一款VR社交应用&#xff0c;除了有趣的小游戏外&#xff0c;说话聊天也是VRChat关键的玩法之一。 而有这…

AI应用系列--- Talking Photo 会说话的照片

利用HeyGen的服务可以生成有趣的Talking photo&#xff0c;方法有二&#xff1a; 1、访问HeyGen - AI Video Generator 网站&#xff0c;登录后即可根据提示或者案例生成talkingphoto 2、是使用HeyGen的Discord​​​​​​机器人 Discord​​​​​​机器人&#xff1a;http…

php 判断国际手机号码格式,国际短信验证码接口_国际验证码接口_国际短信API接口_国际短信API文档_...

国际短信 国际验证码API接口文档下载&#xff1a; 点击下载 1、概要 1.1 文档说明 本文档主要提供给达信通的用户对接接口的使用说明&#xff0c;开发者可以利用达信通提供的 HTTP 接口&#xff0c;调用达信通的国际验证码服务。 1.2 接口内容 本文档包含国际短信发送、余额查…