logger = $logger; $this->container = $container; } public function webhook() { \Stripe\Stripe::setApiKey($this->container->getParameter('stripe_api_key_secret')); $endpoint_secret = $this->container->getParameter('stripe_webhook_key'); $payload = @file_get_contents('php://input'); $sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE']; $event = null; try { $event = \Stripe\Webhook::constructEvent($payload, $sig_header, $endpoint_secret); if ($event->type == 'checkout.session.completed') { $session = $event->data->object; $serviceToCall = $this->container->getParameter('payment_confirmation_service'); list($service, $function) = explode('::', $serviceToCall); $srv = null; if (class_exists($service)) $srv = new $service(); else $this->logger->error("Can't find your class to redirect webhook"); if (method_exists($srv, $function)) $srv->{$function}($session); else $this->logger->error("Can't find your method in class " . $service); return $this->json("OK", 200); } } catch(\UnexpectedValueException $e) { $this->logger->error($e->getMessage()); exit(); } catch(\Stripe\Error\SignatureVerification $e) { $this->logger->error($e->getMessage()); exit(); } return $this->json("KO", 500); } }