挖掘微信Web版通訊的全過程

2022-02-17 12:43:53 字數 1998 閱讀 8863

伺服器會返回如下的字串:

window.qrlogin.code = 200; window.qrlogin.uuid = 「dea6idundy9vkn」;

2.通過會話id獲得***

注意uuid和最後時間這兩個引數)

如果伺服器返回:

window.code=201;

則說明此時使用者在手機端已經完成掃瞄,但還沒有點選確認;

如果伺服器返回:

window.redirect_uri=乙個url位址

則說明此時使用者已經在手機端完成了授權過程,儲存下這個url位址下一步驟中使用。

4.訪問登入位址,獲得uin和sid

通過訪問上一步驟中獲得的url位址,可以在伺服器返回的cookies中獲得到wxuin和wxsid這兩個值,這兩值在後續的通訊過程中都要使用到這兩個值,並且cookies中也需要包括這兩項。

依然是時間)

1

2

}

這個json串中uin和sid分別是上面步驟中獲得的那兩個cookie值,deviceid是乙個本地生成的隨機字串(分析了官方的總是e+一串數字,所以我們也保持這樣的格式)。

6.獲得所有的好友列表

依然是時間)

訪問該鏈結同樣需要post方式,但body為空json:{},伺服器對身份的判定是通過cookies,所以需要保持之前訪問的cookies不被修改(在objective-c中會自動儲存相關的cookies,無需程式特殊處理),在返回的json串中,memberlist中就包含了所有的好友資訊。

7.保持與伺服器的資訊同步

與伺服器保持同步需要在客戶端做輪詢,該輪詢的url如下:

sid=qflp+z+fepzvofog&uin=2545437902&deviceid=e1615250492&synckey=(見以下說明)&_=1377482079876

其中的引數r和_都是time,sid,uin,deviceid與上面步驟的值相對應,此處的synkey是上步步驟獲得的同步鍵值,但需要按一定的規則組合成以下的字串:

1_124125|2_452346345|3_65476547|1000_5643635

window.synccheck=

如果retcode中的值不為0,則說明與伺服器的通訊有問題了,但具體問題我就無法**了,selector中的值表示客戶端需要作出的處理,目前已經知道當為6的時候表示有訊息來了,就需要去訪問另乙個介面獲得新的訊息。

8.獲得別人發來的訊息

123

,

"synckey" : ,,,]},

"rr" :1377482079876};

以下的資訊中baserequest中包括的uin與sid與上面步驟中的值對應,synckey也是上面步驟中獲得的同步鍵值對,rr為時間,訪問成功之後伺服器會返回乙個json串,其中addmsglist中是乙個陣列,包含了所有新訊息。

9.向使用者傳送訊息

上面的sid和r引數不再解釋了,訪問該url採用post方式,在body中的json串形如以下的格式:

123

4567

891011

1213

1415

1617

,

"msg" : ,

"rr" = 1377504864463

}

其中baserequest都是授權相關的值,與上面的步驟中的值對應,msg是對訊息的描述,包括了傳送人與接收人,訊息內容,訊息的型別(1為文字),clientmsgid和localid由本地生成。rr可用當前的時間。

在返回json結果中baseresponse描述了傳送情況,ret為0表示傳送成功。

WordPress版微信小程式3 1 5版的新功能

產品的完善是無止境,每過段時間就會發現產品的新問題,使用的人越多,提的需求也會越多,我聽得最多的一句話就是 如果加上某某功能就完美了。其實,完美是不存在的,每個人的視角不一樣,完美的定義也是不一樣的。做一款開源產品,會面對很多善意的批評和建議,當然也不乏無理的要求,如何在這眾多批評 建議 要求裡去取...

微信小程式的元件通訊

實現方式類似於vue 引入子元件 在子元件上新增自定義屬性 例如 title,content 在子元件上的properties上新增要接收的屬性 title,content 在子元件上通過 就可以直接使用啦。ps 只是接收的時候vue是用props 小程式是properties 裡邊的方法都是一樣的...

模仿iOS版微信的滑動View

最近幾個月終於有大把時間總結這兩年來所學 2019.5.23 我是分割線 1.1 內容展示 1.2 功能介紹 在activity裡面 slideview findviewbyid r.id.slide view1 slideview.setonclicklistener new listener.o...