charles 代理本地调试微信公众号
在微信内置浏览器中使用微信JS SDK,可以使用微信提供的功能,例如设置分享链接的标题和图片、调起微信支付、打开扫一扫等等。 根据官方文档,前端在使用微信的接口前要先进行配置,如下:
wx.config({
debug: true, // 调试模式
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表
});
为什么要用到charles代理来本地调试?
配置信息得从后端获取,后端在计算
signature时需要前端传入当前页面的URL。开发者要在公众平台设置JS SDK安全域名,在这个域名下才能使用微信JS SDK。也就是说调用JS SDK一共有2个条件:1. 在微信内置浏览器访问,或者在电脑端的微信开发者工具;2. 在指定域名下访问。
所以,只有在微信公众号中的添加的js安全域名,在可以使用使用授权,分享等JSDK。但是我们平常开发阶段,要么就是一个本地的静态 Html 文件,或者是使用的是一些框架通过npm run dev启动的一些服务,亦或者是通过其他例如vscode的live serve ,http-serve等工具启动的一些本地服务,这些文件路径或者本地服务ip不是公众号中配置的安全域名,在做安全校验的时候,是无法通过服务端的签名校验的,所以,必须通过代理的方式绕过安全校验,而charles针对这些情况都可以应对,以下几种方式都可以实现本地调试。
Map Local 代理
是将某个网络请求重定向到本地的某个文件或者文件夹
- 开启
Windows Proxy选项
-
Tools > Map Local > 勾选
Enable Map Local选项 -
填写代理信息
如何填写这里的信息,用一个简单的例子来说明:假如某个页面线上的访问地址(添加了JS安全域名)是:http://shop.zhuoyou.com/app_v1/lunch/index.html,则配置信息如下:
- Protocol:协议类型,https, http 或者为空,一般不填也可以。
- Host:域名(需要填写的是JS安全域名)
- Port:端口号
- Path: 路径,可以以
**/*的形式填写 - Query:参数
- Local Path:本地所在的目录,文件夹或者文件都可以
-
微信开发中工具 设置代理
设置 > 代理设置 > 手动设置代理,填入本地 ip 或者
127.0.0.1端口:8888charles默认端口是8888,如果做了修改,则保持一致即可。 -
访问页面
在微信开发者工具输入地址,http://shop.zhuoyou.com/app_v1/lunchApp/index.html 就可以本地使用开发者工具调试公众号的开发了。
也可以通过charles的面板工具可以看到,当访问url的时候,其实是访问的本地的文件。
- 手机上访问
在开发者工具中也只能模拟一些JSDK的一些方法,有时候需要真机上调试,就需要在手机上也设置代理
- 手机WIFI必须和电脑在同一个网络
- WIFI 设置代理,手动,填入电脑的ip地址:端口8888
然后,点击开发者工具上的预览,生成二维码,即可手机上访问。
::: tip
通过踩坑,通过链接地址的形式访问页面,有些时候很多jsApi会失败,最好已二维码的形式访问,或者链接地址收藏,通过收藏夹访问。
:::
Map Remote 代理
是将某个网络请求重定向到另一个网络请求。
-
开启
Windows Proxy选项 -
Tools > Map Remote> 勾选
Enable Map Remote选项 -
填写代理信息
如何填写这里的信息,用一个简单的例子来说明:假如本地起的服务是:localhost:3000
- Map To:本地所起的服务,端口号也是本地服务对应的端口号
- Map From:线上地址,Protocol可以不填,只要域名命中就可以代理。根据线上实际情况配置即可
- 微信开发中工具 设置代理
设置 > 代理设置 > 手动设置代理,填入本地 ip 或者 127.0.0.1 端口:8888
charles 默认端口是8888,如果做了修改,则保持一致即可。
- 访问页面
在微信开发者工具输入地址,http://shop.zhuoyou.com/ 就代理到本地的localhost:3000的服务了,可以本地使用开发者工具调试公众号的开发了。
查看charles工具可以看到代理已经成功。
- 手机上访问
在开发者工具中也只能模拟一些JSDK的一些方法,有时候需要真机上调试,就需要在手机上也设置代理
- 手机WIFI必须和电脑在同一个网络
- WIFI 设置代理,手动,填入电脑的ip地址:端口8888
其他方式
也可以通过修改本地host文件的方式处理
- 修改host文件,将域名映射到127.0.0.1 IP地址
127.0.0.1 shop.zhuoyou.com
2. 开发者工具中 访问htpp://shop.zhuoyou.com:3000,如果本地服务的端口是80,则可以不填了。
3. 手机访问
通过上面2步,其实开发工具其实已经是可以正常访问了,不需要开发者工具设置任何代理,也不需要开启charles,但是如果手机上需要访问,则需要开启charles即可。
vite启用host代理,自动刷新问题
本地使用了charles代理,会发现会进行无效的刷新,解决方案: 在vite.config的配置中
server: {
host: '0.0.0.0',
open: true,
proxy: {
......
// 加上这个,可以解决
hmr: {
protocol: 'ws',
host: '127.0.0.1'
}
},
charles下载以及安装
- 解压charles.rar > charles-proxy-4.1.4-win64.msi安装
- 安装之后,再使用jar,去破解,更新lib下的jar就可以