Overview

Namespaces

  • LINE
    • LINEBot
      • Constant
      • Event
        • MessageEvent
        • Parser
      • Exception
      • HTTPClient
      • ImagemapActionBuilder
      • MessageBuilder
        • Imagemap
        • TemplateBuilder
      • TemplateActionBuilder

Classes

  • LINE\LINEBot
  • LINE\LINEBot\Constant\ActionType
  • LINE\LINEBot\Constant\EventSourceType
  • LINE\LINEBot\Constant\HTTPHeader
  • LINE\LINEBot\Constant\MessageType
  • LINE\LINEBot\Constant\Meta
  • LINE\LINEBot\Constant\TemplateType
  • LINE\LINEBot\Event\BaseEvent
  • LINE\LINEBot\Event\BeaconDetectionEvent
  • LINE\LINEBot\Event\FollowEvent
  • LINE\LINEBot\Event\JoinEvent
  • LINE\LINEBot\Event\LeaveEvent
  • LINE\LINEBot\Event\MessageEvent
  • LINE\LINEBot\Event\MessageEvent\AudioMessage
  • LINE\LINEBot\Event\MessageEvent\ImageMessage
  • LINE\LINEBot\Event\MessageEvent\LocationMessage
  • LINE\LINEBot\Event\MessageEvent\StickerMessage
  • LINE\LINEBot\Event\MessageEvent\TextMessage
  • LINE\LINEBot\Event\MessageEvent\VideoMessage
  • LINE\LINEBot\Event\Parser\EventRequestParser
  • LINE\LINEBot\Event\PostbackEvent
  • LINE\LINEBot\Event\UnfollowEvent
  • LINE\LINEBot\HTTPClient\Curl
  • LINE\LINEBot\HTTPClient\CurlHTTPClient
  • LINE\LINEBot\ImagemapActionBuilder\AreaBuilder
  • LINE\LINEBot\ImagemapActionBuilder\ImagemapMessageActionBuilder
  • LINE\LINEBot\ImagemapActionBuilder\ImagemapUriActionBuilder
  • LINE\LINEBot\MessageBuilder\AudioMessageBuilder
  • LINE\LINEBot\MessageBuilder\Imagemap\BaseSizeBuilder
  • LINE\LINEBot\MessageBuilder\ImagemapMessageBuilder
  • LINE\LINEBot\MessageBuilder\ImageMessageBuilder
  • LINE\LINEBot\MessageBuilder\LocationMessageBuilder
  • LINE\LINEBot\MessageBuilder\MultiMessageBuilder
  • LINE\LINEBot\MessageBuilder\StickerMessageBuilder
  • LINE\LINEBot\MessageBuilder\TemplateBuilder\ButtonTemplateBuilder
  • LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselColumnTemplateBuilder
  • LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselTemplateBuilder
  • LINE\LINEBot\MessageBuilder\TemplateBuilder\ConfirmTemplateBuilder
  • LINE\LINEBot\MessageBuilder\TemplateMessageBuilder
  • LINE\LINEBot\MessageBuilder\TextMessageBuilder
  • LINE\LINEBot\MessageBuilder\VideoMessageBuilder
  • LINE\LINEBot\Response
  • LINE\LINEBot\SignatureValidator
  • LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder
  • LINE\LINEBot\TemplateActionBuilder\PostbackTemplateActionBuilder
  • LINE\LINEBot\TemplateActionBuilder\UriTemplateActionBuilder

Interfaces

  • LINE\LINEBot\HTTPClient
  • LINE\LINEBot\ImagemapActionBuilder
  • LINE\LINEBot\MessageBuilder
  • LINE\LINEBot\MessageBuilder\TemplateBuilder
  • LINE\LINEBot\TemplateActionBuilder

