国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

簡述網頁版微信掃碼登錄的過程

Jonathan Shieber / 1596人閱讀

摘要:查詢是否掃描二維碼登錄顯示了二維碼以后,用戶必須用手機微信掃描這個二維碼才能登錄。

我的小站

網頁版微信掃碼登錄流程 1. 請求頁面

先打開https://wx.qq.com/顯示出頁面,這時候會加載一堆的html,js等資源。

2. 獲取會話UUID

微信Web版本不使用用戶名和密碼登錄,而是采用掃描二維碼登錄,所以服務器需要首先分配一個唯一的會話ID,用來標識當前的一次登錄。

使用get方法,通過請求地址:https://login.weixin.qq.com/j...

其中,時間戳這個值是當前距離林威治標準時間的毫秒。

get成功,則返回:window.QRLogin.code = 200; window.QRLogin.uuid = "AAAAAAAA"
其中的AAAAAAAA就是我們需要的uuid

3. 獲取登錄二維碼

訪問網址:https://login.weixin.qq.com/q...
這里的XXXXXXX就是我們剛才獲取的uuid,這個網址直接顯示的就是二維碼,該二維碼是有有效期的,有效期時長由微信服務端決定。

4. 查詢是否掃描二維碼登錄

顯示了二維碼以后,用戶必須用手機微信掃描這個二維碼才能登錄。(微信為啥要這么設計?很奇怪的思維。。。我用電腦很多情況不就是因為手機沒在旁邊嗎。。。)

使用get方法,查詢地址:https://login.weixin.qq.com/c...

這里的AAAAAAAA是我們剛才獲取的uuid,時間戳同上。tip在第一次獲取時應為1,其他次時為0.

如果服務器返回:

window.code=201,
window.userAvatar = base64:img/bbb

則說明此時用戶在手機端已經完成掃描,并在網頁端顯示掃描人的頭像。但還沒有點擊登錄,繼續使用上面的地址查詢。

點擊登錄后,如果服務器返回:

window.code=200;
window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AZBAkjuOKc-2GAHcRBsKNuOt@qrticket_0&uuid=YbHBoVi8_w==&lang=zh_CN&scan=1504160545";

則說明此時用戶在手機端已經確認登錄,window.redirect_uri=后面的這個網址(暫稱為BB)要記下來,接著要訪問這個地址。

如果服務器返回:window.code=408,則說明等待超時,繼續使用上面的地址查詢。

5. 訪問登錄地址BB,獲得uin、sid、pass_ticket、skey

用get方法,訪問在上一步驟獲得訪問地址BB,并在參數后面加上:&fun=new,會返回一個xml格式的文本,類似這樣:

    
    0
    
    @crypt_d6549c5a_37242e82c0913b75e5d3ad5ef2c7bdba
    n/5yTn844+kHkU66
    2799942121
    JOkd35AoEoi8MVx34qKT6xJVeaS8tT7mo8BFdGlKRfDGRCWKkKLW9DsrA%2BEJ34WM
    1
    

skey是獲取聯系人信息的關鍵信息(比如獲取好友(包括訂閱的公眾號)頭像信息),標識當前人的身份。還是檢查web端微信心跳的標識。發消息時也會使用。

pass_ticket是在授權成功后進行初始化和收發消息使用的。

wxsid在收發消息會子啊url后或請求體中使用。

wxuin在發消息時使用

把這里的wxuin,wxsid,skey,pass_ticket都記下來,這是重要數據。

該結果中包含的信息就是用來在接下來的請求中校驗用戶用的。

到這里已經表明當前用戶已經掃碼登錄成功了,而且可以看到只是通過ticket方式確認web端登錄成功,而不經過用戶名密碼方式的登錄,其實個人感覺就是移動端微信掃碼給web端發送了一個授權而已。

6. 微信初始化

這個是很重要的一步,我在這個步驟折騰了很久。。。

要使用POST方法,訪問地址:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-918790895&pass_ticket=JOkd35AoEoi8MVx34qKT6xJVeaS8tT7mo8BFdGlKRfDGRCWKkKLW9DsrA%252BEJ34WM

