本地调试微信接口(内网穿透到外网)(公网访问局域网程序)

时间:2024-02-21 17:08:08

 

  在做微信开发的时候,调用微信接口成功之后,微信会回调我们事先配置好的一个接口。由于微信的服务是在外网的,所以这个回调接口也只能是外网,而且微信要求回调接口只能是通过ICP备案的域名,不能使用IP。所以在开发调试的时候,需要把代码部署到线上的服务器,通过打log来跟踪接口调用情况,很明显这样开发效率非常低。下面介绍两款工具(natapp和sunny-ngrok)来解决这个问题,将本机的IP和端口映射到外网指定的域名下,通过访问映射的外网域名就可以直接访问到本机的服务。

 

1、natapp(免费/收费模式)

1> 首先在官网下载natapp客户端

解压后得到一个natapp/natapp.exe执行程序,Linux/Mac 系统 需要 添加执行权限:chmod a+x natapp

2> 运行
打开终端,在命令行中直接运行./natapp即可。运行成功后会进入如下界面:

从上图中可以看出,转发那行显示了外网域名到本机的端口映射关系。在外网访问http://3c8db5aa.ngrok.natapp.cn就可以将请求转发到本地80端口对应的服务上了。当然你需要在本机装一个监听80端口的web服务,比如:nginx、apache、iis。如果你是用Tomcat等应用服务器,端口也不是80的话,需要在nginx上再做一个反向代理配置,转换到tomcat对应的端口上。

location / {
  proxy_pass http://localhost:8080;
}

访问http://127.0.0.1:4040可以监控请求路径、请求头和响应头等日志信息。

通过以上的操作,就完成了外网访问本机服务的工作。

3> 指定映射端口
natapp默认只能映射本机的80端口,如果要映射到指定端口,你需要在natapp官网注册一个帐号,并购买一个免费或收费的隧道,来配置映射到指定的端口上。操作流程如下图所示:


将本地端口修改成你需要映射的端口号,点击免费购买后回到我的隧道列表中,复制authtoken列对应的值。

运行:./natapp -authtoken=xxxxxx即可在控制台看到刚刚配置的自定义端口和域名的映射信息。如下图所示:

通过http://3c8db5aa.ngrok.natapp.cn/jingtong地址就可以访问到我本机8080端口tomcat部署的应用 jingtong 了。如下图所示:


但是免费的隧道有几点限制:
1> 域名是natapp随机生成的
2> 每个协议只能购买一个隧道,即每个协议只能映射一个端口
3> 只能映射一条隧道(一个转发域名)(sunny-ngrok可以映射多条隧道)
但也已经够用了,不是吗?

说了这么多,你应该知道怎么调试微信接口了吧? 只需要将natapp随机生成的域名,配置到微信的回调参数配置中即可。因为ngrok.natapp.cn域名是通过了ICP备案的,所以natapp随机生成的三级域名在微信当中都是可以通过验证的。

 

2、sunny-ngrok(完全免费模式)

sunny-ngrok配置稍微麻烦一点,需要有自己的域名。

1> 在sunny-ngrok注册一个帐号
2> 添加隧道
登录个人中心,新增一条隧道

 

参数解读:
隧道协议:支持http、https、tcp端口转发
隧道名称:名字随意
http域名类型:选择自定义
域名或远程端口:填写自己的在外网访问的域名
本地地址:本机IP或127.0.0.1
本地端口:本机web服务的端口
http验证用户名和http验证密码:访问域名时用户名密码校验,如果不需要校验可以不填


3> 自定义域名解析到server.ngrok.cc
需要将自定义的域名在域名管理服务商,将自定义域名用CNAME类型解析到server.ngrok.cc,才能提供服务。

4> 发布内网服务到外网
从隧道列表中,拷贝刚刚创建的客户端ID,执行:./sunny clientid 客户端ID1,客户端ID2,多个客户端ID用逗号分隔。效果如下图所示:

访问http://weixin.digi-zones.com效果,和natapp访问的效果一致。如下图所示:

 

3、小结

sunny-ngrok:

1> 完全免费
2> 可以定义多条隧道
3> 可以完全自定义域名
4> 需要自己申请域名并备案(算是一个缺点吧)

natapp:

1> 基本免费,高级功能收费(如自定义域名)
2> 免费版每个协议只能申请一条隧道
3> 域名随机生成,不能完全自定义域名。收费版也只能修改域名的前缀
4> 不需要单独申请域名(优点)
5> 运行简单,下载执行程序直接运行即可,默认监听80端口。如果要监听其它端口,没有注册帐号的前提下,需要用web服务器做反向代理

原文链接:http://blog.csdn.net/xyang81/article/details/52141881