企业微信公众号本地调试auto2.0
适配开发者工具
企业微信公众号、微信公众号本质相同,因为我在开发企业号,所以拿企业号为例
首先添加企业应用

然后进入改应用,配置主页、网页授权及JS-SDK、企业微信授权登录
注意企业微信不允许配置localhost类型的地址
所以我的地址如下:
主页:http:///dshvv.xiaomiqiu.com
网页授权js-sdk: dshvv.xiaomiqiu.com
企业微信授权登录: dshvv.xiaomiqiu.com
但是要又要本地调试,但是这边地址又必须是正式域名。那怎么处理呢?
我用的是内网转发 ngrok。通过内网转发技术将本地的服务映射到正式域名上。
这样访问正式的地址,来实时访问本地代码
我这边使用技术是小米球(因为花生壳太贵了)
关于auth2.0认证
前端拿auth2给的code给后端,用来换取token。
这个token是后端写入到cookie中的
然后以后每次请求浏览器都会自动带上这个包含token的cookie。
如果token过期,则会返回401
前端则要重新获取code用来刷新token(这里不考虑code没过期,而token过期,不要搞这么复杂)
技术难点
后端cookie写入到小程序开发工具中
前端和后端是两个服务,最好都代理到同一个顶级域名上,这样方便后端将coockie写入到客户端。
具体办法如下:
a、小米球代理前端和后端
其中page是我启动的本地前端服务,serve是我启动的后端服务。将其分别代理到了 dshvv.xiaomiqiu.com、dshvv1.xiaomiqiu.com
tunnels:
page:
remote_port: 80
subdomain: dshvv
proto:
http: 127.0.0.1:8080
serve:
remote_port: 80
subdomain: dshvv1
proto:
http: 127.0.0.1:7777
b、然后再将后端设置cookie的domain为顶级域名 xiaomiqiu.com
String token = otherService.login(code);
Cookie cookie = new Cookie("token",token);
cookie.setHttpOnly(true);
cookie.setDomain("xiaomiqiu.com");
response.addCookie(cookie);
前端鉴权无效后的操作
(spa下,无论从哪个路由进入)在首次进入应用时,或者再遇到返回401时,需要要anth2.0一下,然后拿token。
为优化体验,我们要处理哪里失效,auth2.0之后还要回到这个页面。不能跳转到首页。所以我们auth2.0的重定向地址为刷新code之前即当前url。
所以前端核心代码如下:
utils.js
/**
* 登录失效,重新登录并回来
*/
export const loginCurrent = ()=> {
const redirect_uri = encodeURIComponent(`${location.origin}${location.pathname}`);
console.log(redirect_uri);
const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=应用id&redirect_uri=${redirect_uri}&response_type=code&scope=SCOPE&state=STATE#wechat_redirect`;
location.href = url;
}
main.js
const code = getUrlQuery("code"); //从url中获取参数code
// 进来有code,直接用最新的code更新token
if (code) {
axios.get(`http://dshvv1.xiaomiqiu.com/login?code=${code}`).then((res) => {
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
})
} else {
loginCurrent();
}
axios.config.js
import axios from 'axios';
import { loginCurrent } from '.';
// http response 拦截器
axios.interceptors.response.use(
response => {
//拦截响应,做统一处理
if (response.data.status === 401) {
console.log('登录超时,即将重新登录(将会自动刷新页面一下)');
loginCurrent();
}
return response
},
//接口错误状态处理,也就是说无响应时的处理
error => {
return Promise.reject(error.response) // 返回接口返回的错误信息
}
)
源代码
因为博客园上传文件麻烦,故而将文件隐藏到图片中,下载图片之后将后缀名改为zip解压即可,包含前后端代码

