WxJava+Vue3 实现微信网页授权登录功能

WxJava+SpringBoot 实现公众号网页授权真的超级简单,后端就两个接口搞定。

获取到用户信息后需要进行注册的参数只有三个,分别是:唯一标识、用户名称、用户头像,其他没了。

maven 坐标:

		<!--微信公众号开发-->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>4.5.0</version>
        </dependency>

代码两个接口,一个是获取链接:getCode,返回的链接是给用户点击使用的,用户点击该链接后,回调到第二个接口:getOpenId,在这个接口里面就能够获取到用户信息了,然后进行注册,带着 token 重定向到前端页面完成登录

	@Autowired
	private WxMpService wxMpService;

	/**
	 * 微信客户端授权(请求这个接口,用户点击返回的链接就会请求到 getOpenId,在 getOpenId 中就可以获取到用户的信息并注册返回 token)
	 */
	@GetMapping("/getCode")
	public String getCode(){
		try {
			//微信获取到code回调地址
			String redirectUrl =  "https://下面接口的地址/wx/getOpenId";
			WxOAuth2Service oAuth2Service = wxMpService.getOAuth2Service();
			String authorizationUrl = oAuth2Service.buildAuthorizationUrl(redirectUrl, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
			//网页授权
			log.debug("重定向url:>> " + authorizationUrl);
			return authorizationUrl;
		} catch (Exception e) {
			log.error("response重定向失败:>>" + e.getMessage());
			e.printStackTrace();
		}
		return "";
	}

	@RequestMapping(value="/getOpenId")
	public void getOpenId(String code, String state, HttpServletResponse response){
		// 重定向回前端页面
		String ACS_ADS_ME = "https://你的前端页面/aigc";
		try {
			WxOAuth2Service oAuth2Service = wxMpService.getOAuth2Service();
			WxOAuth2AccessToken accessToken = oAuth2Service.getAccessToken(code);
			System.out.println("accessToken = " + accessToken);
			String openId = accessToken.getOpenId();
			WxOAuth2UserInfo userInfo oAuth2Service.getUserInfo(accessToken, "zh_CN");
			log.info("用户信息:{}",oAuth2Service.getUserInfo(accessToken, "zh_CN"));
			// 这里可以直接写用户注册逻辑
			String token = userService.register(userInfo);
			// 将 token 拼接在前端页面,让前端页面识别到 token 后放入请求头使用
			response.sendRedirect(ACS_ADS_ME+"?token="+token);
		} catch (WxErrorException e) {
			e.printStackTrace();
			throw new RuntimeException("获取openId失败!");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

前端的逻辑就是识别链接上的 token,判断链接是否带着 token,如果带着 token 就拿来使用即可

如果你使用 vue 可以通过:route.query.token 来获取到拼接在链接上的 token 值

将 token 放入请求头,然后直接刷新页面,重新加载用户信息,完事。

有啥子问题欢迎在评论区留言

有人问这个 ui 是怎么出现的?当用户在微信里点开第一个接口返回的链接就会出现这个,我刚开始也摸不着头脑不知道这玩意怎么出现的
在这里插入图片描述

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
首先,您需要安装 `express-ws` 和 `vue3`。可以使用以下命令进行安装: 在服务器端(使用 Express.js): ```bash npm install express express-ws ``` 在客户端(使用 Vue.js): ```bash npm install vue@next ``` 接下来,您可以按照以下步骤实现微信聊天的代码: 1. 服务器端代码(Express.js + express-ws): ```javascript // server.js const express = require('express'); const expressWs = require('express-ws'); const app = express(); expressWs(app); const clients = []; app.ws('/chat', (ws, req) => { clients.push(ws); ws.on('message', (msg) => { // 广播收到的消息给所有客户端 clients.forEach((client) => { client.send(msg); }); }); ws.on('close', () => { // 移除断开连接的客户端 const index = clients.indexOf(ws); if (index !== -1) { clients.splice(index, 1); } }); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 2. 客户端代码(Vue.js): ```html <!-- App.vue --> <template> <div> <h1>微信聊天</h1> <div class="chat-box"> <div v-for="(message, index) in messages" :key="index" class="message">{{ message }}</div> </div> <input v-model="inputMessage" @keyup.enter="sendMessage" type="text" placeholder="输入消息" /> </div> </template> <script> import { ref } from 'vue'; export default { name: 'App', setup() { const inputMessage = ref(''); const messages = ref([]); const ws = new WebSocket('ws://localhost:3000/chat'); ws.onmessage = (event) => { // 接收到服务器发送的消息 messages.value.push(event.data); }; const sendMessage = () => { // 发送消息到服务器 if (inputMessage.value.trim() !== '') { ws.send(inputMessage.value); inputMessage.value = ''; } }; return { inputMessage, messages, sendMessage, }; }, }; </script> <style> .message { margin-bottom: 10px; } </style> ``` 3. 在一个新的文件中,创建一个 Vue 实例并将其挂载到页面上: ```javascript // main.js import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app'); ``` 在完成上述步骤后,您可以运行服务器端代码(`node server.js`),然后在浏览器中访问客户端代码,即可实现微信聊天功能。请确保服务器和客户端代码在同一台机器上运行,并且端口号(3000)没有被占用。 当有客户端发送消息时,服务器将广播该消息给所有连接的客户端,从而实现聊天功能
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值