1. 程式人生 > >本地除錯微信介面(內網穿透到外網)

本地除錯微信介面(內網穿透到外網)

在做微信開發的時候,呼叫微信介面成功之後,微信會回撥我們事先配置好的一個介面。由於微信的服務是在外網的,所以這個回撥介面也只能是外網,而且微信要求回撥介面只能是通過ICP備案的域名,不能使用IP。所以在開發除錯的時候,需要把程式碼部署到線上的伺服器,通過打log來跟蹤介面呼叫情況,很明顯這樣開發效率非常低。下面介紹兩款工具(natappsunny-ngrok)來解決這個問題,將本機的IP和埠對映到外網指定的域名下,通過訪問對映的外網域名就可以直接訪問到本機的服務。

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

1> 首先在官網下載natapp客戶端

客戶端下載
解壓後得到一個natapp/natapp.exe執行程式,Linux/Mac 系統 需要 新增執行許可權:chmod a+x natapp

2> 執行

開啟終端,在命令列中直接執行./natapp即可。執行成功後會進入如下介面:
natapp
從上圖中可以看出,轉發那行顯示了外網域名到本機的埠對映關係。在外網訪問http://3c8db5aa.ngrok.natapp.cn就可以將請求轉發到本地80埠對應的服務上了。當然你需要在本機裝一個監聽80埠的web服務,比如:nginx、apache、iis。如果你是用Tomcat等應用伺服器,埠也不是80的話,需要在nginx上再做一個反向代理配置,轉換到tomcat對應的埠上。

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

通過以上的操作,就完成了外網訪問本機服務的工作。

3> 指定對映埠

natapp預設只能對映本機的80埠,如果要對映到指定埠,你需要在natapp官網註冊一個帳號,併購買一個免費或收費的隧道,來配置對映到指定的埠上。操作流程如下圖所示:
購買隧道
購買免費隧道

將本地埠修改成你需要對映的埠號,點選免費購買後回到我的隧道列表中,複製authtoken列對應的值。

隧道列表

執行:./natapp -authtoken=xxxxxx即可在控制檯看到剛剛配置的自定義埠和域名的對映資訊。如下圖所示:

但是免費的隧道有幾點限制:
1> 域名是natapp隨機生成的
2> 每個協議只能購買一個隧道,即每個協議只能對映一個埠
3> 只能對映一條隧道(一個轉發域名)(sunny-ngrok可以對映多條隧道)
但也已經夠用了,不是嗎?

說了這麼多,你應該知道怎麼除錯微信介面了吧? 只需要將natapp隨機生成的域名,配置到微信的回撥引數配置中即可。因為ngrok.natapp.cn域名是通過了ICP備案的,所以natapp隨機生成的三級域名在微信當中都是可以通過驗證的。

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用逗號分隔。效果如下圖所示:
這裡寫圖片描述

這裡寫圖片描述

3、小結

sunny-ngrok:

1> 完全免費
2> 可以定義多條隧道
3> 可以完全自定義域名
4> 需要自己申請域名並備案(算是一個缺點吧)

natapp:

1> 基本免費,高階功能收費(如自定義域名)
2> 免費版每個協議只能申請一條隧道
3> 域名隨機生成,不能完全自定義域名。收費版也只能修改域名的字首
4> 不需要單獨申請域名(優點)
5> 執行簡單,下載執行程式直接執行即可,預設監聽80埠。如果要監聽其它埠,沒有註冊帳號的前提下,需要用web伺服器做反向代理