专栏首页Bingo的深度学习杂货店Java 实现微信自动登录

Java 实现微信自动登录

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

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

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

具体流程如下图:

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

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

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

之后我们可以用接下来的网址产生一个 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 实现的代码就不贴出了。网上有类似的,改一改就可以用。


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Leetcode 【524、767、1053、1079】

    这道题是给一个字符串s和一个单词数组,找到数组里面最长的单词,该单词可以通过删除s的某些字符来得到。如果答案不止一个,返回长度最长且字典序最小的单词。如果答案不...

    echobingo
  • 最长01相等子串

    给一个只由0和1组成的字符串,找一个最长的子串,要求这个子串里面0和1的数目相等。 解题思路: 这样一种巧妙的解法:定义一个数据 B[N], B[i] 表示 A...

    echobingo
  • KMP 算法

    题目描述:Leetcode 28. Implement strStr() 之前在 Leetcode 上 AC 的 O(MN) 版本:Q28 Implement ...

    echobingo
  • Swift3.1动画(一)

    Dwyane
  • 自识别标记(self-identifying marker) -(5) 用于相机标定的CALTag图案设计

    前面介绍了CALTag的工作原理、应用领域。如果我们想在实际项目中应用自识别标记,通常需要根据项目的特点来设计不同尺寸,不同数目,不同排列的图案,那么如何设计属...

    用户1150922
  • Nodejs Serialport文档翻译

    本文链接 想象一个世界,你可以在那写javascript来控制搅拌机,灯,安全系统或者甚至是机器人。是的,我说的是机器人。那个世界就是这儿,现在使用node ...

    治电小白菜
  • 【iOS 开发】从 setNeedsLayout 说起

    本文从 <code>setNeedsLayout</code> 这个方法说起,分享与其相关的 UIKit 视图交互、使用场景等内容。

    KyXu
  • 【iOS 开发】SnapKit 是怎样炼成的

    这是对 Swift 布局框架 SnapKit 的源码的一点分析,尝试搞清,一个好的布局框架,背后都做了些什么。

    KyXu
  • iOS之DBL_EPSILON,FLT_EPSILON,FLT_MIN和FLT_MAX

    Dwyane
  • Mac OSX 给现有的应用追加基于文档的功能

    在Xcode中创建Cocoa Application 工程时,通常有两种选择类型:<code>基于文档的Application</code> 和<code>非文...

    代码行者

扫码关注云+社区

领取腾讯云代金券