Exceptions

  • LINE\LINEBot\Exception\CurlExecutionException
  • LINE\LINEBot\Exception\InvalidEventRequestException
  • LINE\LINEBot\Exception\InvalidEventSourceException
  • LINE\LINEBot\Exception\InvalidSignatureException
  • LINE\LINEBot\Exception\UnknownEventTypeException
  • LINE\LINEBot\Exception\UnknownMessageTypeException
  • Overview
  • Namespace
  • Class
  1: <?php
  2: 
  3: /**
  4:  * Copyright 2016 LINE Corporation
  5:  *
  6:  * LINE Corporation licenses this file to you under the Apache License,
  7:  * version 2.0 (the "License"); you may not use this file except in compliance
  8:  * with the License. You may obtain a copy of the License at:
  9:  *
 10:  *   https://www.apache.org/licenses/LICENSE-2.0
 11:  *
 12:  * Unless required by applicable law or agreed to in writing, software
 13:  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 14:  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 15:  * License for the specific language governing permissions and limitations
 16:  * under the License.
 17:  */
 18: 
 19: namespace LINE\LINEBot\Event\Parser;
 20: 
 21: use LINE\LINEBot\Event\MessageEvent;
 22: use LINE\LINEBot\Exception\InvalidEventRequestException;
 23: use LINE\LINEBot\Exception\InvalidSignatureException;
 24: use LINE\LINEBot\Exception\UnknownEventTypeException;
 25: use LINE\LINEBot\Exception\UnknownMessageTypeException;
 26: use LINE\LINEBot\SignatureValidator;
 27: 
 28: class EventRequestParser
 29: {
 30:     private static $eventType2class = [
 31:         'message' => 'LINE\LINEBot\Event\MessageEvent',
 32:         'follow' => 'LINE\LINEBot\Event\FollowEvent',
 33:         'unfollow' => 'LINE\LINEBot\Event\UnfollowEvent',
 34:         'join' => 'LINE\LINEBot\Event\JoinEvent',
 35:         'leave' => 'LINE\LINEBot\Event\LeaveEvent',
 36:         'postback' => 'LINE\LINEBot\Event\PostbackEvent',
 37:         'beacon' => 'LINE\LINEBot\Event\BeaconDetectionEvent',
 38:     ];
 39: 
 40:     private static $messageType2class = [
 41:         'text' => 'LINE\LINEBot\Event\MessageEvent\TextMessage',
 42:         'image' => 'LINE\LINEBot\Event\MessageEvent\ImageMessage',
 43:         'video' => 'LINE\LINEBot\Event\MessageEvent\VideoMessage',
 44:         'audio' => 'LINE\LINEBot\Event\MessageEvent\AudioMessage',
 45:         'location' => 'LINE\LINEBot\Event\MessageEvent\LocationMessage',
 46:         'sticker' => 'LINE\LINEBot\Event\MessageEvent\StickerMessage',
 47:     ];
 48: 
 49:     /**
 50:      * @param string $body
 51:      * @param string $channelSecret
 52:      * @param string $signature
 53:      * @return \LINE\LINEBot\Event\BaseEvent[] array
 54:      * @throws InvalidEventRequestException
 55:      * @throws InvalidSignatureException
 56:      * @throws UnknownEventTypeException
 57:      */
 58:     public static function parseEventRequest($body, $channelSecret, $signature)
 59:     {
 60:         if (!isset($signature)) {
 61:             throw new InvalidSignatureException('Request does not contain signature');
 62:         }
 63: 
 64:         if (!SignatureValidator::validateSignature($body, $channelSecret, $signature)) {
 65:             throw new InvalidSignatureException('Invalid signature has given');
 66:         }
 67: 
 68:         $events = [];
 69: 
 70:         $parsedReq = json_decode($body, true);
 71:         if (!array_key_exists('events', $parsedReq)) {
 72:             throw new InvalidEventRequestException();
 73:         }
 74: 
 75:         foreach ($parsedReq['events'] as $eventData) {
 76:             $eventType = $eventData['type'];
 77:             $eventClass = self::$eventType2class[$eventType];
 78:             if (!isset($eventClass)) {
 79:                 throw new UnknownEventTypeException('Unknown event type has come: ' . $eventType);
 80:             }
 81: 
 82:             if ($eventType === 'message') {
 83:                 $events[] = self::parseMessageEvent($eventData);
 84:                 continue;
 85:             }
 86: 
 87:             $events[] = new $eventClass($eventData);
 88:         }
 89: 
 90:         return $events;
 91:     }
 92: 
 93:     /**
 94:      * @param array $eventData
 95:      * @return MessageEvent|object
 96:      * @throws UnknownMessageTypeException
 97:      */
 98:     private static function parseMessageEvent($eventData)
 99:     {
100:         $messageType = $eventData['message']['type'];
101:         $messageClass = self::$messageType2class[$messageType];
102:         if (!isset($messageClass)) {
103:             throw new UnknownMessageTypeException('Unknown message type has come: ' . $messageType);
104:         }
105:         return new $messageClass($eventData);
106:     }
107: }
108: 
line-bot-sdk-php API documentation generated by ApiGen