上一篇文章:[C#][Line] 使用 Line Notify 開發訊息通知機器人 – 註冊篇
我使用了自己的開源套件 LexLibrary.Line.NotifyBot,直接從 NuGet 就可以下載安裝,節省了許多串接 API 時所需的開發與測試時間,只需安裝套件後即可快速開發 Line Notify Bot!!
- 從 管理登錄服務 找到剛剛我們註冊的新項目,取得
Client ID
與Client Secret
- 打開
Startup.cs
找到ConfigureServices
方法,並在這裡新增下列程式碼
12345678910111213services.AddLogging();services.AddHttpClient();services.AddLineNotifyBot(new LineNotifyBotSetting{ClientID = "",ClientSecret = "",AuthorizeApi = "https://notify-bot.line.me/oauth/authorize",TokenApi = "https://notify-bot.line.me/oauth/token",NotifyApi = "https://notify-api.line.me/api/notify",StatusApi = "https://notify-api.line.me/api/status",RevokeApi = "https://notify-api.line.me/api/revoke"}); - 接著需要使用 Client Redirect 的方式讓使用者登入 Line 並授權給系統權限,我已經在套件裡面封裝好方法了,只要使用
LineNotifyBotApi.GenerateAuthorizeUrl
即可取得 Redirect Url。
12string callBackUrl = string.Format("{0}://{1}{2}", Request.Scheme, Request.Host, Url.Action("CallBack"));string clientAuthorizeUrl = _lineNotifyBotApi.GenerateAuthorizeUrl(callBackUrl, "1234");
※1234
這個參數可以拿來做 XSS 驗證避免被攻擊 - 使用者授權完後 Line 會 CallBack 到上面定義好的網址,可以用
AuthorizeCallbackDTO
這個物件接收參數
12345678910public IActionResult CallBack(AuthorizeCallbackDTO callbackDTO){// 可能是第三方攻擊if (callbackDTO.State != "1234"){return new UnauthorizedResult();}return RedirectToAction("Index", new { callbackDTO.Code });} - 利用
AuthorizeCallbackDTO.Code
的值去呼叫LineNotifyBotApi.Token
,可以取得發送訊息給使用者的 AccessToken
1234567var apiResult = await _lineNotifyBotApi.Token(new TokenRequestDTO{Code = code,RedirectUri = callBackUrl});ViewBag.AccessToken = apiResult.Access_Token; - 取得 AccessToken 後就可以呼叫
LineNotifyBotApi.Notify
發送訊息給使用者囉!
1234567var apiResult = await _lineNotifyBotApi.Notify(new NotifyRequestDTO{AccessToken = accessToken,Message = message});ViewBag.ResultJson = JsonConvert.SerializeObject(apiResult, Formatting.Indented);
- 我有寫一個簡單的範例放到 GitHub 供給大家參考,有問題歡迎在下方留言給我。