网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。
一个网站在进行微信OAuth2.0授权登录接入之前,应该先到微信开放平台注册开发者帐号,申请并获得相应的AppID和AppSecret,之后可开始接入流程。
写这篇文章的目的不是为了讲解如何搭建一个使用微信授权登录的网站,而是为了讲解如何在一台没有界面的linux系统上模拟微信扫码登录。
以登录简书为例
-
点击网站微信登陆图标,打开一个二维码页面,url如下所示
https://open.weixin.qq.com/connect/qrconnect?appid=wxe9199d568fe57fdd&client_id=wxe9199d568fe57fdd&redirect_uri=http%3A%2F%2Fwww.jianshu.com%2Fusers%2Fauth%2Fwechat%2Fcallback&response_type=code&scope=snsapi_login&state=%257B%257D#wechat_redirect
这个url包含主要的三个参数appid、client_id、redirect_uri,在此我们不需要太多关注,每个网站这些参数都是固定的。
程序需要模拟浏览器请求这个url
-
解析二维码url、获取授权码的url
在第1步骤的response中找到以下两个内容:<div class="wrp_code"><img class="qrcode lightBorder" src="/connect/qrcode/001F82OszFAzElbp"></div>
<script> // @cunjin 下面的变量是给开发者工具用的,inline到html里面,一定不能删掉 var fordevtool = "https://long.open.weixin.qq.com/connect/l/qrconnect?uuid=081KWIzIzrcRYwFs" console.log('devtool use', fordevtool) </script>
下载二维码,并在规定的时间内使用微信扫描,这一步需要人工完成。
-
扫描完成之后,访问第2步骤
fordevtool
标识的地址,获取授权码。获取到的结果是一个json, 大致形如
{errcode:405, wx_code:yyyyyyy}
,当errcode为405时表示成功,此时wx_code有效,这就是我们要的授权码。 -
带着获取到的授权码登录网站,获取cookie,并保存在文件中。
简书登录地址大致为
http://www.jianshu.com/users/auth/wechat/callback?code=xxxxxxx&state=7B7D"
获取到授权码,访问这个把授权码填入到这个地址中,state在第1步骤的url的state保持一致。
访问成功后,获取到cookie,登录完成。