原本於Day26打算利用Message API來完成LINE Bot功能,但發現Webhook需要搭配https,而且SSL從購買的價錢到設定的步驟我對新手沒有到非常友善,為了以完成功能為主採用另外一種方法來完成推播匯率的功能。
這次採用的是LINE Notification,一樣先利用LINE的帳號註冊登入,登入後於右上角點選個人頁面後點選發行權杖
權杖名稱自行設定一個想用的名字即可,接收通知的聊天室先選擇透過1對1聊天接收LINE Notify的通知
此時將此Token複製起來保存好,關閉之後就看不到Token要重新開一個權杖了。
接著開始程式的撰寫,先下指令創建一個Command
php artisan make:command lineNotification
參數設定
protected $signature = 'line:notification';
protected $description = 'Notification exchange rate by line';
接著點開發行權杖下方的LINE Notify API Document,看一下官方提供的API要怎麼操作
直接看到這隻APIPOST https://notify-api.line.me/api/notify
這邊是我覺得很重要的地方,官方有限定傳輸資料的格式
在Laravel的官方可以看到如果要傳出application/x-www-form-urlencoded格式的資料的話需要多一個asForm()
function,我自己實作時因為沒有注意到這項訊息所以卡關了一下。
接著於Command上方引入Http套件use Illuminate\Support\Facades\Http;
,於handle寫入邏輯。
$response = Http::withHeaders([
'Authorization' => 'Bearer ' . 'your token',
])
->asForm()
->post('https://notify-api.line.me/api/notify', [
'message' => 'test',
]);
withHeaders的地方要填寫權杖,Token的前方要加上Bearer ,不要忘記空白鍵一格
asForm是為了讓傳輸資料的格式變為application/x-www-form-urlencoded
接著將資料以POST method傳送至指定API
此時就可以下指令測試了php artisan line:notification
此時已經會收到通知了,所以開始來撰寫匯率的邏輯
篩選出最新一筆美金對台幣的匯率
$exchangeRate = ExchangeRate::select(
'exchange_rate',
'currency',
'created_at',
)
->where('currency', 'TWD')
->orderBy('created_at', 'DESC')
->first();
組合一下要傳送的字串
$message = '今日 USD 對 ' .
$exchangeRate->currency .
' 匯率為 ' .
$exchangeRate->exchange_rate .
' 更新時間 ' .
$exchangeRate->created_at;
替換要傳送的變數
->post('https://notify-api.line.me/api/notify', [
'message' => $message,
]);
此時再下一次指令php artisan line:notification
可以看到功能已經完成了
最後只要在Kernal加上定時推播即可,將時間訂在串接匯率API後的半小時,這樣就可獲得比較新的匯率
$schedule->command('line:notification')->dailyAt('08:30');
如此一來就完成了一開始想要的功能,一早起床打開手機就可以馬上獲得最新的匯率了。
今天的介紹就到這邊結束了,謝謝觀看的各位,請記得按讚分享開啟小鈴鐺,你的支持會讓按讚數+1。