其中,時間戳不用解釋,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":11,
    "ContactList":[
        {//公眾號或文件助手信息
            "Uin":0,
            "UserName":"filehelper",
            "NickName":"?–?????? è?“????‰?",
            "HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=660589401&username=filehelper&skey=@crypt_d6549c5a_37242e82c0913b75e5d3ad5ef2c7bdba",
            "ContactFlag":1,
            "MemberCount":0,
            "MemberList":[],
            "RemarkName":"",
            "HideInputBarFlag":0,
            "Sex":0,
            "Signature":"",
            "VerifyFlag":0,
            "OwnerUin":0,
            "PYInitial":"WJCSZS",
            "PYQuanPin":"wenjianchuanshuzhushou",
            "RemarkPYInitial":"",
            "RemarkPYQuanPin":"",
            "StarFriend":0,
            "AppAccountFlag":0,
            "Statues":0,
            "AttrStatus":0,
            "Province":"",
            "City":"",
            "Alias":"",
            "SnsFlag":0,
            "UniFriend":0,
            "DisplayName":"",
            "ChatRoomId":0,
            "KeyWord":"fil",
            "EncryChatRoomId":"",
            "IsOwner":0
        },
        {
            "Uin":0,
            "UserName":"@@ed82e31e61783c765723eb8574831ae0be272bbb6b02f7280e442b0d274e8cb9",
            "NickName":"èˉ—é…’è???1′???",
            "HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgetheadimg?seq=660624044&username=@@ed82e31e61783c765723eb8574831ae0be272bbb6b02f7280e442b0d274e8cb9&skey=@crypt_d6549c5a_37242e82c0913b75e5d3ad5ef2c7bdba",
            "ContactFlag":2051,
            "MemberCount":13,
            "MemberList":[//用戶信息
                {
                    "Uin":0,
                    "UserName":"@4dae6aa0756bd9899b68d0b2e60f109d",
                    "NickName":"",
                    "AttrStatus":0,
                    "PYInitial":"",
                    "PYQuanPin":"",
                    "RemarkPYInitial":"",
                    "RemarkPYQuanPin":"",
                    "MemberStatus":0,
                    "DisplayName":"",
                    "KeyWord":"cha"
                }
            ],
            "RemarkName":"",
            "HideInputBarFlag":0,
            "Sex":0,
            "Signature":"",
            "VerifyFlag":0,
            "OwnerUin":0,
            "PYInitial":"",
            "PYQuanPin":"",
            "RemarkPYInitial":"",
            "RemarkPYQuanPin":"",
            "StarFriend":0,
            "AppAccountFlag":0,
            "Statues":1,
            "AttrStatus":0,
            "Province":"",
            "City":"",
            "Alias":"",
            "SnsFlag":0,
            "UniFriend":0,
            "DisplayName":"",
            "ChatRoomId":0,
            "KeyWord":"",
            "EncryChatRoomId":"",
            "IsOwner":0
        }
    ],
    "SyncKey":{
        "Count":4,
        "List":[
            {
                "Key":1,
                "Val":660633313
            },
            {
                "Key":2,
                "Val":660633314
            },
            {
                "Key":3,
                "Val":660633176
            },
            {
                "Key":1000,
                "Val":1504141382
            }
        ]
    },
    "User":{//當前用戶信息
        "Uin":2799942121,
        "UserName":"@cee283ef70f5473680a467d23da14918888aa5771f1b08c7410b2ca3d685dd6a",
        "NickName":"followtry",
        "HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=842975299&username=@cee283ef70f5473680a467d23da14918888aa5771f1b08c7410b2ca3d685dd6a&skey=@crypt_d6549c5a_37242e82c0913b75e5d3ad5ef2c7bdba",
        "RemarkName":"",
        "PYInitial":"",
        "PYQuanPin":"",
        "RemarkPYInitial":"",
        "RemarkPYQuanPin":"",
        "HideInputBarFlag":0,
        "StarFriend":0,
        "Sex":1,
        "Signature":"",
        "AppAccountFlag":0,
        "VerifyFlag":0,
        "ContactFlag":0,
        "WebWxPluginSwitch":0,
        "HeadImgFlag":1,
        "SnsFlag":17
    },
    "ChatSet":"filehelper,weixin,@@ed82e31e61783c765723eb8574831ae0be272bbb6b02f7280e442b0d274e8cb9,",
    "SKey":"@crypt_d6549c5a_37242e82c0913b75e5d3ad5ef2c7bdba",//我的skey,也就是個人標識
    "ClientVersion":637865269,
    "SystemTime":1504157627,
    "GrayScale":1,
    "InviteStartCount":40,
    "MPSubscribeMsgCount":22,
    "MPSubscribeMsgList":[//訂閱信息列表
        {
            "UserName":"@d532ab26f3404fdc3a95bc7a7d3ae368",
            "MPArticleCount":4,//拉取四篇文章
            "MPArticleList":[//文章列表信息
                {
                    "Title":"Ubuntu Linux",
                    "Cover":"http://mmbiz.qpic.cn/mmbiz_jpg/W9DqKgFsc6icYW9UsESlGZ2r3SEOjIwqeToauxczCXYPLW63YtYmCcK2mxTaRjH7XibemZZOcVXknLFsPnhSLyeg/640?wxtype=jpeg&wxfrom=0",
                    "Url":"http://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=2664609333&idx=1&sn=9eec4c182757edc5d2e98b2dfa5752b1&chksm=bdce8d738ab904653e64f18e23a8ffe8634fc1547edc05e2dad547de69894d5df572cc4f2b12&scene=0#rd"
                }
            ],
            "Time":1504153992,
            "NickName":"Linux??-???"
        }
    ],
    "ClickReportInterval":600000
}

