src/Controller/PaymentController.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\FormationPrice;
  4. use App\Entity\Payment;
  5. use App\Entity\Preinscription;
  6. use App\Entity\Tarif;
  7. use App\Entity\Transaction;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Payum\Core\Payum;
  10. use Payum\Core\Request\GetHumanStatus;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class PaymentController extends AbstractController
  15. {
  16.     /**
  17.      * @Route("/payment/request/{id}", name="mmpp_front_payment_request")
  18.      * @Route("/payment/request/{type}/{id}", name="mmpp_front_payment_pr_request")
  19.      */
  20.     public function requestAction(Preinscription $preinscriptionPayum $payum, ?string $type nullEntityManagerInterface $em)
  21.     {
  22.         $gatewayName 'axepta';
  23.         $storage $payum->getStorage(Payment::class);
  24.         $number uniqid();
  25.         /** @var Payment $payment */
  26.         $payment $storage->create();
  27.         $payment->setNumber($number);
  28.         $payment->setCurrencyCode('EUR');
  29.         if ($preinscription->getFormulaire()->getId() == 161 || $preinscription->getFormulaire()->getId() == 162) {
  30.             $payment->setTotalAmount(7000);
  31.         } else {
  32.             $payment->setTotalAmount(14000);
  33.         }
  34.         if(null !== $type && $preinscription->hasPreRentree()){
  35.             $tarification $em->getRepository(FormationPrice::class)->findOneBy(['formulaire' => $preinscription->getFormulaire(), 'periode' => $preinscription->getPeriode()]);
  36.             $payment->setOrderPaymentSpe($type);
  37.             $payment->setTotalAmount((intval($tarification->getStagePreRentreePrimant())*100));
  38.             $payment->setOrderPaymentSpe('PR');
  39.         }
  40.         $payment->setDescription('Preinscription #'.$preinscription->getId());
  41.         $payment->setClientId($preinscription->getId());
  42.         $payment->setClientEmail($preinscription->getEmail());
  43.         $storage->update($payment);
  44.         $captureToken $payum->getTokenFactory()->createCaptureToken(
  45.             $gatewayName,
  46.             $payment,
  47.             'mmpp_front_payment_done' // the route to redirect after capture
  48.         );
  49.         return $this->redirect($captureToken->getTargetUrl());
  50.     }
  51.     /**
  52.      * @Route("/payment/done/{payum_token}", name="mmpp_front_payment_done")
  53.      */
  54.     public function doneAction(
  55.         EntityManagerInterface $em,
  56.         Request $request,
  57.         Payum $payum
  58.     ) {
  59.         $token $payum->getHttpRequestVerifier()->verify($request);
  60.         $gateway $payum->getGateway($token->getGatewayName());
  61.         // You can invalidate the token, so that the URL cannot be requested any more:
  62.         // $this->get('payum')->getHttpRequestVerifier()->invalidate($token);
  63.         // Once you have the token, you can get the payment entity from the storage directly.
  64.         // $identity = $token->getDetails();
  65.         // $payment = $this->get('payum')->getStorage($identity->getClass())->find($identity);
  66.         // Or Payum can fetch the entity for you while executing a request (preferred).
  67.         $gateway->execute($status = new GetHumanStatus($token));
  68.         /** @var Payment $payment */
  69.         $payment $status->getFirstModel();
  70.         $details $payment->getDetails();
  71.         // deja arrivĂ©
  72.         $transaction $em->getRepository(Transaction::class)
  73.             ->findOneBy(['authorisationId' => $details['PayID']]);
  74.         if (null === $transaction) {
  75.             $transaction = new Transaction();
  76.             $transaction->setAmount($payment->getTotalAmount());
  77.             $transaction->setAuthorisationId($details['PayID']);
  78.             $transaction->setCurrencyCode($payment->getCurrencyCode());
  79.             $transaction->setCustomerEmail($payment->getClientEmail());
  80.             $transaction->setCustomerIpAddress($_SERVER['REMOTE_ADDR']);
  81.             $transaction->setParameters(\json_encode($details));
  82.             $transaction->setResponseCode($details['Code']);
  83.             $transaction->setTransactionDatetime(new \DateTime());
  84.             $transaction->setTransactionReference($details['TransID']);
  85.             $transaction->setPreinscription(
  86.                 $em->getRepository(Preinscription::class)->find($payment->getClientId())
  87.             );
  88.             $em->persist($transaction);
  89.             $em->flush();
  90.         }
  91.         return $this->render('payment/response.html.twig', ['details' => $details]);
  92.     }
  93.     /**
  94.      * @Route("/payment/response", name="mmpp_front_payment_response")
  95.      */
  96.     /*public function responseAction(Mercanet $mercanet)
  97.     {
  98.         /** @var Mercanet $mercanet *
  99.         $mercanet->setResponse($_POST);
  100.         return $this->render('payment/response.html.twig', array(
  101.             'mercanet' => $mercanet
  102.         ));
  103.     }*/
  104.     /**
  105.      * @Route("/payment/auto-response", name="mmpp_front_payment_autoresponse")
  106.      *
  107.      * @throws \Exception
  108.      */
  109.     /*public function autoResponseAction(
  110.         EntityManagerInterface $em,
  111.         Mercanet $mercanet
  112.     ) {
  113.         $mercanet->setResponse($_POST);
  114.         $parameters = $mercanet->toArray();
  115.         $transaction = new Transaction();
  116.         $transaction->setAmount($parameters['amount']);
  117.         $transaction->setAuthorisationId($parameters['authorisationId']);
  118.         $transaction->setCurrencyCode($parameters['currencyCode']);
  119.         $transaction->setCustomerEmail($parameters['customerEmail']);
  120.         $transaction->setCustomerIpAddress($parameters['customerIpAddress']);
  121.         $transaction->setParameters(\json_encode($parameters));
  122.         $transaction->setResponseCode($parameters['responseCode']);
  123.         $transaction->setTransactionDatetime(new \DateTime($parameters['transactionDateTime']));
  124.         $transaction->setTransactionReference($parameters['transactionReference']);
  125.         $transaction->setPreinscription(
  126.             $em->getRepository(Preinscription::class)->find($parameters['orderId'])
  127.         );
  128.         $em->persist($transaction);
  129.         $em->flush();
  130.         die();
  131.     }*/
  132.     /**
  133.      * @Route("/payment/success", name="mmpp_front_payment_success")
  134.      */
  135.     /*public function successAction()
  136.     {
  137.         return $this->render('payment/response.html.twig', array(
  138.             'path' => 'contact',
  139.             'mercanet' => ['valid' => true]
  140.         ));
  141.     }*/
  142. }