Java 实现微信自动登录

需求: 用户通过微信进行登录,如果是第一次登录,则进入绑定界面,需要用户输入用户名和密码保存到数据库;如果不是第一次登录,则直接跳过绑定界面,实现微信自动登录。

思路: 每个微信用户请求某个微信服务号都会产生一个 code 值,通过该 code 值能够解析出用户唯一的 openid 值。将第一次登录的用户的 code 值和 openid 值保存到数据库中,以后如果再次请求该服务号,则先去判断 code 和 openid 是否在数据库中,如果在,就能够实现微信的自动登录。

注意: 微信的 code 值每 5 分钟就会失效,但一个微信用户的 openid 是不变的。如果 code 值不在数据库中,但 openid 在,也说明该用户之前已经登录过,这个时候要更新数据库中的 code,同时自动登录。

具体流程如下图:

那么问题来了:如何获取 code 值?

在测试的时候,如何构造一个 code 参数呢?首先我们可以注册一个微信公众号,然后在左侧【开发中工具】中找到【公众平台测试账号】的选项,能得到 appID 和 appsecret 两个值,这两个值可以帮助我们从 code 中解析出该用户的 openid。往下滑动,我们还需要关注测试号二维码,可以看到我们的 openid 值(下图中打马赛克的那个),该 openid 值就是通过 code 值能够解析出的该用户的 openid 值。

Java 实现微信自动登录_第1张图片

再往下滑,找到 【网页服务】-> 【网页账号】,点击修改,里面填入我们的回调域名(如果是测试工具,填 ip 地址也行), 但是不能加上 http:// 或者 https://(回调域名随便设置一个可以访问到的网址)。

Java 实现微信自动登录_第2张图片

之后我们可以用接下来的网址产生一个 code 参数:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=appID&redirect_uri=URI&response_type=code&scope=snsapi_base&state=123#wechat_redirect

注意点:其中,将 appID 换成你的测试号的 appID,URI 换成你的回调域名,而且一定要加上 http:// 或者 https:// ,这个链接要在微信客户端打开,然后再在浏览器中打开,在浏览器的 URL 地址栏中就可以找到 code 参数值,如下返回的链接:
http://URI/?code=061nPiaw13KHu90vlw7w1WO4aw1nPiax&state=123,其中 URI 是你的回调域名,061nPiaw13KHu90vlw7w1WO4aw1nPiax 就是生成的 code 参数。

在测试的时候,一个 code 只能使用一次,下次还用产生 code 参数的链接生成新 code 参数即可。

后记:如果项目最后要上线的话,记得把该测试号用到的所有参数更新为服务号对应的参数(如appID、appsecret、回调域名等等)。

由于是公司项目,Java 实现的代码就不贴出了。网上有类似的,改一改就可以用。


PS:
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:
https://cloud.tencent.com/developer/support-plan?invite_code=ag7l5g3a44ot

你可能感兴趣的:(Java 实现微信自动登录)