今天我们来对接微信开放平台的网站应用登录

首先上文档链接:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html


1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
 
文档上说的也很明白
 
首先我们需要注册一个开放平台的账号
但是吧很不爽的是需要企业认证花300RMB进行资质认证。

ok,我们先来创建一个网站应用
就是这样进行填写就行了

填写完,状态为通过就可以开始微信登录的开发了。

然后我们需要知道三个信息

ok,配置信息完成了

让我们继续来看微信开放平台的文档

第一步:请求code

这边请求需要带上相应的参数

redirect_uri是回调地址uri刚才配置的授权回调域填上并加上接口 or html,这个可以根据自己的业务来,这里我是填上接口

这个urlEnCode处理,网上有很多在线工具:https://tool.chinaz.com/tools/urlencode.aspx

然后根据微信开发文档填写对应的信息

https://open.weixin.qq.com/connect/qrconnect?

appid=xxxxxxxxx&redirect_uri=https%3a%2f%2fwww.baidu.com%2frequestWechatLogin&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect

上面信息是我随便填写的,开发时请根据自己的微信开放平台配置填写

ok,完成后打开此链接就会进入到该页面,就可以开始登录了。

使用手机端微信扫描,

注意:每次每个用户授权后都会得到一个一次性的code,这个code只能使用一次 ,下次再授权登录会重新生成code的!!!

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

链接参数根据微信开放平台配置对应填写


因为我这边redirect_uri填写的是一个接口,就需要写一个接口,我就直接上代码了,这里有封装的类和枚举,我就不展示了大家可以修改!!!

 /**
* 请求 code web微信登录
*
* @param code 请求登录唯一 code
* @return 通用返回对象
*/
@ApiOperation("请求 code 微信登录")
@ApiImplicitParam(name = "code", value = "请求登录唯一code", dataType = "String", paramType = "query")
@GetMapping("/requestWeChatLogin")
public ApiResult requestWeChatLogin(@RequestParam("code") String code) {
// 断言为空则抛出异常
Assert.notNull(code, "未授权成功");
String appId = "xxxxxxxxx";
String secret = "xxxxxxxxxxxxxxxxxx";
String strUri = StrUtil.format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={}&secret={}&code={}&grant_type=authorization_code", appId, secret, code);
// 使用 Hutool开发工具包,执行请求接口,获取相关信息
HttpResponse response = HttpRequest.get(strUri).execute();
// 转成JSON对象
JSONObject jsonObject = JSONUtil.parseObj(response.body());
// 判断JSON对象中 unionid 是否存在
if (jsonObject.isNull("unionid")) {
// 不存在返回结果,code无效
return new ApiResult(CommonEnum.CODE_INVALID);
}
// 获取 unionId
String unionId = jsonObject.get("unionid").toString();
// 获取 openId
String openId = jsonObject.get("openid").toString();
// 获取 accessToken
String accessToken= jsonObject.get("access_token").toString();
return new ApiResult(CommonEnum.SUCCESS);
}

这样一顿操作后,就可以根据code获取到扫码授权用户的一些信息。

拿到这些信息可以使用 access_token&openid 来获取用户个人信息 等等。

该保存数据库可以保存,有别的操作自行编写!!!  

Java对接微信登录的更多相关文章

  1. Java对接微信公众号模板消息推送

    内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...

  2. java对接微信支付

    对接微信扫码支付(模式2),前端使用velocity技术 (1)调用微信支付接口(view层)  此部分业务逻辑部分可以省略 @RequestMapping("/wxpay.htm" ...

  3. java对接微信小程序

    https://www.cnblogs.com/lyn20141231/p/11210372.html https://blog.csdn.net/sinat_29039125/article/det ...

  4. 对接微信红包时:CA证书出错,请登录微信支付商户平台下载证书

    今天在对接微信支付的微信红包发放时,出现““CA证书出错,请登录微信支付商户平台下载证书”的错误,特此记录一下: 如果你也在对接微信红包,并且你也在这个页面上下载了demo,再就是你也参照了里面的文档 ...

  5. 如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了QQ和微博这2大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小坑,但不算多,完整记录下来方便后来人快速对接. 后台设 ...

  6. Java 扫描微信公众号二维码,关注并自动登录网站

    https://blog.csdn.net/qq_42851002/article/details/81327770 场景:用户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: ...

  7. PHP对接微信扫码登录

    1.PC端扫码登录 如果你将微信小程序和公众账号绑定同一个微信开放平台,那么他们各自的接口返回有一个参数unionid是相同的(没有绑定微信公众账号就没有):那么你就可以使用这个unionid来做业务 ...

  8. java实现微信小程序服务端(登录)

    微信小程序如今被广泛使用,微信小程序按照微信官网的定义来说就是: 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 这就是微信小程序的魅力所在,有 ...

  9. 利用WxJava实现网站集成微信登录功能,核心代码竟然不超过10行

    最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项. 本文目录 一.微信开放平台操作步骤1.创建“网站应用”2.获取AppID和AppSecret二.开发指南三.开发实战1.po ...

随机推荐

  1. linux操作提示:“Can't open file for writing”或“operation not permitted”的解决办法

    在linux上使用vi命令修改一个文件内容的时候,发现无法保存,每次写完使用":q!"命令可以正常退出但是使用":wq!"命令保存文件并退出时出现一下信息提示: ...

  2. [LC] 347. Top K Frequent Elements

    Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...

  3. 关于VLC无法播放rtsp的问题分析

    我之前有一篇博客说,怎么通过vlc查日志,方法不知道是不是特别好,传送门:https://www.cnblogs.com/132818Creator/p/11136714.html 虽然在调试窗口上提 ...

  4. WIN10 蓝牙连接音箱之后,音量调节无效,音量从1-100,声音一样大,都是最大声,可以静音(解决方案)

    1.win+r,输入regedit,打开注册表2.进入路径:计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Bluetooth\Audio\AV ...

  5. 浮动框架iframe

    浮动框架式一种比较特别的框架,和frame比较类似.不过frame必须在frameset中才可以,而iframe不一样,首先, 他是一种内联框架,其次,他可以放在网页中的任何位置. 所以,iframe ...

  6. Memcached的批量删除方案总结

    Memcached的批量删除,向来是Memcached使用者很头疼的事情,因为Memcached采取的缓存方案是哈希表结构,所以没有办法实现delete from tablename where ke ...

  7. OpenCV 腐蚀与膨胀(Eroding and Dilating)

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...

  8. Nuxt.js 踩坑笔记 - 缓存向

    零.前言 最近参与了一个立足 seo 的移动端项目,公司前端工程主栈 vue,所以理所当然的用上了 nuxt,UI 主要选择了 Vant.   一.公共列表页的缓存 公共列表页由于数据量较大,故需要滚 ...

  9. linux中用户和用户组的概念以及查看命令

    Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响. 例如,某台 Linux 服务器上有 4 个用户,分别是 root ...

  10. Java IO: FileInputStream

    原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) FileInputStream可以以字节流的形式读取文件内容.FileInputStream ...