企业微信公众号本地调试auto2.0的更多相关文章
- C#微信公众号——本地调试
测试微信,因为要与微信服务器进行交互,所以必须要是外网地址,实现本地调试首先需要解决的问题就是外网问题,这个我前面的文章有介绍,这里就不再详细介绍了,网址http://www.cnblogs.com/ ...
- Mac下进行基于java服务端语言的微信公众号本地js-sdk调试的大致方法
开发微信公众号应用调用js-sdk,需要先在微信公众号后台配置可信域名,之后从微信的入口地址重定向到改域名下的路径后便会返回code,之后可以拿到一系列需要的参数等等.那么本地开发,如果使用的是PHP ...
- asp.net微信公众平台本地调试设置
1.首先要开启内网穿透功能,我这边使用自己搭建的ngrok内网穿透服务(具体如何搭建ngrok内网穿透服务,另开一篇说) 2.开启内网穿透后,即可实现互联网访问 www.tbkmama.cn 指向 1 ...
- ngrok逆向代理服务器搭建微信公众号本地开发环境
一条命令解决的外网访问内网问题 本地WEB外网访问.本地开发微信.TCP端口转发 平台登陆地址:http://www.ngrok.cc/login 新版本上线启动方式更简单使用视频教程 在路由器上面的 ...
- 微信公众号本地断点调试(frp反向代理或Remote Debugger)
问题描述: 需要开发微信授权和订阅推送,但是感觉调试不方便,就试着几种方式.因为是用的C#开发,Visual Studio工具自带配套的远程工具 (Remote Debugger).但是感觉不稳定,容 ...
- 企业微信公众号告警Python脚本
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import requests import json import os impo ...
- .NET微信公众号开发-1.0初始微信公众号
一.前言 微信公众号是开发者或商家在微信公众平台上申请的应用账号,该帐号与QQ账号互通,通过公众号,商家可在微信平台上实现和特定群体的文字.图片.语音.视频的全方位沟通.互动 .形成了一 种主流的线上 ...
- .NET微信公众号开发-2.0创建自定义菜单
一.前言 开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档. 接口文档地址:http://mp.weixin ...
- .NET微信公众号开发-3.0查询自定义菜单
一.前言 前面我们已经创建好了我们的自定义菜单.那么我们现在要如何查询我们自定义的菜单.原理都是一样的,而且都是相当简单,只是接口地址文档换掉了. 2.0开始编码 同样我们首先创建好我的查询页面,在这 ...
- 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示
1.前言 通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解. 微信公众号开发为企业解决那些问题呢? 我们经常看到微信公众号定制开发.微信公众平台定制开发,都不知道这些能给 ...
随机推荐
- MySQL 中 varchar 和 char 有什么区别?
MySQL 中 varchar 和 char 的区别 在 MySQL 中,VARCHAR 和 CHAR 是两种常用的字符串类型,它们在存储方式.长度限制和使用场景等方面存在显著区别. 1. 定义与存储 ...
- RK356X网口限速
1. 参考资料 Linux 上的虚拟网络接口,主要要了解一下 IFB,对输入的流量进行整形 https://lyyao09.github.io/2020/06/13/linux/An-introduc ...
- CSharp_base
C# 基础篇 枚举(enum) 枚举是一个被命名的整形常量的集合 用于表示: 状态 类型 申明枚举:创建一个自定义的枚举类型 申明枚举变量:使用申明的自定义的枚举类型,来创建一个枚举变量 语法 //语 ...
- asp.net里cookie、session进一步理解
参照: session+cookie简单讲解以及持久化登录实现_session实现用户登录_AkagiSenpai的博客-CSDN博客 sessionID和cookie - 哈哈呵h - 博客园 (c ...
- ESP32教程:通过WIFI控制LED灯的开关
LED闪烁 在通过WIFI控制LED灯的开关之前,我们先实现一下LED闪烁. 接线图: 来源:https://esp32io.com/tutorials/esp32-led-blink 我的接线图: ...
- 代码随想录第二十三天 | Leecode 39. 组合总和、40.组合总和II、131. 分割回文串
Leecode 39. 组合总和 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 ...
- spring boot迁移计划 第Ⅰ章 --chapter 1. rust hyper 结合rust nacos-client开发nacos网关 part ④ nacos-client
1. toml依赖 nacos_rust_client = "0.3" local_ipaddress = "0.1" ahash = "0.8&qu ...
- 代码视角-神经网络-Python 实现(上)
说明: 就是巩固一下认识而已, 也是找了篇网上大佬的文章, 看了下写得还行, 抄一抄, 权当编程练习了, 目的成为了, 从代码的角度去认识这些, 莫名其妙的, 让人生畏的, 但其实简单的, 生物学名词 ...
- DeepSeek+Coze实战:从0到1搭建小红书图文改写智能体(喂饭级教程)
大家好,我是汤师爷,专注AI智能体分享~ 还在为小红书笔记创作发愁吗? 每天都要绞尽脑汁想文案,看着别人的爆款笔记却不知道如何模仿? 今天,我就教你如何利用AI智能体,轻松实现小红书图文改写,让创作效 ...
- dify+MCP多应用,构建灵活的AI应用生态系统
一.概述 前面几篇文章写很多MCP应用,基本上一个dify工作流使用一个MCP应用. 那么一个dify工作流,同时使用多个MCP应用,是否可以呢?答案是可以的. 先来看一下效果图 说明: 这里使用了问 ...