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

news/2024/5/8 13:59:10/文章来源:https://blog.csdn.net/weixin_30432179/article/details/101432828

最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项。

本文目录

一、微信开放平台操作步骤1.创建“网站应用”2.获取AppID和AppSecret二、开发指南三、开发实战1、pom.xml引入jar包2、配置文件添加对应的配置3、初始化配置4、控制层核心代码四、运行效果1.构造pc端链接2.微信扫描生成的二维码3.获取微信用户信息

一、微信开放平台操作步骤

微信开放平台地址:https://open.weixin.qq.com

一定要注意,网站集成微信登录需要在微信开放平台操作,它和微信公众平台不一样,虽然双方最后的用户唯一标识都是openId,但是是不互通的。如果开发平台想和公众平台相互通,两个平台得互相绑定,然后获取唯一识别的unionId。

下面说下在开放平台上的操作步骤:

1.创建“网站应用”

由于到对接PC网站登录,所以创建“网站应用”,操作截图如下:



新建网站应用截图

2.获取AppID和AppSecret

等微信审核通过后,会分配对应的AppId,AppSecret需要管理员扫描生成,生成后截图如下:


查看AppId截图

 

二、开发指南

微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等,整体流程为:

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

三、开发实战

项目中使用了开源项目WxJava,WxJava源码地址(https://github.com/Wechat-Group/WxJava);

先新建要给Spring Boot项目,具体可以参考文章我之前的文章《Spring Boot入门-快速搭建web项目》;

新建好项目后,继续按照下面步骤操作即可。

1、pom.xml引入jar包

<!-- 微信登录jar -->
<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-mp</artifactId>
    <version>3.3.0</version>
</dependency>

2、配置文件添加对应的配置

配置appId和appSecret,application.yml内如下:

wx:
  mp:
    configs:
        - appid: wx1*********
          secret: ***********
          token: 
          aesKey: 
          msgDataFormat: 

3、初始化配置

WxMpProperties.java代码如下:

@Data
@ConfigurationProperties(prefix = "wx.mp")
public class WxMpProperties {

    private List<MpConfig> configs;

    @Data
    public static class MpConfig {
        /**
         * 设置微信公众号的appid
         */

        private String appId;

        /**
         * 设置微信公众号的app secret
         */

        private String secret;

        /**
         * 设置微信公众号的token
         */

        private String token;

        /**
         * 设置微信公众号的EncodingAESKey
         */

        private String aesKey;
    }

}

WxMpConfiguration.java代码如下:

@Slf4j
@Configuration
@EnableConfigurationProperties(WxMpProperties.class)
public class WxMpConfiguration {

    private static Map<String, WxMpService> mpServices = Maps.newHashMap();

    public static Map<String, WxMpService> getMpServices() {
        return mpServices;
    }

    @Autowired
    private WxMpProperties properties;

    @Autowired
    private WxMpInRedisConfigStorageMy configStorage;

    @PostConstruct
    public void initServices() {
        // 代码里 getConfigs()处报错的同学,请注意仔细阅读项目说明,你的IDE需要引入lombok插件!!!!
        final List<WxMpProperties.MpConfig> configs = this.properties.getConfigs();
        if (configs == null) {
            throw new RuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!");
        }

        mpServices = configs.stream().map(a -> {
            //redis
            configStorage.setAppId(a.getAppId());
            configStorage.setSecret(a.getSecret());
            configStorage.setToken(a.getToken());
            configStorage.setAesKey(a.getAesKey());

            WxMpService service = new WxMpServiceImpl();
            service.setWxMpConfigStorage(configStorage);
            log.info("配置的appId={}",a.getAppId());
            return service;
        }).collect(Collectors.toMap(s -> s.getWxMpConfigStorage().getAppId(), a -> a, (o, n) -> o));
    }
}

4、控制层核心代码

@Slf4j
@Controller
@RequestMapping("/redirect/{appid}")
public class WxRedirectController {

    /**
     * 获取用户信息
     *
     */

    @RequestMapping("/getUserInfo")
    public void getBase(HttpServletRequest request, HttpServletResponse response, @PathVariable String appid, @RequestParam("code") String code) {
        WxMpService mpService = WxMpConfiguration.getMpServices().get(appid);
        try {
            WxMpOAuth2AccessToken accessToken = mpService.oauth2getAccessToken(code);
            log.info("accessToken={}", JSON.toJSONString(accessToken));
            WxMpUser wxMpUser = mpService.oauth2getUserInfo(accessToken, null);
            log.info("wxMpUser={}", JSON.toJSONString(wxMpUser));
        } catch (Exception e) {
            log.error("获取用户信息异常!", e);
        }
    }
}

四、运行效果

1.构造pc端链接

https://open.weixin.qq.com/connect/qrconnect?appid=wx12345678redirect_uri=http%3a%2f%2fwww.test.com%2fredirect%2fwx12345678%2fgetUserInfo&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect

打开上面链接后截图如下:


2.微信扫描生成的二维码

微信扫描后手机端截图如下:


微信用户使用微信扫描二维码并且确认登录后,PC端会跳转到

http://www.test.com/redirect/wx12345678/getUserInfo?code=CODE&state=STATE

3.获取微信用户信息

控制层代码可以接收到上code和state参数,根据这两个参数可以获取微信用户信息,请求过来后打印用户信息的日志如下:

[http-nio-8104-exec-2] INFO  c.t.m.s.c.WxRedirectController - accessToken={"accessToken":"24_vWnvRSV9vmR7qOqhJKRoER93bhsPg","expiresIn":7200,"openId":"oRXsdsUh6scaKof3D1I4d3c","refreshToken":"24_WmknxCn9ff2Pl2xhLFw-kY96p6zgiqFJy8LMIOP_CaMZOHEM","scope":"snsapi_login","unionId":"oJxUkwfFOSyu1oC6oF2h6pTI"}
[http-nio-8104-exec-2] INFO  c.t.m.s.c.WxRedirectController - wxMpUser={"city":"","country":"","headImgUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM4ibeAsuoVIf3qr4QxjnNWh4Q1WiawCFNfzkGMzVqubPOnr0hA3Micwsu1LtblQ7phImdYSC2nic6OUicQ/132","language":"","nickname":"阿白","openId":"oRXsdsUh6scaKof3D1I4d3c","privileges":[],"province":"","sex":0,"sexDesc":"未知","unionId":"oaDUkwVfCpMJOSyu1oC2oF2h6pTI"}

到此PC网站集成微信登录已经全部实现完成了,有问题欢迎留言沟通哦!

推荐阅读

1.Spring Boot 2.X 整合Redis
2.Spring Boot 2.X 如何优雅的解决跨域问题?
3.Spring Boot 2.X 集成spring session实现session共享
4.Spring条件注解@Conditional
5.SpringBoot 2.X从0到1实现邮件发送功能
6.Redis批量删除key的小技巧,你知道吗?
7.Spring Boot 2.X 如何快速整合jpa?
8.Spring Boot之Profile--快速搞定多环境使用与切换
9.Spring Boot快速集成kaptcha生成验证码
10.Spring Boot 2.X整合Spring-cache,让你的网站速度飞起来


限时领取免费Java相关资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。
关注下方公众号即可免费领取:

Java碎碎念公众号

 

转载于:https://www.cnblogs.com/haha12/p/11428209.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_780356.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

织梦栏目加html,织梦dedecms调用栏目SEO标题,关键字,栏目描述的教程

标题、关键字和描述是每个网页SEO优化的基础&#xff0c;dedecms针对用户网站SEO优化考虑&#xff0c;给每个网站栏目提供了SEO标题、关键字和栏目描述的设置&#xff0c;但是要使用这几项设置还需要在dedecms模板中调用&#xff0c;那么织梦dedecms栏目怎么调用SEO标题、关键字…

愚人节恶搞html,愚人节来玩变装!爆笑在线恶搞照片网站

1爆笑在线恶搞照片网站(一)【PConline 欣赏】愚人节&#xff0c;不论是愚人还是自娱&#xff0c;开心是最重要的。在跟大家推荐了愚人节爆笑整蛊小游戏之后(详情)&#xff0c;这里再和大家分享一组超级搞笑有趣的在线照片处理网站。事实上&#xff0c;处理照片的方式除了有Phot…

爬虫python下载网站所有图片_[记录][python]python爬虫,下载某图片网站的所有图集...

随笔仅用于学习交流&#xff0c;转载时请注明出处&#xff0c;http://www.cnblogs.com/CaDevil/p/5958770.html 该随笔是记录我的第一个python程序&#xff0c;一个爬去指定图片站点的所有图集&#xff0c;现在还是一个非常简陋的单线程程序。下一步是改写成多线程&#xff0c;…

服务器打不开centos系统,u盘装centos无法进入系统怎么办?_网站服务器运行维护,centos...

win10任务栏没有网络图标怎么办_网站服务器运行维护win10任务栏没有网络图标的解决方法是&#xff1a;1、点击windows图标&#xff0c;接着点击【设置】&#xff1b;2、进入系统设置&#xff0c;找到【通知和操作】&#xff1b;3、点击【选择在任务栏上显示哪些图标】&#xff…

go 根据输入类型执行对应的方法_从0开始Go语言-用Golang搭建网站(无依赖)

实践是最好的学习方式-零基础通过开发Web服务学习Go语言本文适合有一定编程基础&#xff0c;但是没有Go语言基础的同学。也就是俗称的“骗你”学Go语言系列。这是一个适合阅读的系列&#xff0c;我希望您能够在车上、厕所、餐厅都阅读它&#xff0c;涉及代码的部分也是精简而实…

php做seo优化,php做seo优化能力有哪些

现在百度搜索引擎的快速发展&#xff0c;希望在某些百度搜索引擎中网站页面关键字有一个不错排名&#xff0c;php做seo优化变得格外重要&#xff0c;php做seo优化能力有哪些&#xff1f;大家都掌握php做seo优化知识了吗&#xff1f;废话说完了步入主题长沙搜遇网络给我们大家谈…

.php后缀的url_网站运营必看干货——URL优化技巧分享

大家在做网站优化时除了要优化tkd之外&#xff0c;url的优化也是非常重要的&#xff0c;网站url的结构将会直接关系到百度蜘蛛对网站的抓取&#xff0c;今天小编整理归纳了一些优化技巧&#xff0c;希望能帮助到大家。一、网站URL的类型1) 动态url顾名思义指的是动态页面、动态…

html网站页面上字体改变,如何设置网页字体样式

CSS布局HTML小编今天和大家分享网页的字体样式&#xff0c;这个只要平时最普通&#xff0c;最常用&#xff0c;最实用的网页字体样式font-family:Microsoft YaHei。网页字体样式华文黑体&#xff1a;STHeiti网页字体样式华文楷体&#xff1a;STKaiti网页字体样式华文宋体&#…

js映射 nginx_企业级电商网站使用Nginx+Lua(OpenResty)实现高性能Web应用

简介OpenResty是一款基于Nginx的高性能负载均衡服务器容器&#xff0c;简单来说是NginxLua。结合了Lua语言来对Nginx进行扩展&#xff0c;使得在Nginx上具有web容器功能。使得可以使用lua脚本来进行web的开发。有了lua&#xff0c;我们可以借助于nginx的异步非阻塞的功能&#…

电脑服务器系统进入安全模式,win7系统开机按F8键不能进入安全模式怎么办_网站服务器运行维护,win7,F8,安全模式...

win10系统关机后仍然耗电怎么办_网站服务器运行维护win10系统关机后仍然耗电的解决方法&#xff1a;1、首先打开电源选项&#xff1b;2、然后依次点击【选择电源按钮的功能】、【更改当前不可用的设置】&#xff1b;3、最后取消勾选【启用快速启动】选项。解决方法&#xff1a;…

网站同时出现网站内容和html源码是什么原因_十分钟小白就能搭建好一个属于自己的个人网站...

很多人觉得搭建一个网站很难,因为自己不懂代码,在这里教你不需要懂代码也能搭建一个属于自己的网站搭建一个网站必备2条件1.服务器2.域名简单的来说服务器就是跟你个人的电脑一样,只不过是用来做访问服务的那么服务器能搭建网站, 个人电脑也是可以的, 无论是服务器还是个人电脑…

可以发外链的网站_到哪里发外链比较好

不管是软文外链&#xff0c;还是网站的外链&#xff0c;或者是网页的外链&#xff0c;增加外链的目的就好像是你开了一个店&#xff0c;需要不断的去做广告别人才能知道在这个地方你开了一个店&#xff0c;你的店里卖什么东西&#xff1f;对于开店而言&#xff0c;你所做的广告…

仿小蚂蚁门户网站 php,仿小蚂蚁大气地方门户模版Discuz! X2.5

下面我们对仿小蚂蚁大气地方门户模版Discuz! X2.5文件阐述相关使用资料和仿小蚂蚁大气地方门户模版Discuz! X2.5文件的更新信息。仿小蚂蚁大气地方门户模版Discuz! X2.51. 基本文件说明&#xff1a;template (风格文件)、fgoo_static(风格需要的图片和JS文件)、PSD分层文件、fg…

网站信息泄漏防护篇

网站信息泄漏防护篇simeon每天您是否收到数封垃圾邮件&#xff0c;每天您是否接到无数“骚扰”电话&#xff0c;每天您是否会收到数条垃圾短信&#xff0c;也许三个也许中都是肯定&#xff0c;这一切毫无例外都会耗费您生命中的时间&#xff0c;可是您是否曾经深入思考过为什么…

12个网站帮你制作个性化的卡通形象

从QQ秀的流行程度我们可以看出国内网友对卡通形象的热爱.我们在大部分可以自定义个人资料的网站上一般不会上传真实的图片,一个独具个性的卡通形象也许会更加具有吸引力.我之前介绍过一个新兴的网站Befunky,从索要邀请的人数来看,这的确是一个非常有人气的服务.下面介绍的11个卡…

UML辅助网站规划和设计指南/1

概述 Web网站往往具有复杂与高度动态的特点。为了让Web应用在短时间之内开始运作&#xff0c;开发周期应该尽量地短。许多时候&#xff0c;开发者直接进入编写代码这一阶段&#xff0c;却不去仔细考虑自己想要构造的是什么样的网站以及准备如何构造&#xff1a;服务器端代码往往…

网站优化的几个方面

充分利用网页标题这适用于网页本身的主标题&#xff0c;也适用于浏览器标题栏中出现的标题。无论何时&#xff0c;要尽可能确保每一张网页都带有独一无二、可描述网页特征的标题。举例说明&#xff0c;如果您的网站是"Buffy 沙发商店"&#xff0c;访问者或许希望将您…

在浏览器中输入网站域名并按下回车的详细过程

主要有以下几个部分&#xff1a; 1 DNS解析&#xff0c;获取Web服务器IP 2 建立TCP连接 3 向Web服务器发送HTTP请求 4 Web服务器收到请求并处理 5 Web服务器返回响应 6 浏览器对响应解码&#xff0c;并显示数据 7 页面显示完成后&#xff0c;浏览器发送异步请求 8 关闭TCP连接 …

【web标准设计】学习、提高、欣赏网站推荐

警告文章包含的一些粗俗、庸俗、恶心的言语可能造成您阅读后的不适感&#xff0c;请谨慎选择是否阅读。如你自愿阅读本文&#xff0c;因粗俗、庸俗、恶心的言语给您所造成的任何后果&#xff0c;本文作者不负任何责任。 华丽的中指基础知识的学习 XHTML、CSS、JavaScript的基础…

30个让人兴奋的视差滚动(Parallax Scrolling)效果网站

视差滚动&#xff08;Parallax Scrolling&#xff09;是指让多层背景以不同的速度移动&#xff0c;形成立体的运动效果&#xff0c;带来非常出色的视觉体验。作为今年网页设计的热点趋势&#xff0c;越来越多的网站应用了这项技术。今天这篇文章就与大家分享30个视差滚动效果的…