Ngrok 是一個反向代理軟體,啟動後會在公共伺服器和本地客戶端之間建立一個通道,並由公共伺服器分配一個唯一的域名給這個通道。在 Homestead 中執行 Ngrok 之後,通過公共伺服器分配的域名就可以在公網訪問到 Homestead 中的站點,從而讓支付寶和微信支付的伺服器直接將回撥資料傳送到對應的回撥介面。
註冊 Ngrok 賬號
Ngrok 官方提供了免費的公共伺服器,但需要註冊才能使用,訪問這個 連結 註冊。
Ps: 可以點選註冊頁面下方的 Github 註冊按鈕,可以直接註冊成功。
Homestead 配置 Ngrok 客戶端
Homestead 中內建了 Ngrok 客戶端,但需要配置 Token 之後才能正常使用。
Ngrok 註冊完成之後會進入這個頁面:
複製這個框裡的命令,但不需要開頭的 ./,然後在 Homestead 中貼上執行:
ngrok authtoken {你的 Token}
啟動 Ngrok 客戶端
接下來我們需要在 Homestead 中啟動 Ngrok 客戶端以建立本地與公共伺服器的連結:
ngrok http -host-header=shop.test -region us 80
http
代表我們要對映的是 HTTP 協議;-host-header=
代表本地站點的域名,如果你用的不是 shop.test
請更換成對應的域名;-region us
代表我們要使用的是美國的公共節點;80
代表對映到 Homestead 的 80 埠。
執行之後應該可以看到如下介面:
Forwarding
代表 Ngrok 分配給你的域名,對於免費賬號來說,每次啟動 Ngrok ,都會重新分配一個隨機的域名,無法固定。
Web Interface
是 Ngrok 內建的一個管理皮膚,它可以展示所有通過 Ngrok 進來的請求資訊以及返回的資料,現在我們可以訪問一下 http://192.168.10.10:4040 看看。
在 Laravel Shop 中使用
接下來我們來調整一下我們的程式碼。
首先我們把 Ngrok 分配的隨機域名放到 .env
檔案中:
.env
.
.
.
NGROK_URL=http://{分配給你的域名}.ngrok.io
然後在配置檔案中讀取:
config/app.php
.
.
.
'ngrok_url' => env('NGROK_URL'),
];
為了方便呼叫,我們在 helpers.php 中新建一個函式:
bootstrap/helpers.php
.
.
.
function ngrok_url($routeName, $parameters = [])
{
// 開發環境,並且配置了 NGROK_URL
if(app()->environment('local') && $url = config('app.ngrok_url')) {
// route() 函式第三個引數代表是否絕對路徑
return $url.route($routeName, $parameters, false);
}
return route($routeName, $parameters);
}
現在可以直接在需要的地方呼叫即可,如:ngrok_url('products.index')。'products.index' 為路由名稱。
本文只是為了學習和方便查詢而做的記錄。