模拟微信授权登录

二、模拟微信授权登录

我们在很多场合都用过微信的授权登录,只要微信授权后,登录网站的时候就不用输入用户名、密码。虽然这只是件很小的事,但给用户带来的体验是非常好的。

非常遗憾的是,我们个人能申请的订阅号是没有授权登录的权限的,甚至也没法用程序来自定义菜单。因为这些功能必须得在你的微信公众号通过认证的前提下才能进行。但腾讯规定订阅号是不能进行认证的,只有服务号和企业号才能通过认证。而个人又只能申请订阅号,这给我们初学者体验微信登录自己的网站带来了麻烦。

微信公众平台菜单“</>开发-开发者工具”中,有一个公众平台测试号,如果你要体验测试微信公众平台所有的高级接口,可以用这个测试号来体验。

我们还是在订阅号上想办法。在关注公众号的欢迎信息里加一个注册、登录的链接,结果如图9-11所示。

图示

图示

图9-11 关注界面

图示

图9-12 注册界面(https://www.daowen.com)

在IndexAction.class.php中我们发现,那个$toUser的变量就是关注微信公众号的这个用户的编号,微信把它称为OpenID。每一个微信用户就有一个OpenID。把这个OpenID传值给下一个登录程序,我们希望利用这个OpenID来实现免登录。

点击“注册登录”,如果你从未注册过,则进入如图9-12所示的界面,填写注册信息,请注意里面没有OpenID,那是因为OpenID不需要人手工填写,直接传值过来的就是OpenID。我们需要在MySQL数据库中建一个微信用户表(weixinlogin),如图9-13所示。

图示

图示

图9-13 微信用户表

下面我们来看一下这个登录程序(loginwx.php)的局部。

图示

从程序中可以看出,如果关注公众号的人的微信OpenID在这个表中($Count>0),就可以不输入用户名、密码,直接跳转到自己的主界面(app.php)。否则,跳转到regist.php让用户进行注册。

这套程序中除了登录程序(loginwx.php)外,还有conn.php数据库的链接程序、regist.php是注册程序、registsave.php是一个注册存盘程序、app.php是一个登录后的范例应用程序,这五个程序都放在wx文件夹下。最重要的IndexAction.class.php还是放在老地方。细心的读者可能会发现,我们采用明传值的GET方法,loginwx.php传了一个OpenID,由此来实现登录很不安全。我们将在下面解决这个问题。