拿到該結果后,瀏覽器會渲染最近聯系人,各個訂閱的公眾號的最近幾篇文章。

7. 獲取好友列表

使用POST方法,訪問:https://wx2.qq.com/cgi-bin/mm...

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表示總共有多少聯系人,里面的內容都比較清晰。
8. 開啟微信狀態通知

用POST方法,訪問:https://wx.qq.com/cgi-bin/mmw...

POST的內容是JSON串,格式:

{

 BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, 
 Code: 3, 
 FromUserName: 自己ID, 
 ToUserName: 自己ID, 
 ClientMsgId: 時間戳 

}

9. 心跳包,與服務器同步并獲取狀態

以上步驟完成以后,就可以進入收發微信的循環了,可以用線程方式發送心跳包。

使用get方法,設置超時為60秒,訪問:https://webpush.wx2.qq.com/cg...

其他幾個參數不用解釋,這里的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表示公眾號新信息。

10. 接收新信息

檢測到有新的消息以后,用POST方法,訪問:https://wx2.qq.com/cgi-bin/mm...

POST的內容:

{
   "BaseResponse":{
       "Ret":0,
       "ErrMsg":""
   },
   "AddMsgCount":0,
   "AddMsgList":[

   ],
   "ModContactCount":0,
   "ModContactList":[

   ],
   "DelContactCount":0,
   "DelContactList":[

   ],
   "ModChatRoomMemberCount":0,
   "ModChatRoomMemberList":[

   ],
   "Profile":{
       "BitFlag":0,
       "UserName":{
           "Buff":""
       },
       "NickName":{
           "Buff":""
       },
       "BindUin":0,
       "BindEmail":{
           "Buff":""
       },
       "BindMobile":{
           "Buff":""
       },
       "Status":0,
       "Sex":0,
       "PersonalCard":0,
       "Alias":"",
       "HeadImgUpdateFlag":0,
       "HeadImgUrl":"",
       "Signature":""
   },
   "ContinueFlag":0,
   "SyncKey":{
       "Count":7,
       "List":[
           {
               "Key":1,
               "Val":660633324
           }
       ]
   },
   "SKey":"",
   "SyncCheckKey":{
       "Count":7,
       "List":[
           {
               "Key":1,
               "Val":660633324
           }
       ]
   }
}

