| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- <?php
- /*
- * This file is part of the overtrue/wechat.
- *
- * (c) overtrue <i@overtrue.me>
- *
- * This source file is subject to the MIT license that is bundled
- * with this source code in the file LICENSE.
- */
- /**
- * Guard.php.
- *
- * Part of Overtrue\WeChat.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @author mingyoung <mingyoungcheung@gmail.com>
- * @author lixiao <leonlx126@gmail.com>
- * @copyright 2016
- *
- * @see https://github.com/overtrue
- * @see http://overtrue.me
- */
- namespace EasyWeChat\OpenPlatform;
- use EasyWeChat\Server\Guard as ServerGuard;
- use EasyWeChat\Support\Collection;
- use EasyWeChat\Support\Log;
- use Symfony\Component\HttpFoundation\Response;
- class Guard extends ServerGuard
- {
- const EVENT_AUTHORIZED = 'authorized';
- const EVENT_UNAUTHORIZED = 'unauthorized';
- const EVENT_UPDATE_AUTHORIZED = 'updateauthorized';
- const EVENT_COMPONENT_VERIFY_TICKET = 'component_verify_ticket';
- /**
- * Event handlers.
- *
- * @var \EasyWeChat\Support\Collection
- */
- protected $handlers;
- /**
- * Set handlers.
- *
- * @param array $handlers
- */
- public function setHandlers(array $handlers)
- {
- $this->handlers = new Collection($handlers);
- return $this;
- }
- /**
- * Get handlers.
- *
- * @return \EasyWeChat\Support\Collection
- */
- public function getHandlers()
- {
- return $this->handlers;
- }
- /**
- * Get handler.
- *
- * @param string $type
- *
- * @return \EasyWeChat\OpenPlatform\EventHandlers\EventHandler|null
- */
- public function getHandler($type)
- {
- return $this->handlers->get($type);
- }
- /**
- * {@inheritdoc}
- */
- public function serve()
- {
- $message = $this->getMessage();
- // Handle Messages.
- if (isset($message['MsgType'])) {
- return parent::serve();
- }
- Log::debug('OpenPlatform Request received:', [
- 'Method' => $this->request->getMethod(),
- 'URI' => $this->request->getRequestUri(),
- 'Query' => $this->request->getQueryString(),
- 'Protocal' => $this->request->server->get('SERVER_PROTOCOL'),
- 'Content' => $this->request->getContent(),
- ]);
- // If sees the `auth_code` query parameter in the url, that is,
- // authorization is successful and it calls back, meanwhile, an
- // `authorized` event, which also includes the auth code, is sent
- // from WeChat, and that event will be handled.
- if ($this->request->get('auth_code')) {
- return new Response(self::SUCCESS_EMPTY_RESPONSE);
- }
- $this->handleEventMessage($message);
- return new Response(self::SUCCESS_EMPTY_RESPONSE);
- }
- /**
- * Handle event message.
- *
- * @param array $message
- */
- protected function handleEventMessage(array $message)
- {
- Log::debug('OpenPlatform Event Message detail:', $message);
- $message = new Collection($message);
- $infoType = $message->get('InfoType');
- if ($handler = $this->getHandler($infoType)) {
- $handler->handle($message);
- } else {
- Log::notice("No existing handler for '{$infoType}'.");
- }
- if ($messageHandler = $this->getMessageHandler()) {
- call_user_func_array($messageHandler, [$message]);
- }
- }
- }
|