微信登陆的几种方式 以及在先后端分离如何实现

要处理微信第三方登陆,已是很正常的需求,读微信公开的文档,感受仍是有一些坑,本身写一个随笔好记录一下。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; }

相关文章
相关标签/搜索