<?php
namespace App\Controller;
use App\Service\RingCentral\RingCentralService;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class RingCentralWebhookController extends AbstractController
{
/**
* @Route("/ringcentral/webhook", name="ringcentral_webhook", methods={"GET", "POST"})
*/
public function webhook(Request $request, RingCentralService $ringCentralService, LoggerInterface $logger)
{
$zvigerVerificationToken = $request->headers->get('Verification-Token');
if ($zvigerVerificationToken !== $ringCentralService->getVerificationToken()) {
return new JsonResponse(['error' => 'Invalid verification token'], 403);
}
$eventData = $request->getContent();
// Webhook setup contains no event data but awaits for a validation token
if (!empty($eventData)) {
$webhookEventData = json_decode($request->getContent(), true);
$ringCentralService->processIncomingWebhook($webhookEventData);
}
$rcBaseValidationToken = $request->headers->get('Validation-Token');
return new JsonResponse(['status' => 'ok'], 200, ['Validation-Token' => $rcBaseValidationToken]);
}
}