我使用了自己的开源套件 LexLibrary.Line.NotifyBot,直接从 NuGet 就可以下载安装,节省了许多串接 API 时所需的开发与测试时间,只需安装套件后即可快速开发 Line Notify Bot!!
系列文章:
[C#][Line] 使用 Line Notify 开发讯息通知机器人 – 注册篇[C#][Line] 使用 Line Notify 开发讯息通知机器人 – 开发篇从 管理登录服务 找到刚刚我们注册的新项目,取得 Client ID 与 Client Secret打开
Startup.cs
找到 ConfigureServices
方法,并在这里新增下列程式码services.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。string callBackUrl = string.Format("{0}://{1}{2}", Request.Scheme, Request.Host, Url.Action("CallBack"));string clientAuthorizeUrl = _lineNotifyBotApi.GenerateAuthorizeUrl(callBackUrl, "1234");
※ 1234
这个参数可以拿来做 XSS 验证避免被攻击
4. 使用者授权完后 Line 会 CallBack 到上面定义好的网址,可以用 AuthorizeCallbackDTO
这个物件接收参数
public IActionResult CallBack(AuthorizeCallbackDTO callbackDTO){ // 可能是第三方攻击 if (callbackDTO.State != "1234") { return new UnauthorizedResult(); } return RedirectToAction("Index", new { callbackDTO.Code });}
利用 AuthorizeCallbackDTO.Code
的值去呼叫 LineNotifyBotApi.Token
,可以取得发送讯息给使用者的 AccessTokenvar apiResult = await _lineNotifyBotApi.Token(new TokenRequestDTO{ Code = code, RedirectUri = callBackUrl});ViewBag.AccessToken = apiResult.Access_Token;
取得 AccessToken 后就可以呼叫 LineNotifyBotApi.Notify
发送讯息给使用者啰!var apiResult = await _lineNotifyBotApi.Notify(new NotifyRequestDTO{ AccessToken = accessToken, Message = message});ViewBag.ResultJson = JsonConvert.SerializeObject(apiResult, Formatting.Indented);
7. 我有写一个简单的範例放到 GitHub 供给大家参考,有问题欢迎在下方留言给我。