em = $em; } public function listen(Request $req) { $payload = json_decode($req->getContent(), true); // DEBUG @file_put_contents(__DIR__ . '/../../var/log/paymongo.log', print_r($payload, true) . "\r\n----------------------------------------\r\n\r\n", FILE_APPEND); /* return $this->json([ 'success' => true, ]); */ // END DEBUG // get event type and process accordingly $attr = $payload['data']['attributes']; $event = $attr['data']; $event_name = $attr['type']; switch ($event_name) { case "payment.paid": return $this->handlePaymentPaid($event); break; case "payment.failed": return $this->handlePaymentPaid($event); break; case "payment.refunded": // TODO: handle refunds case "payment.refund.updated": case "checkout_session.payment.paid": default: break; } return $this->json([ 'success' => true, ]); } protected function handlePaymentPaid($event) { $metadata = $event['attributes']['metadata']; $obj = $this->getTransaction($metadata['transaction_id']); // mark as paid $obj->setStatus(TransactionStatus::PAID); $this->em->flush(); return $this->json([ 'success' => true, ]); } protected function handlePaymentFailed(Request $req) { // TODO: do something about failed payments? return $this->json([ 'success' => true, ]); } protected function getTransaction($id) { //$class_name = 'App\\Entity\\' . $type; //$instance = new $class_name; return $this->em->getRepository(GatewayTransaction::class)->find($id); } public function paymentSuccess(Request $req) { return $this->render('paymongo/success.html.twig'); } public function paymentCancelled(Request $req) { return $this->render('paymongo/cancelled.html.twig'); } }