做微信小程序开发,免不了要调试接口。本地写完代码,想让手机连上测试,结果发现小程序要求 HTTPS,而且域名还得备案,本地 HTTP 根本跑不起来。更麻烦的是,手机不在同一个局域网,连你电脑都连不上。这时候就得靠内网穿透来解决。
为什么小程序开发需要内网穿透
微信小程序在开发阶段就要求所有网络请求必须走 HTTPS 协议,且域名需在后台配置。本地服务通常是 http://localhost:3000 这种形式,外网访问不了。即使你在局域网里用 IP 地址共享,一旦离开这个网络,比如回家或换咖啡厅,测试就断了。
内网穿透就是把本地的服务映射到一个公网可访问的地址,比如 https://dev-api.yourname.com,这个地址背后其实连的是你电脑上的 127.0.0.1:8080。这样一来,不管在哪,只要能联网,就能调你的接口。
实际场景:在家联调支付功能
比如你在开发一个商城小程序,要对接微信支付。支付回调必须是公网 URL,否则微信服务器根本通知不到你。你不可能每次改点代码就上传到云服务器,太慢。这时候用内网穿透工具,把本地的 /pay/callback 接口暴露出去,填进微信商户平台,调试起来就顺多了。
怎么搭一套可用的穿透环境
常用工具像 frp、ngrok、cpolar 都可以。以 cpolar 为例,注册后下载客户端,运行一条命令就行:
cpolar http 8080
它会返回一个类似 https://abcd1234.ngrok.io 的地址,自动配好 HTTPS。把这个域名加到小程序管理后台的 request 合法域名里,前端就能通过这个地址请求你本地的接口。
如果你用的是 Express 或 Koa 搭的本地服务,确保启动时监听 0.0.0.0 而不是 127.0.0.1,不然外部设备还是连不进来。
app.listen(8080, '0.0.0.0', () => {
console.log('Server running on port 8080');
});
避免踩坑的小建议
有些工具免费版分配的域名会变,每次重启客户端都要去小程序后台更新,很烦。可以买个固定域名套餐,或者自己搭 frp 服务器,绑定自己的域名。
另外,别忘了小程序的登录流程也依赖网络。wx.login 获取的 code 要发给后端换 openid,这一步如果后端接口不通,登录直接卡住。提前把 login 接口透出去,省得后面一堆问题堆在一起。
开发阶段追求的是快速验证,不是一步到位上线。用好内网穿透,等于给自己搭了个临时外网出口,改代码、测接口、看数据,一气呵成。