SUCCESS_EMPTY_RESPONSE
SUCCESS_EMPTY_RESPONSE = 'success'
Empty string.
Class Guard.
$request : \Symfony\Component\HttpFoundation\Request
$encryptor : \EasyWeChat\Encryption\Encryptor
$handlers : \EasyWeChat\Support\Collection
Event handlers.
__construct(string $token, \Symfony\Component\HttpFoundation\Request $request = null)
Constructor.
string | $token | |
\Symfony\Component\HttpFoundation\Request | $request |
serve() : \Symfony\Component\HttpFoundation\Response
Handle and return response.
setMessageHandler(callable $callback = null, integer $option = self::ALL_MSG) : \EasyWeChat\Server\Guard
Add a event listener.
callable | $callback | |
integer | $option |
getRequest() : \Symfony\Component\HttpFoundation\Request
Request getter.
setRequest(\Symfony\Component\HttpFoundation\Request $request) : $this
Request setter.
\Symfony\Component\HttpFoundation\Request | $request |
setEncryptor(\EasyWeChat\Encryption\Encryptor $encryptor) : \EasyWeChat\Server\Guard
Set Encryptor.
\EasyWeChat\Encryption\Encryptor | $encryptor |
getEncryptor() : \EasyWeChat\Encryption\Encryptor
Return the encryptor instance.
getHandlers() : \EasyWeChat\Support\Collection
Get handlers.
getHandler(string $type) : \EasyWeChat\OpenPlatform\EventHandlers\EventHandler|null
Get handler.
string | $type |
buildReply(string $to, string $from, \EasyWeChat\Message\AbstractMessage $message) : string
Build reply XML.
string | $to | |
string | $from | |
\EasyWeChat\Message\AbstractMessage | $message |
<?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]);
}
}
}