src/Front/PaymentBundle/Controller/DefaultController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Front\PaymentBundle\Controller;
  3. use App\BackOffice\ConfigurationBundle\Services\Dalenys\Dalenys;
  4. use Services\PaymentBundle\Manager\PaymentTypesManager;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. class DefaultController extends AbstractController
  10. {
  11.     const URL_SUFFIX_SUCCESS 'success';
  12.     const URL_SUFFIX_CANCEL 'cancel';
  13.     const URL_SUFFIX_ERROR 'error';
  14.     const URL_OFFER_END 'offre-end';
  15.     private $paymentTypesManager;
  16.     private $dalenysService;
  17.     public function __construct(PaymentTypesManager $paymentTypesManagerDalenys $dalenysService)
  18.     {
  19.         $this->paymentTypesManager $paymentTypesManager;
  20.         $this->dalenysService $dalenysService;
  21.     }
  22.     /**
  23.      * @Route("/")
  24.      */
  25.     public function indexAction()
  26.     {
  27.         return new Response(
  28.             '<html><body></body></html>'
  29.         );
  30.     }
  31.     private function redirectUrl($data$email$status$query=null)
  32.     {
  33.         $url $data['site_url'].'/offre-end/'.
  34.             $data['campaign_scenario'].'/'.
  35.             $data['campaign_path'].'/'.
  36.             $email.'/'.$status;
  37.         if($query){
  38.             $url .= '?'.http_build_query($query);
  39.         }
  40.         return $url;
  41.     }
  42.     private function checkDalenysHashFromRequest(Request $request)
  43.     {
  44.         try {
  45.             $identifier $request->query->get('IDENTIFIER');
  46.             $psp $this->paymentTypesManager->getRepository()->findOneBy(['apiUsernamePrivate' => $identifier]);
  47.             if ($psp) {
  48.                 $valid $this->dalenysService->checkHash($request->query->all(), $psp);
  49.                 if ($valid === true) {
  50.                     return true;
  51.                 }
  52.             }
  53.             return false;
  54.         }catch (\Exception $e){
  55.             return false;
  56.         }
  57.     }
  58.     // ===========
  59.     // DALENYS 3DS
  60.     // ===========
  61.     // The Endpoints below are currently replaced by the DigiPremium Relay Server
  62.     // They are still available in case of outages.
  63.     /**
  64.      * Replaced by https://www.dp-api-b1.com/ThreeDSecure/success_dalenys
  65.      *
  66.      * @Route("/3ds/dalenys/success")
  67.      */
  68.     public function dalenys3DSSuccessAction(Request $request)
  69.     {
  70.         // todo: check/validate hash
  71.         $extradata $request->query->get('EXTRADATA');
  72.         $extradata unserialize($extradata);
  73.         $query = [
  74.             'orderid' => $request->query->get('ORDERID'),
  75.             'transactionid' => $request->query->get('TRANSACTIONID'),
  76.         ];
  77.         $validHash $this->checkDalenysHashFromRequest($request);
  78.         $execcode $request->query->get('EXECCODE');
  79.         if($validHash && is_numeric($execcode) && $execcode 1000 ){
  80.             $url $this->redirectUrl($extradata$request->query->get('CLIENTEMAIL'), self::URL_SUFFIX_SUCCESS$query);
  81.         }else{
  82.             // $query['message'] = $request->query->get('MESSAGE', $execcode);
  83.             $url $this->redirectUrl($extradata$request->query->get('CLIENTEMAIL'), self::URL_SUFFIX_ERROR$query);
  84.         }
  85.         return $this->redirect($url);
  86.     }
  87.     /**
  88.      *
  89.      * Replaced by https://www.dp-api-b1.com/ThreeDSecure/cancel_dalenys
  90.      *
  91.      * @Route("/3ds/dalenys/cancel")
  92.      *
  93.      * transaction was canceled by user intention,
  94.      * e.g. has been clicked "Give up and cancel my payment"
  95.      */
  96.     public function dalenys3DSCancelAction(Request $request)
  97.     {
  98.         $extradata $request->query->get('EXTRADATA');
  99.         $extradata unserialize($extradata);
  100.         $query = [
  101.             'orderid' => $request->query->get('ORDERID'),
  102.             'transactionid' => $request->query->get('TRANSACTIONID'),
  103.         ];
  104.         $url $this->redirectUrl($extradata$request->query->get('CLIENTEMAIL'), self::URL_SUFFIX_CANCEL$query);
  105.         return $this->redirect($url);
  106.     }
  107. }