注意這里的SyncKey格式,參考前面的說明。

請求成功之后服務器會返回一個JSON串,其中AddMsgCount表示有多少信息,AddMsgList中是一個數組,包含了所有新消息,里面的MsgType表示信息類型,Content就是信息內容。
注意again,返回的信息中,會有新的synckey,要更新這個內容,下次獲取信息訪問要用這個新的key。

11. 發送信息

這個比較簡單,用POST方法,訪問:https://wx2.qq.com/cgi-bin/mm...

POST的還是json格式,類似這樣:

{
   "Msg":{
       "Type":1,
       "Content":"測試信息",
       "FromUserName":"XXXXXX",
       "ToUserName":"XXXXXX",
       "LocalID":"時間戳",
       "ClientMsgId":"時間戳"
   },
   "BaseRequest":{
       "Uin":"XXXXXX",
       "Sid":"XXXXXX",
       "Skey":"XXXXXX",
       "DeviceID":"XXXXXX"
   }
}

這里的Content是信息內容,LocalID和ClientMsgId都用當前時間戳。

以上就是基本的web端微信授權登錄以及收發消息的過程了,個人見解,有理解有偏差的地方還期待您的批評指正。

參考文章
微信網頁web版通信協議分析 實現微信登錄發送接收消息

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89768.html

相關文章

  • 如何開發一個個性化Web微信(1)

    摘要:版微信登錄地址如有不足與錯誤,請見諒版微信主要參考微信協議進行設計開發項目主要分成三大模塊登錄模塊微信掃碼登錄流程微信容器微信信息會話接收發送心跳監測數據存儲用戶登錄信息狀態信息會話信息先祭圖拜八哥已求無效果圖我們希望實現的功能包括基本的 Web版微信登錄 github地址:https://github.com/hty7/vue-w...如有不足與錯誤,請見諒 Web版微信主要參考W...

    dockerclub 評論0 收藏0
  • 基于 Workman 實現Web掃描登錄

    摘要:實現流程圖運行流程用戶訪問微信網頁版,微信服務器為這個會話生成一個全局唯一的,上面的中就是這個,此時系統并不知道訪問者是誰。用戶打開自己的手機微信并掃描這個二維碼,并提示用戶是否確認登錄。 Web 掃碼登錄實現 基于 Workerman 做了一個掃碼登錄示例,給有需要的朋友參考一下。發現問題,歡迎指正。 實現流程圖 showImg(https://segmentfault.com/im...

    yexiaobai 評論0 收藏0
  • js微信聊天機器人——wechat-robot

    摘要:基于和端微信開發的聊天機器人。使用的微信賬號即充當機器人的賬號為個人賬號,可自定義指令。關閉玫瑰感謝您的使用玫瑰閃電需要開啟請在控制臺啟動程序閃電微信發出關閉口令,程序退出。 Github: https://github.com/doterlin/wechat-robot showImg(https://segmentfault.com/img/remote/1460000010601...

    Darkgel 評論0 收藏0
  • 說說微掃碼登錄

    摘要:詳情接口我們這里主要講的是網站應用,網站應用微信登錄是基于協議標準構建的微信授權登錄系統即上面的協議。在微信客戶端授權登錄獲取用戶信息的可以查看。微信授權登錄目前支持模式,適用于擁有端的應用授權。 一、OAuth2.0 OAuth(開放授權)是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。 ...

    Jokcy 評論0 收藏0
  • 掃碼登錄

    摘要:二維碼的樣式外部文件,需要過程詳解當使用微信掃碼,微信校驗成功后,會訪問,并在的參數上添加和設置的。將拿到的用戶信息有用戶的唯一的,調用后臺的微信登錄接口,成功到進入登錄頁面之前的便可以了。 官方文檔:網站應用微信登錄開發指南 流程圖 showImg(https://segmentfault.com/img/bVbeLKq?w=1298&h=570); 使用步驟 在使用的頁面中引入:...

    elva 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<