src/Controller/PaymentController.php line 25

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