在微信项目的开发的时候,经常需要对微信jssdk提供的接口进行调试,比如说录音, 分享 ,上传图像等接口,但是微信jssdk要求绑定安全域名才能使用其提供的一系列功能 , 而在开发环境中使用localhost或者本地ip无法完成域名的认证和绑定, 所以无法在本地调试 。当然有一种迫不得已方法 ,就是在本地开发完 ,打包发到公司的测试服务器上 ,利用测试服务器认证后的域名进行调试,每次改动,调试都要发一遍测试,显然这种方法非常麻烦且很不科学,所以这篇文章就针对这个问题介绍一下如何利用ngrok和express解决开发环境中微信接口的调试问题。
一:首先介绍一下ngrok,ngrok主要的功能就是将本地的ip映射到外网 ,并且分配给你一个可用的域名,通过这个域名可以让外网用户打开你的本地的web服务,使用起来也很简单,官网也有文档也有详细介绍 。这里简单的介绍一下使用方法,首先去ngrok 的官网下载ngrok的对应的客户端 ,并且注册用户 ,可以通过你的github账号或者google账号注册 ,注册完成后再个人中心打开auth选项,复制这里的authtoken,如下图:
(这里就以window版本为例),然后下载完成解压,会有一个ngrok.exe文件,双击运行会出现下面的命令行:
首先我们需要完成ngrok的token认证,否则运行会发生错误,运行一下命令
ngrok authtoken ***************** //*号就是个人中心中的token ,复制下来就可以了
认证完成后,就可以操作了,上图中的examples就是一些常用的示例命令,我们用到的就是ngrok http,后面接的参数就是你本地web服务的端口号,运行后会分配一个外网域名,通过这个域名就可以访问到你的本地web服务,
不过,这个域名在重启后就会重新分配一个新域名,导致重启后需要去微信公众平台重新设置一下安全域名和token认证 。比较遗憾的是在ngrok1.0的时候可以通过 ngrok http subdomain=***(自定义域名) 80 固定每次的分配的域名,但是在2.0版本后,免费用户无法固定域名,只有付费用户才可以,虽然每个月只需要$5,但是对于不是经常测试的人来说还是完全没有购买欲望,关键是好像只支持visaa......。不过对于想要免费固定域名的胖友来说,解决办法还是有的,国内有个sunny-ngrok ,可以免费申请一个自定义的固定域名 ,具体教程可以去其官网查看,也不是很复杂,有问题话可以在评论里面问我,就不详细讲了。当然想要实现外网映射的话还有很多其他方法,比如使用npm安装的Localtunnel和花生壳等等,可以自行了解一下。