微信登錄的幾種方式 以及在前后端分離如何實現


要處理微信第三方登錄,已經是很正常的需求,讀微信公開的文檔,感覺還是有一些坑,自己寫一個隨筆好記錄一下。

大概兩年前,初次接觸微信第三方登錄的需求是一個網頁應用,大概就是在微信開放平台申請一個開放平台權限,然后創建一個app,在app里面配置一個回調域名,當用戶點擊微信登錄時,把用戶帶到微信那邊的二維碼,然后用戶掃碼,微信那邊通過之后,帶着某些信息,redirect到我們的一個action,然后,我們通過讀取這個action中的token拿到用戶的profile,通過用戶profile可以找到對應的用戶userid,然后授權登錄。這種方式試用與沒有微信公眾號的企業,僅僅把微信當做了方便用戶去登錄的渠道。

這次我們要說的是另外一種登錄方式,就是通過微信公眾號來實現第三方登錄。

前期准備工作,首先需要一個公眾號。以管理者的方式登錄微信號之后,在左下方可以找到關於開發的菜單:

 

 

 

我們在公眾號的首先就會有APPID和APPSecret,我們需要配置服務器,這里配置服務器時特別要注意,也是與第一種登錄方式不一樣的地方,這里設置的不是一個hostname,而是一個具體的request。

 

 文檔里面沒有過多地做說明,但是其實這里配置的URL有兩個意思。

1.微信會對這個地址調用get請求,會傳入幾個參數,然后你得按照他的要求返回,這樣就能通過這個配置。

2.這也是文檔里面沒有說明的一個點,就是,當之后用戶通過二維碼掃描進來時,微信會對這個url發送一個post請求,這個post請求會傳入scene相關信息。scene其實就是讓開發者來傳遞的參數。

post格式文檔里面有:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[subscribe]]></Event>
</xml>

你還需要對這個post請求做相應的響應,給你的直觀感受就是當你掃描二維碼進入微信的提示。一般會是歡迎 XXX 登錄什么系統。

在微信的說明文檔上,沒有說明這個返回值。其實返回值是

<xml>
  <ToUserName>xxxxxxxx</ToUserName>
  <FromUserName>xxxxxxxx</FromUserName>
  <CreateTime>1573190078536</CreateTime>
  <MsgType>text</MsgType>
  <Content>綁定超時或失敗,請再次綁定!</Content>
</xml>

然后再一個,當你是一台電腦做服務器,分布式時,需要在你的nginx里做一個反向代理,大概的意思就是把 /xxx 映射到 xxxx:port/wx

因為設置微信URL時,不能填寫端口,所以只能是80端口或者443端口。

location /wx {

proxy_pass http://localhost:8082/wx/checkSignature;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM