准备工作

1、vue环境安装:https://editor.csdn.net/md/?articleId=108667564
2、申请一个公众号(订阅号)测试使用
3、申请开发者测试号
4、下载微信开发者工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html
5、搭建一个简单的后台(随便什么都行,通过请求访问)

开始

1、搭建vue3手脚架,推荐使用vue ui或npm install -g @vue/cli
2、必要的组件:router/store/axios
3、任选一款框架,我选的是element-plus,还推荐一个vant(移动端开发比Element友好)
4、看看必须要用的几个东西

constant.js

export const serverUrl = '' // 前端页面的地址(如果是映射的就写外网地址)
export const wwwUrl = ''// 公众号的外网地址
export const appid = '' // 公众号的appid
export const appsecret = '' // 公众号的appsecret

通过https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index拿到测试用的appid和appsecret

main.js

import { createApp } from 'vue';
import App from './App.vue';
import router from '@/router';
import store from '@/store';
// axios
import {post,get,patch,put,del} from './http/request';
// ! element-plus vue3.0
import ElementPlus from 'element-plus';
import 'element-plus/lib/theme-chalk/index.css';const app = createApp(App);
// axios定义全局变量
app.config.globalProperties.$post = post;
app.config.globalProperties.$get = get;
app.config.globalProperties.$patch = patch;
app.config.globalProperties.$put = put;
app.config.globalProperties.$del = del;app.use(ElementPlus).use(router).use(store).mount('#app')

axios之所以这样的是因为我这边做了一个简单的封装,封装代码如下:

import axios from "axios"
import {serverUrl
} from "@/untils/constant"; // 这里我是将所有常量放在一个地方的,需要的时候做引入,也可以直接写地址
import qs from "qs";axios.defaults.timeout = 5000;
axios.defaults.baseURL = serverUrl;//http request 拦截器
axios.interceptors.request.use(config => {let newConfig = config;if (newConfig.url) {// 不同的请求可以做不同的处理newConfig.data = qs.stringify(config.data);newConfig.headers = {'Content-Type': 'application/x-www-form-urlencoded'}}return newConfig;},error => {return Promise.reject(err);}
);//http response 拦截器
axios.interceptors.response.use(response => {if (response.data.errCode == 2) {router.push({path: "/login",query: {redirect: router.currentRoute.fullPath} //从哪个页面跳转})}return response;},error => {return Promise.reject(error)}
)/*** 封装get方法* @param url* @param data* @returns {Promise}*/
export function get(url, params = {}) {return new Promise((resolve, reject) => {axios.get(url, {params: params}).then(response => {resolve(response.data);}).catch(err => {reject(err)})})}/*** 封装post请求* @param url* @param data* @returns {Promise}*/
export function post(url, data = {}) {return new Promise((resolve, reject) => {axios.post(url, data).then(response => {resolve(response.data);}, err => {reject(err)})})
}/*** 封装patch请求(局部更新)* @param url* @param data* @returns {Promise}*/
export function patch(url, data = {}) {return new Promise((resolve, reject) => {axios.patch(url, data).then(response => {resolve(response.data);}, err => {reject(err)})})
}/*** 封装put请求* @param url* @param data* @returns {Promise}*/
export function put(url, data = {}) {return new Promise((resolve, reject) => {axios.put(url, data).then(response => {resolve(response.data);}, err => {reject(err)})})
}/*** 封装del请求* @param url* @param data* @returns {Promise}*/
export function del(url, data = {}) {return new Promise((resolve, reject) => {axios.delete(url, {data: data}).then(response => {resolve(response.data);}, err => {reject(err)})})
}

封装store,store作为临时数据存放的地方,对其进行一个简单的封装:
首先封装的是localStorage.js,这个的主要功能是获取浏览器内的缓存

let storage = window.localStorage;
const db = {// 保存save(key, value) {storage.setItem(key, JSON.stringify(value))},// 获取get(key, defaultValue = {}) {return JSON.parse(storage.getItem(key)) || defaultValue},// 获取getItem(key) {try {return JSON.parse(storage.getItem(key))} catch (err) {return null}},// 移除remove(key) {storage.removeItem(key)},// 所有的keykeys() {return storage.keys()},// 清除缓存clear() {storage.clear()}
};export default db

然后是store的index.js:

import { createStore } from 'vuex';
import state from './state';
import getters from './getters';
import actions from './actions';
import mutations from './mutations';export default createStore({// 1. statestate,// // 2. gettersgetters,// 3. actions// 通常跟api接口打交道actions,// 4. mutationsmutations
});

接下来是接口层actions

const actions = {// 参数列表:{commit, state}// state指的是state数据// commit调用mutations的方法 // name就是调用此方法时要传的参数setUser({commit,state}, user) {// 跟后台打交道// 调用mutaions里面的方法commit("setUser", user);},setAccessToken({commit,state}, accessToken) {commit("setAccessToken", accessToken);},setInspectRouteType({commit,state}, inspectRouteType) {commit("setInspectRouteType", inspectRouteType);}
};export default actions

然后是获取数据的get

import db from '@/localstorage/localstorage'
const getters = {// 参数列表state指的是state数据getUser(state) {return state.user || db.get('USER-INFO');},getAccessToken(state) {return state.accessToken || db.get('ACCESS_TOKEN');},getInspectRouteType(state) {return state.inspectRouteType || db.get('INSPECTION-TYPE');},
};export default getters

设置数据的set:

import db from '@/localstorage/localstorage'
const state = {// state指的是state的数据// name传递过来的数据setUser(state, val) {db.save('USER-INFO', val);state.user = val;},setAccessToken(state, val) {db.save('ACCESS_TOKEN', val);state.accessToken = val},setInspectRouteType(state, val) {db.save('INSPECTION-TYPE', val);state.inspectRouteType = val},
};export default state

初始化的state

import db from '@/localstorage/localstorage'
const state = {userInfo: db.get('USER-INFO'),accessToken: db.get('ACCESS_TOKEN'),inspectRouteType: db.get('INSPECTION-TYPE')
};export default state

至此文件结构如下:

然后就可以正常开发了:

获取微信授权

首先我们需要微信的授权才能,只有这样才能正常访问我们的网页,所以开始搞授权:
前端代码:

import { appid,  wwwUrl } from "@/untils/constant";export default {name: "Home",data() {return {};},components: {Footer,},methods: {goTo(name) {this.$router.push({ name: name });},getOpenId() {//先判断有没有授权(判断地址栏code,有就-用户同意了授权,没有-没授权或者拒绝授权)var str = this.$route.query.code; //此处使用的是history路由模式,hash这么拿不到。if (str) {// 走后端接口(把code传给后台,让后台根据code获取openID与用户信息)this.$get("/open/lims/mdm/wechats/queries/wechat-token/" + str,{openid : appid}).then((res) => {if (res.openid) {//拿到了ACCESS_TOKEN与用户openid,跳转到登录页面this.$router.push({name: "Login",params: res,});} else {alert("授权失败");}}).catch((err) => {alert("授权失败");});} else {this.getCode();}},getCode() {//没授权先授权,授权后会有一个code在地址栏上window.location.href ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +appid +"&redirect_uri=" +wwwUrl +"&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect";},},mounted() {},created() {this.getOpenId();},
};

后台代码:

    /*** 获取微信的token* @param code* @return*/@Overridepublic JSONObject getToken(String code) {// 拼接urlStringBuilder urlStr = new StringBuilder(url);urlStr.append("?appid=").append(appid).append("&secret=").append(appSecret).append("&code=").append(code).append("&grant_type=authorization_code");String request = HttpUtils.getRequest(urlStr.toString());// 拿到微信的token返回给前端final JSONObject jsonObject = JSONObject.parseObject(request);return jsonObject;}private CoreUserBean getUser(String openId){if (StringUtils.isEmpty(openId)){return null;}LimsUserWechatExtBean limsUserWechatExtBean = this.selectFirstByFilter(SearchFilter.instance().match("openId", openId).filter(MatchPattern.EQ));if (limsUserWechatExtBean != null){// 验证用户信息,根据实际情况自行验证return coreUserService.selectByIdIfPresent(limsUserWechatExtBean.getUserId());}return null;}

获取授权后则表示用户,且我们可以获取到一些基础的用户信息作为用户的唯一的判断:
然后就是登录了:

import { loginType } from "@/untils/constant";
export default {data() {return {form: {username: "",password: "",openid: "",},};},methods: {onSubmit() {// 调起登录let _this = this;_this.$post("/core/module/sys/login", {id: _this.form.username, // 用户名password: _this.form.password, // 密码openid: _this.$route.params.openid || _this.$store.getters.getAccessToken.openid, // 用户微信idloginType: loginType,}).then((res) => {// 存入信息到vuex_this.saveLoginData();_this.goTo("ChooseInspect");}).catch((err) => {alert("请检查用户名和密码是否正确!");});},goTo(name) {this.$router.push({ name: name, params: {} });},saveLoginData() {let _this = this;_this.$store.dispatch("setUser", {id: _this.form.username,});_this.$store.dispatch("setAccessToken", _this.$route.params);},},created() {},mounted() {},
};

上线配置

登录后就能正常访问其他页面了,所以至此,基本开发结束,然后就是页面开发,就部多赘述了。
微信公众号上线配置:
首先需要一个已经备案的网址,然后需要在微信公众号上面配置这几个东西:


注意,这里需要上传一个tx的校验文件到服务器的根目录下面,也就是项目文件夹里面就好了。

然后就可以在微信公众号里面访问了。
nginx看情况配置就好了

vue3 搭建微信公众号全流程相关推荐

  1. 手把手教大家搭建微信公众号查题功能

    手把手教大家搭建微信公众号查题功能 本平台优点: 多题库查题.独立后台.响应速度快.全网平台可查.功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转) ...

  2. 华为云服务器如何搭建微信公众号后台-收发文本信息?

    概述 在本教程中,您将学会使用弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果给最终用户,如图 ...

  3. [python]用flask框架搭建微信公众号的后台

    用flask框架搭建微信公众号的后台 最近用python写了点爬虫,为了要让爬取的数据能够随时显示在我眼前,并实时根据我的指令返回数据.于是采用微信公众号做这个显示窗口,既能发送指令也能显示简单的相关 ...

  4. SpringBoot搭建微信公众号后台(一):消息接收与响应

    关注作者,更多动态实时掌握,微信公众号:隔壁的程序员 上一篇我们经过接口验证,已经可以与微信的服务器进行通信,错过的可以通过下面链接来进行回顾,这一篇就来实现一个基本的消息接收与响应. SpringB ...

  5. php虚拟主机搭建微信公众号服务器

    @版权声明:本文为博主原创文章,未经博主允许不得转载https://blog.csdn.net/qq_40758535/article/details/89606716 php虚拟主机搭建微信公众号服 ...

  6. 如何用阿里云服务器搭建微信公众号机器人?

    我们经常在一些公众号里回复信息,微信公众号都会自动回复信息,区别于微信平台的自动回复,有的公众号上面的自动回复,则更像是一个机器人客服.下面小编就教大家如何搭建微信公众号机器人. 所需材料: 微信公众 ...

  7. 虚拟主机搭建微信公众号服务器

    一.前言 搭建微信公众号服务器的方式不只一种,可以用java等其他语言或是其他云空间来搭建服务器,这里总结的是用虚拟主机(主机公园中的虚拟主机)搭建微信公众号服务器的大概思路.不管用什么方式,配置微信 ...

  8. sae微信公众平台php,SAE 上使用PHP搭建微信公众号后台

    SAE 上使用PHP搭建微信公众号后台 准备阶段 SAE准备 SAE的应用平台提供了一个语言环境.比如提供了PHP环境的应用即可运行PHP代码.当然环境中也可以放HTML和CSS,将要展示的页面命名为 ...

  9. SpringBoot搭建微信公众号后台(零):服务搭建与接口验证

    关注作者,更多动态实时掌握,微信公众号:隔壁的程序员 前言:从这篇开始小王子将开始一个新的系列内容,从零开始搭建自己的微信公众号后台.内容大致规划为:环境篇,包括用到的工具安装,破解,配置:基础篇,主 ...

最新文章

  1. Servlet(一)
  2. Fragment的startActivityForResult详细解决方案
  3. HTML添加首页,添加首页分类推荐.html
  4. makefile 库目录
  5. 在CISCO交换机上配置SSH
  6. php测试宽带速度慢,宽带速度慢怎么办?
  7. ECCV 2020 Spotlight | CFBI:前背景整合的协作式视频目标分割
  8. PolicyGradientMethods-强化学习
  9. 后缀数组--(最长公共前缀)
  10. C语言试题八十三之输出左下三角形九九乘法表
  11. java第三阶段源代码_有效Java第三版的源代码已更新为使用较新的功能
  12. java util logging_简单日志记录,使用java.util.logging
  13. python遥感数据有偿处理_利用python读写tiff遥感影像数据
  14. MTK 驱动(80)---MTK平台User版本开机异常/无法开机,如何抓取log
  15. 学MFC的九九八十一难
  16. NUMA架构的CPU – 你真的用好了么?
  17. .a 和.o 合并成一个.a_污水处理A/A/O工艺调试运行体会
  18. 家用简易NAS系统搭建
  19. MATLAB数据线性度计算,非线性度的计算
  20. 鲁东大学linux试题,大学体育试题库

热门文章

  1. Select下拉框实现中国省市区三级联动
  2. iOS极光推送和极光IM中的JCore冲突问题
  3. java输出月份对应的季节
  4. MaixII-Dock(v831)学习笔记——MaixII-Dock初使用
  5. 注册表REG文件编写实例(创建、删除、添加、更改键值)
  6. nodejs+vue企业员工考勤管理系统java python php
  7. thinkphp 调用阿里云短信接口
  8. MySQL如何实现分页查询
  9. 车载音频总线A2B介绍
  10. 【元宇宙欧米说】一个科幻 NFT,一场关于创作者经济的探索