微信登陸的幾種方式 以及在先後端分離如何實現

要處理微信第三方登陸,已是很正常的需求,讀微信公開的文檔,感受仍是有一些坑,本身寫一個隨筆好記錄一下。nginx

大概兩年前,初次接觸微信第三方登陸的需求是一個網頁應用,大概就是在微信開放平臺申請一個開放平臺權限,而後建立一個app,在app裏面配置一個回調域名,當用戶點擊微信登陸時,把用戶帶到微信那邊的二維碼,而後用戶掃碼,微信那邊經過以後,帶着某些信息,redirect到咱們的一個action,而後,咱們經過讀取這個action中的token拿到用戶的profile,經過用戶profile能夠找到對應的用戶userid,而後受權登陸。這種方式試用與沒有微信公衆號的企業,僅僅把微信當作了方便用戶去登陸的渠道。服務器

此次咱們要說的是另一種登陸方式,就是經過微信公衆號來實現第三方登陸。微信

前期準備工做,首先須要一個公衆號。以管理者的方式登陸微信號以後,在左下方能夠找到關於開發的菜單:app

 

 

 

咱們在公衆號的首先就會有APPID和APPSecret,咱們須要配置服務器,這裏配置服務器時特別要注意,也是與第一種登陸方式不同的地方,這裏設置的不是一個hostname,而是一個具體的request。分佈式

 

 文檔裏面沒有過多地作說明,可是其實這裏配置的URL有兩個意思。post

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

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

post格式文檔裏面有:3d

<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; }

相關文章
相關標籤/搜索