目錄
前兩天比較閑,研究了一下web版微信。因為之前看過一篇博客講微信web協議的,后來嘗試分析了一下,半途中發現其實沒什么意義,但又不想半途而廢,所以最后做出了一個這樣子的demo。功能比較少,跟官方客戶端功能差不多(其實要差一些:))。大概原理就是使用WebRequest請求數據,demo中代碼寫得比較亂,但是關鍵地方都有注釋。先看一下截圖:
代碼已經上傳到github,有需要的可以看一下:
能做:
- 二維碼登錄;
- 加載最近聯系人;
- 加載所有好友;
- 聊天;
- 查看好友信息。
不能做:
- 不能收發復雜消息(實際上除了字符串之外都不能,表情我沒有解析,你如果發送[擁抱],別人還是能收到正確的表情);
- 不能看朋友圈;
- 懶得寫了,其他功能都不能。
打開 wx.qq.com ,按F12,然后手機掃描二維碼登錄,一切過程都能看到:
過程大概如下:
- 訪問url獲取回話ID;
- 根據會話ID獲取二維碼;
- 顯示二維碼;
- 循環判斷二維碼是否已被掃描(如果已經掃描,是否已點擊“登錄”);
- 如果用戶點擊了手機上的“登錄”,服務器會返回一個特定的url,訪問該url,服務器會返回登錄相關的cookie(保存cookie到本地);
- 初始化微信(初始化的時候,會返回一部分最近聯系人);
- 加載全部好友;
- 根據需要加載好友頭像等等;
- 循環判斷服務器上是否有數據更新(比如收到了別人的消息);
- 如果有更新,則同步數據;
- 返回第9步。
每步需要的具體url我就不詳說了,網上有。我代碼中也有(只是有點爛)。
源碼中用到了一些開源代碼和一些工具:
- Webkit.NET(用於聊天框、自帶的Webbrowser兼容不行);
- json.net(解析服務器返回的json數據)
- chrome(瀏覽器 按F12 大家都懂的)
注:登錄后一段時間,數據同步經常出現1205錯誤,導致接收不到別人發過來的消息,該錯誤暫時還未解決,下次找到原因了再更新。
所有源碼均遵循MIT協議,開源有益,多謝點贊!