forked from line/line-bot-sdk-php
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Route.php
79 lines (69 loc) · 2.91 KB
/
Route.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
/**
* Copyright 2016 LINE Corporation
*
* LINE Corporation licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
namespace LINE\LINEBot\EchoBot;
use LINE\LINEBot;
use LINE\LINEBot\Constant\HTTPHeader;
use LINE\LINEBot\Event\MessageEvent;
use LINE\LINEBot\Event\MessageEvent\TextMessage;
use LINE\LINEBot\Exception\InvalidEventRequestException;
use LINE\LINEBot\Exception\InvalidSignatureException;
use LINE\LINEBot\Exception\UnknownEventTypeException;
use LINE\LINEBot\Exception\UnknownMessageTypeException;
class Route
{
public function register(\Slim\App $app)
{
$app->post('/callback', function (\Slim\Http\Request $req, \Slim\Http\Response $res) {
/** @var \LINE\LINEBot $bot */
$bot = $this->bot;
/** @var \Monolog\Logger $logger */
$logger = $this->logger;
$signature = $req->getHeader(HTTPHeader::LINE_SIGNATURE);
if (empty($signature)) {
return $res->withStatus(400, 'Bad Request');
}
// Check request with signature and parse request
try {
$events = $bot->parseEventRequest($req->getBody(), $signature[0]);
} catch (InvalidSignatureException $e) {
return $res->withStatus(400, 'Invalid signature');
} catch (UnknownEventTypeException $e) {
return $res->withStatus(400, 'Unknown event type has come');
} catch (UnknownMessageTypeException $e) {
return $res->withStatus(400, 'Unknown message type has come');
} catch (InvalidEventRequestException $e) {
return $res->withStatus(400, "Invalid event request");
}
foreach ($events as $event) {
if (!($event instanceof MessageEvent)) {
$logger->info('Non message event has come');
continue;
}
if (!($event instanceof TextMessage)) {
$logger->info('Non text message has come');
continue;
}
$replyText = $event->getText();
$logger->info('Reply text: ' . $replyText);
$resp = $bot->replyText($event->getReplyToken(), $replyText);
$logger->info($resp->getHTTPStatus() . ': ' . $resp->getRawBody());
}
$res->write('OK');
return $res;
});
}
}