iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 2
1
自我挑戰組

用 laravel 尻出自己形狀的 line bot,還要撐三十天!系列 第 2

【第二天】蛤!? 怎麼這麼麻煩!

【第二天】蛤!? 怎麼這麼麻煩!

一個起手就離題
今天才發現昨天沒跟大家自我介紹一下報名動機,今天補上一張人權圖。
https://ithelp.ithome.com.tw/upload/images/20171207/20107380uW4r0nukzf.png

相信大家在昨天精簡扼要的說明之下已經佈署好自己的專案環境了,如果失敗的話可以再第一天的文章底下留言喔!
或著有什麼你踩到比較特別的雷,也解好願意分享給大家的都可以分享在底下!

進入今天正題之前咧,先吃我的文件連彈吧!

別慌!

首先你要先辦一個 LINE的官方帳號,這種瑣碎的事情不難,但要講好很難,所以就看這裡吧!
應該不難申請,有一些簡單的小功能也可以直接在後台的介面玩玩看!

傳說~只要一個月發送訊息超過1000,第1001封開始訊息就會被馬爾札哈養的小怪獸吃掉再也收不到!

這好像是不付費者的詛咒之一吧!

如果你已經辦好你的帳號,那就可以打開你的專案,來開始研究吧!

我們先從 推送訊息 開始看起,看我的影子模仿術

看!我把這頁面模仿出來了ㄝ
https://ithelp.ithome.com.tw/upload/images/20171207/20107380gciEgIJy2U.png

來自己去尋寶看看吧!順便看看文件熟悉下他在幹嘛!
https://ithelp.ithome.com.tw/upload/images/20171207/20107380N57sVFOr62.png

解答在這
https://ithelp.ithome.com.tw/upload/images/20171207/20107380ovFkIMObsp.png

剩下兩個就一樣用ctrl F 搜尋 Channel access tokenChannel secretYour user ID
然後在你專案的 .env 貼上去,千萬不要貼在 .env.example 喔!不然就傻傻把東西送上火星github了!

LINEBOT_TOKEN=<Channel access token>
LINEBOT_SECRET=<Channel secret>
LINE_USER_ID=<Your user ID>

也要記得在 heroku的專案設定裡加入喔!
https://ithelp.ithome.com.tw/upload/images/20171207/20107380cnTs5q9qgv.png

接下來我們可以看一下LINEBot.php到底在賣什麼挖溝!
靠這麼多東西我是要看什麼!
沒關係,先從這裡看起
LINEBot.php

namespace LINE;

(...略)

    /**
     * LINEBot constructor.
     *
     * @param HTTPClient $httpClient HTTP client instance to use API calling.
     * @param array $args Configurations.
     */
    public function __construct(HTTPClient $httpClient, array $args)
    {
        $this->httpClient = $httpClient;
        $this->channelSecret = $args['channelSecret'];

        $this->endpointBase = LINEBot::DEFAULT_ENDPOINT_BASE;
        if (array_key_exists('endpointBase', $args) && !empty($args['endpointBase'])) {
            $this->endpointBase = $args['endpointBase'];
        }
    }

接著可以知道他要塞一個 HTTPClient 的介面給他!
LINEBot.php

namespace LINE\LINEBot;

(...略)
interface HTTPClient
{
    (...略)
}

有想法了嗎?沒有的話在回頭看一下文件吧!
https://ithelp.ithome.com.tw/upload/images/20171207/20107380VvqiqFtFCC.png

啊!想出來了!
原來是要這樣子組合的!
所以我們就可以繃出這樣子的 provider
連結

    public function register()
    {
        $this->lineBotRegister();
    }

    private function lineBotRegister()
    {
        $this->app->singleton(LINEBot::class, function () {
            $httpClient = new CurlHTTPClient(env('LINEBOT_TOKEN'));
            return new LINEBot($httpClient, ['channelSecret' => env('LINEBOT_SECRET')]);
        });
    }

這樣之後就可以直接透過IOC的方式把它拿來用了 參考一 參考二

    /** @var LINEBot */
    private $lineBot;
    private $lineUserId;

    public function __construct($lineUserId)
    {
        $this->lineUserId = $lineUserId;
        $this->lineBot = app(LINEBot::class);
    }

好吧~今天時間不夠了,明天星期五,就來點輕鬆的小話題吧!
下個主題就講講我想要做些什麼好了!


上一篇
【第一天】萬事起頭難,這篇就來做環境吧!
下一篇
【第三天】今天星期五,就來說故事吧!
系列文
用 laravel 尻出自己形狀的 line bot,還要撐三十天!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言