src/Social/FrontendBundle/Controller/PaymentController.php line 41

Open in your IDE?
  1. <?php
  2. namespace Social\FrontendBundle\Controller;
  3. use DateTime;
  4. use Exception;
  5. use Sentry\ClientInterface;
  6. use Psr\Log\LoggerInterface;
  7. use Social\FrontendBundle\Entity\PaymentCancel;
  8. use Social\FrontendBundle\Entity\VerotelConfirmationPayment;
  9. use Social\InternalBundle\Entity\PackagesList;
  10. use Social\InternalBundle\Entity\UserDeletionQueue;
  11. use Social\UserBundle\Entity\User;
  12. use Social\FrontendBundle\Service\Mailer;
  13. use Sentry\SentryBundle\SentrySymfonyClient;
  14. use Social\FrontendBundle\Entity\PaymentOffer;
  15. use Social\InternalBundle\Entity\PackageSelectorTrackerEntity;
  16. use Social\InternalBundle\Service\Core\CustomTelegramIntegration;
  17. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\RedirectResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\HttpFoundation\Session\Session;
  23. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  24. use Symfony\Component\VarDumper\VarDumper;
  25. use Social\InternalBundle\Service\PaymentMethods\Core\PaymentInterface;
  26. /**
  27.  * Class PaymentController
  28.  *
  29.  * @package Social\FrontendBundle\Controller
  30.  */
  31. class PaymentController extends Controller
  32. {
  33.     /**
  34.      * @param Request $request
  35.      *
  36.      * @return Response
  37.      */
  38.     public function showPostPaymentModalsAction(Request $request)
  39.     {
  40.         $payment $request->get('payment'null);
  41.         $etat    $request->get('etat'null);
  42.         $event   $request->get('event'null);
  43.         return $this->render('SocialFrontendBundle:Payment:show_post_payment_modals.html.twig',
  44.             ['payment' => $payment'etat' => $etat'event' => $event]);
  45.     }
  46.     /**
  47.      * @param Request $request
  48.      *
  49.      * @return JsonResponse
  50.      */
  51.     public function getPaymentUrlAction(Request $request)
  52.     {
  53.         //        $package             = $request->get('package');
  54.         //        $source              = $request->get('source');
  55.         //        $subscriptionManager = $this->get('social.subscription_manager');
  56.         //
  57.         //        if ($source) {
  58.         //            $redirectUrl = $subscriptionManager->getPscPaymentLink($this->getUser(), $package, $source);
  59.         //        } else {
  60.         //            $redirectUrl = $subscriptionManager->getPscPaymentLink($this->getUser(), $package);
  61.         //        }
  62.         //
  63.         //        $packageCosts              = $this->getParameter('packages_costs');
  64.         //        $currentPackageCostVersion = $this->getParameter('current_package_cost_version');
  65.         //        $amount                    = $packageCosts[$currentPackageCostVersion][$package]['cost'];
  66.         //        $this->get('social.mailer')->sendAdminPaymentInitiated($this->getUser(), $amount, 'modal');
  67.         //
  68.         //        return new JsonResponse(array('redirect_url' => $redirectUrl));
  69.         $package $request->get('package');
  70.         /** @var PaymentInterface $subscriptionManager */
  71.         $subscriptionManager null;
  72.         $loadedPaymentMethod null;
  73.         $package $request->get('package');
  74.         $source  $request->get('source');
  75.         // Getting payment methods definitions and get the active one. If not then go on default
  76.         $socialPaymentsDefinitions $this->getParameter('social_payments');
  77.         if (isset($socialPaymentsDefinitions['payment_used_in_front']) && $socialPaymentsDefinitions['payment_used_in_front'] !== '') {
  78.             $loadedPaymentMethod $socialPaymentsDefinitions['payment_used_in_front'];
  79.             if (isset($socialPaymentsDefinitions[$loadedPaymentMethod]) && $socialPaymentsDefinitions[$loadedPaymentMethod]['active'] == true) {
  80.                 if ($this->container->has($socialPaymentsDefinitions[$loadedPaymentMethod]['service'])) {
  81.                     $subscriptionManager $this->get($socialPaymentsDefinitions[$loadedPaymentMethod]['service']);
  82.                 } else {
  83.                     $subscriptionManager $this->get('social.subscription_manager');
  84.                 }
  85.             } else {
  86.                 $subscriptionManager $this->get('social.subscription_manager');
  87.             }
  88.         } else {
  89.             $subscriptionManager $this->get('social.subscription_manager');
  90.         }
  91.         // Initialize the payment
  92.         if (in_array('_init'get_class_methods($subscriptionManager))) {
  93.             $subscriptionManager->_init();
  94.         }
  95.         /** @var PackagesList $packageList */
  96.         $packageList $this->getDoctrine()->getRepository(PackagesList::class)->findOneBy(['name' => $package]);
  97.         $amount $packageList->getValue();
  98.         $this->get('social.mailer')->sendAdminPaymentInitiated($this->getUser(), $amount'modal');
  99.         $redirectUrl $subscriptionManager->getPaymentLink($this->getUser(), $package$source);
  100.         return new JsonResponse(
  101.             [
  102.                 'redirect_url' => $redirectUrl,
  103.             ]
  104.         );
  105.     }
  106.     /**
  107.      * @param Request $request
  108.      * @param Mailer  $mailer
  109.      *
  110.      * @return JsonResponse
  111.      */
  112.     public function cancelSubscriptionAction(Request $request)
  113.     {
  114.         try {
  115.             if ($this->getUser()) {
  116.                 $centralPayService $this->get('social_internal.payments.centralpay_provider_v2');
  117.                 if ($request->isMethod('POST')) {
  118.                    $cancelSubscriptionResponse $centralPayService->cancelCentralPaySubscription($this->getUser());
  119.                 }
  120.             }
  121.         } catch (Exception $exception) {
  122.             return $exception->getMessage();
  123.         }
  124. //        $reason = $request->get('reason', '');
  125. //        $mailer->sendUnsubscribeEmail($this->getUser(), $reason);
  126.         return new JsonResponse(['redirect_url' => $this->generateUrl('social_frontend_account_details')]);
  127.     }
  128.     /**
  129.      * @param Request $request
  130.      *
  131.      * @return JsonResponse
  132.      */
  133.     public function refundAction(Request $request)
  134.     {
  135.         $reason $request->get('reason''');
  136.         $mailer $this->get('social.mailer');
  137.         /** @var User|null $user */
  138.         $user $this->getUser();
  139.         $mailer->sendRefundEmail($this->getUser(), $reason);
  140.         return new JsonResponse([]);
  141.     }
  142.     /**
  143.      * @param Request $request
  144.      *
  145.      * @return RedirectResponse
  146.      */
  147.     public function splitPaymentStepsAction(Request $request)
  148.     {
  149.         $em                 $this->get('doctrine.orm.entity_manager');
  150.         $secretKey          $request->get('secret_key');
  151.         $subcriptionManager $this->get('social.subscription_manager');
  152.         $step               $request->get('step');
  153.         if (!$secretKey) {
  154.             throw $this->createNotFoundException('Secret key cannot be empty.');
  155.         }
  156.         $paymentOffer $em->getRepository('SocialFrontendBundle:PaymentOffer')->findOneBy(['secret_key' => $secretKey]);
  157.         if (!$paymentOffer) {
  158.             throw $this->createNotFoundException(sprintf('Record payment offer does not exist for secret key "%s"',
  159.                 $secretKey));
  160.         }
  161.         $pscPaymentLink null;
  162.         switch ($paymentOffer->getType()) {
  163.             case PaymentOffer::PAYMENT_OFFER_SPLIT_PAYMENT:
  164.             {
  165.                 $pscPaymentLink null;
  166.                 $description    json_decode($paymentOffer->getDescription());
  167.                 switch ($step) {
  168.                     case 1:
  169.                     {
  170.                         $this->get('social.mailer')->sendAdminPaymentInitiated(
  171.                             $paymentOffer->getToUser(),
  172.                             $description->first_payment,
  173.                             'payment_fail_auto_email'
  174.                         );
  175.                         $pscPaymentLink $subcriptionManager->getPscPaymentLinkCustom(
  176.                             $paymentOffer->getToUser(),
  177.                             $description->package_name,
  178.                             $description->first_payment,
  179.                             'payment_fail_auto_email',
  180.                             [
  181.                                 'substep'         => 'split_payment_step_1',
  182.                                 'is_full_payment' => false,
  183.                                 'secret_key'      => $secretKey,
  184.                             ]
  185.                         );
  186.                         break;
  187.                     }
  188.                     case 2:
  189.                     {
  190.                         $this->get('social.mailer')->sendAdminPaymentInitiated(
  191.                             $paymentOffer->getToUser(),
  192.                             $description->second_payment,
  193.                             'payment_fail_auto_email'
  194.                         );
  195.                         $pscPaymentLink $subcriptionManager->getPscPaymentLinkCustom(
  196.                             $paymentOffer->getToUser(),
  197.                             $description->package_name,
  198.                             $description->second_payment,
  199.                             'payment_fail_auto_email',
  200.                             [
  201.                                 'substep'         => 'split_payment_step_2',
  202.                                 'is_full_payment' => true,
  203.                                 'secret_key'      => $secretKey,
  204.                             ]
  205.                         );
  206.                         break;
  207.                     }
  208.                 }
  209.                 break;
  210.                 //                return $this->redirect($pscPaymentLink);
  211.             }
  212.             case PaymentOffer::PAYMENT_OFFER_DISCOUNT:
  213.             {
  214.                 $pscPaymentLink null;
  215.                 $description json_decode($paymentOffer->getDescription());
  216.                 $this->get('social.mailer')->sendAdminPaymentInitiated($paymentOffer->getToUser(),
  217.                     $paymentOffer->getAmount(), 'discount_offer');
  218.                 $pscPaymentLink $subcriptionManager->getPscPaymentLinkCustom(
  219.                     $paymentOffer->getToUser(),
  220.                     $description->package_name,
  221.                     $paymentOffer->getAmount(),
  222.                     'discount_offer',
  223.                     ['is_full_payment' => true'secret_key' => $secretKey],
  224.                     $description->period == '' false true,
  225.                     $description->period
  226.                 );
  227.                 break;
  228.                 //                return $this->redirect($pscPaymentLink);
  229.             }
  230.         }
  231.         if (is_null($pscPaymentLink)) {
  232.             throw $this->createNotFoundException(sprintf('Not a good ending'));
  233.         }
  234.         return $this->render('SocialFrontendBundle:Payment:redirect_page.html.twig',
  235.             ['redirect_url' => $pscPaymentLink]);
  236.     }
  237.     public function verotelPayIndexAction(Request $request)
  238.     {
  239.         $session = new Session();
  240.         $em $this->getDoctrine()->getManager();
  241.         $user $em->getRepository('SocialUserBundle:User')->find($this->getUser());
  242.         if ($user->getPackageName() == 'default') {
  243.             setcookie('tusData'json_encode($request->query->get('tus')), time()+3600);
  244.             $package $request->query->get('package');
  245.         } else {
  246.             $package $session->get('package');
  247.         }
  248.         //for cancel event
  249.         if (!$this->getUser() || $package == null) {
  250.             $verotelConfirmationPayment $em->getRepository('SocialFrontendBundle:VerotelConfirmationPayment')
  251.                 ->findOneBy(['from_user' => $user], ['id' => 'DESC']);
  252.             $user->setPackageNextPaymentDueOn(null);
  253.             $cancelledDate = new \DateTime();
  254.             $verotelConfirmationPayment->setCancelledDate($cancelledDate);
  255.             $em->persist($user);
  256.             $em->persist($verotelConfirmationPayment);
  257.             $em->flush();
  258.             return new RedirectResponse($this->generateUrl('social_user_homepage'));
  259.         }
  260.         try {
  261.             $verotelPayService $this->get('social_internal.payments.verotel_card');
  262.             if ($request->isMethod('POST')) {
  263.                 if ($request->request->get('rmCard') && $request->request->get('rmCard') !== '') {
  264.                     return new JsonResponse($verotelPayService->removeCard($this->getUser(),
  265.                         $request->request->get('rmCard')));
  266.                 }
  267.             }
  268.             $verotelProviderService $this->get('social_internal.payments.verotel_card');
  269.             if ($request->isMethod('GET')) {
  270.                 /** @var UserDeletionQueue $userDeletionQue */
  271.                 $userDeletionQue $em->getRepository(UserDeletionQueue::class)->findOneBy(['for_user' => $this->getUser(), 'isDeleted' => false]);
  272.                 if ($userDeletionQue) {
  273.                     $userDeletionQue->setIsDeleted(true);
  274.                 }
  275.                 $purchaseUrl $verotelProviderService->getPaymentLink($this->getUser(), $packagenull);
  276.                 if ($user->getPackageName() == 'default' || $request->isXmlHttpRequest()) {
  277.                     return new JsonResponse(['redirect_url' => $purchaseUrl]);
  278.                 } else {
  279.                     return new RedirectResponse($purchaseUrl);
  280.                 }
  281.             }
  282.             return new RedirectResponse($this->generateUrl('social_user_homepage'));
  283.         }
  284.         catch (\Symfony\Component\Security\Acl\Exception\Exception $exception) {
  285.             $this->get('sentry.client')->captureException($exception);
  286.             return new JsonResponse([
  287.                 'view'   => null,
  288.                 'errors' => ['Something wrong happended'],
  289.             ]);
  290.         }
  291.     }
  292.     public function verotelPaymentPostBackCallAction(Request $requestLoggerInterface $cardBillingLogger)
  293.     {
  294.         $cardBillingLogger->info('req-post'$request->request->all());
  295.         $cardBillingLogger->info('req-get'$request->query->all());
  296.         if (!$request->get('event')) {
  297.             $this->redirectToRoute('social_frontend_homepage_account');
  298.         }
  299.         $verotelCardService $this->get('social_internal.payments.verotel_card');
  300.         $verotelCardService->_init();
  301.         $postbackResult '';
  302.         switch (strtolower($request->get('event'))) {
  303.             case 'rebill':
  304.                 $postbackResult $verotelCardService->rebillTransaction($request);
  305.                 break;
  306.             case 'extend':
  307.                 $postbackResult $verotelCardService->extendRebillTransaction($request);
  308.                 break;
  309.             case 'initial':
  310.                 $postbackResult =  $verotelCardService->checkInitialTransaction($request);
  311.                 break;
  312.             case 'cancel':
  313.                 $postbackResult =  $verotelCardService->cancelTransaction($request);
  314.                 break;
  315.             case 'expiry':
  316.                 $postbackResult =  $verotelCardService->expiryTransaction($request);
  317.                 break;
  318.             case 'upgrade':
  319.                 $postbackResult =  $verotelCardService->upgradeTransaction($request);
  320.                 break;
  321.             case 'downgrade':
  322.                 $postbackResult =  $verotelCardService->downgradeTransaction($request);
  323.                 break;
  324.             case 'credit':
  325.                 $postbackResult =  $verotelCardService->creditTransaction($request);
  326.                 break;
  327.             case 'chargeback':
  328.                 $postbackResult =  $verotelCardService->chargeBackTransaction($request);
  329.                 break;
  330.         }
  331.         return new Response($postbackResult,200);
  332.     }
  333.     public function centralPayCheckAction(Request $request)
  334.     {
  335.         try {
  336.             if ($this->getUser() && $request->isXmlHttpRequest()) {
  337.                 $data $request->request->all();
  338.                 $this->get('social_internal.bots.telegram')
  339.                      ->sendMessage("Iframe message"$data['data'], 'GOD'CustomTelegramIntegration::CHANNEL_SALES);
  340.             }
  341.             return new JsonResponse("OK");
  342.         } catch (\Exception $exception) {
  343.             return new JsonResponse("NOK");
  344.         }
  345.     }
  346.     public function centralPayIndexAction(Request $requestLoggerInterface $debuglogLogger)
  347.     {
  348.         $em $this->get('doctrine.orm.entity_manager');
  349.         $user $em->getRepository('SocialUserBundle:User')->find($this->getUser());
  350.         try {
  351.             if ($this->getUser()) {
  352.                 /** @var UserDeletionQueue $userDeletionQue */
  353.                 $userDeletionQue $em->getRepository(UserDeletionQueue::class)->findOneBy(['for_user' => $this->getUser(), 'isDeleted' => false]);
  354.                 if ($userDeletionQue) {
  355.                     $userDeletionQue->setIsDeleted(true);
  356.                 }
  357.                 /* ////////////////////// V2 */
  358.                 $centralPayService $this->get('social_internal.payments.centralpay_provider_v2');
  359.                 $centralPayProcess $centralPayService->startProcess($request);
  360.                 $debuglogLogger->info('started process in centralPayIndexAction for user ' $user->getId());
  361.                 $debuglogLogger->info('request method is ' $request->getMethod());
  362.                 if ($request->isMethod('POST')) {
  363.                     if ($request->request->get('rmCard') && $request->request->get('rmCard') !== '') {
  364.                         return new JsonResponse($centralPayService->removeCard($this->getUser(),
  365.                             $request->request->get('rmCard')));
  366.                     }
  367.                     $content json_decode($centralPayProcess->getContent());
  368.                     $debuglogLogger->info('$centralPayProcess response is - ' $centralPayProcess->getContent());
  369.                     if ($content->error_flag === false && $content->sStep === 'upgraded') {
  370.                         $debuglogLogger->info('in centralPayIndexAction error_flag is false');
  371.                         /** @var VerotelConfirmationPayment $userVerotelPayment */
  372.                         $userVerotelPayment $em->getRepository('SocialFrontendBundle:VerotelConfirmationPayment')
  373.                             ->findOneBy(['from_user' => $user], ['id' => 'DESC']);
  374.                         $debuglogLogger->info('in centralPayIndexAction $userVerotelPayment for user ' $user->getId());
  375.                         if ($userVerotelPayment) {
  376.                             $debuglogLogger->info('$userVerotelPayment found from `payment_verotel_installments` table with ID ' $userVerotelPayment->getId());
  377.                             $isPaymentCancelled $em->getRepository(PaymentCancel::class)->findOneBy(['uniqueTransactionId' => $userVerotelPayment->getTransactionID()]);
  378.                             if (!$isPaymentCancelled) {
  379.                                 $verotelPayService $this->get('social_internal.payments.verotel_card');
  380.                                 $verotelPayService->cancelSubscription($userVerotelPayment->getSaleID());
  381.                             } else {
  382.                                 $debuglogLogger->info('Previous Sale is already cancelled in cardbilling ' $userVerotelPayment->getId());
  383.                             }
  384.                         }
  385.                     }
  386.                     $debuglogLogger->info('in centralPayIndexAction in POST method');
  387.                 }
  388.                 $debuglogLogger->info('$centralPayProcess response = ' json_encode($centralPayProcess));
  389.                 return $centralPayProcess;
  390.                 /* ////////////////////// V2 */
  391.                 // Init the main service for central Pay
  392.                 $paymentProviderService $this->get('social_internal.payments.centralpay_provider_v2');
  393.                 // If request is a get then it means that we need to display form or get in the 3DS check
  394.                 if ($request->isMethod('GET')) {
  395.                     $package $request->query->get('package');
  396.                     if ($package) {
  397.                         $packageDetails $paymentProviderService->getFormDisplayData($package);
  398.                         if (false === $packageDetails['error_flag']) {
  399.                             $packageDetails $packageDetails['data'];
  400.                         } else {
  401.                             return $packageDetails;
  402.                         }
  403.                         //$savedCards       = $this->getDoctrine()->getRepository('SocialInternalBundle:CentralPayEntity')
  404.                         //                         ->getAllUserCards($this->getUser());
  405.                         $registeredCustomerEntity $this->getDoctrine()->getRepository('SocialInternalBundle:CentralPayCustomersEntity')
  406.                                                          ->findOneBy(['userReference' => $this->getUser()]);
  407.                         $registeredCards          null;
  408.                         if ($registeredCustomerEntity) {
  409.                             $registeredCards $registeredCustomerEntity->getSavedCards();
  410.                         }
  411.                         $centralPayParams $this->getParameter('social_payments');
  412.                         return new JsonResponse([
  413.                             'error_flag' => false,
  414.                             'errors'     => null,
  415.                             'view'       => $this->renderView('@SocialFrontend/Payment/Partials/cp_payment_form.html.twig',
  416.                                 [
  417.                                     'savedCards'     => $registeredCards,
  418.                                     'packageDetails' => $packageDetails,
  419.                                     'errors'         => null,
  420.                                     'merchantKey'    => $centralPayParams['centralPay']['merchantPublicKey'],
  421.                                 ]),
  422.                         ]);
  423.                     }
  424.                 } elseif ($request->isMethod('POST')) {
  425.                     if ($request->request->get('rmCard') && $request->request->get('rmCard') !== '') {
  426.                         return new JsonResponse($paymentProviderService->removeCard($this->getUser(),
  427.                             $request->request->get('rmCard')));
  428.                     }
  429.                     $response $paymentProviderService->startProcess($request);
  430.                     $tus      $request->request->get('tus');
  431.                     if (true === $response['error_flag']) {
  432.                         if (isset($response['sStep']) && 'pFail' === $response['sStep']) {
  433.                             $response['view'] = $this->renderView('@SocialFrontend/Payment/Partials/cp_payment_finished.html.twig',
  434.                                 ['data' => $response'errors' => null]);
  435.                             $newTrack         = new PackageSelectorTrackerEntity();
  436.                             $newTrack->setUser($this->getUser()->getId());
  437.                             $newTrack->setLogDate(new DateTime('now'));
  438.                             $newTrack->setTrackedData($tus ',failed');
  439.                             $this->getDoctrine()->getManager()->persist($newTrack);
  440.                             $this->getDoctrine()->getManager()->flush();
  441.                             unset($response['data']);
  442.                             return new JsonResponse($response);
  443.                         }
  444.                         // To be sure no sensitive data is going out
  445.                         unset($response['data']);
  446.                         return new JsonResponse($response);
  447.                     }
  448.                     if (isset($response['sStep']) && 'checkDS' === $response['sStep']) {
  449.                         $response['view'] = $this->renderView('@SocialFrontend/Payment/Partials/enrollement_form.html.twig',
  450.                             [
  451.                                 'enrollmentData' => $response['data'],
  452.                                 'errors'         => null,
  453.                                 'internalData'   => [
  454.                                     'userID'        => $this->getUser()->getId(),
  455.                                     'package'       => $package,
  456.                                     'mTI'           => '',
  457.                                     'installmentID' => '',
  458.                                     'paReq'         => '',
  459.                                     'paRes'         => '',
  460.                                 ],
  461.                             ]);
  462.                         return new JsonResponse($response);
  463.                     }
  464.                     if (isset($response['sStep']) && 'upgraded' === $response['sStep']) {
  465.                         $response['view'] = $this->renderView('@SocialFrontend/Payment/Partials/cp_payment_finished.html.twig',
  466.                             ['data' => $response'errors' => null]);
  467.                         $newTrack         = new PackageSelectorTrackerEntity();
  468.                         $newTrack->setUser($this->getUser()->getId());
  469.                         $newTrack->setLogDate(new DateTime('now'));
  470.                         $newTrack->setTrackedData($tus ',upgraded');
  471.                         $this->getDoctrine()->getManager()->persist($newTrack);
  472.                         $this->getDoctrine()->getManager()->flush();
  473.                         return new JsonResponse($response);
  474.                     }
  475.                 }
  476.             }
  477.             // No user is logged in - redirect it to register/login
  478.             return new RedirectResponse($this->generateUrl('social_user_homepage'));
  479.         } catch (Exception $exception) {
  480.             $this->get('sentry.client')->captureException($exception);
  481.             $debuglogLogger->critical('Error occurred in centralPayIndex - ' $exception->getMessage());
  482.             return new JsonResponse([
  483.                 'view'   => null,
  484.                 'errors' => ['Something wrong happened'],
  485.             ]);
  486.         }
  487.     }
  488.     public function centralPayChallengeAction(Request $requestLoggerInterface $debuglogLogger)
  489.     {
  490.         try {
  491.             $centralPayService $this->get('social_internal.payments.centralpay_provider_v2');
  492.             $retour json_decode(base64_decode($_POST['cres']), true);
  493.             $debuglogLogger->info('In centralPayChallengeAction');
  494.             $threeDSTransaction =  $centralPayService->threeDS2Transaction($retour);
  495.             if ($request->isMethod('POST')) {
  496.                 if ($request->request->get('rmCard') && $request->request->get('rmCard') !== '') {
  497.                     return new JsonResponse($centralPayService->removeCard($this->getUser(),
  498.                         $request->request->get('rmCard')));
  499.                 }
  500.                 $response json_decode($threeDSTransaction->getContent());
  501.                 return new Response($response->view);
  502.             }
  503.             return new RedirectResponse($this->generateUrl('social_user_homepage'));
  504.         } catch (Exception $exception) {
  505.             $this->get('sentry.client')->captureException($exception);
  506.         }
  507.     }
  508.     public function centralPaySmartFormAction(Request $requestLoggerInterface $debuglogLogger)
  509.     {
  510.         try {
  511.             setcookie('tusData'json_encode($request->request->get('tus')), time()+3600);
  512.             $debuglogLogger->info('Step 1 - Smart form has initiated - centralPaySmartFormAction() and Requested data for smart form ' json_encode($request->request->all()));
  513.             if ($this->getUser()) {
  514.                 $centralPayService $this->get('social_internal.payments.centralpay_provider_v2');
  515.                 /** @var UserDeletionQueue $userDeletionQue */
  516.                 $userDeletionQue $this->getDoctrine()->getRepository(UserDeletionQueue::class)->findOneBy(['for_user' => $this->getUser(), 'isDeleted' => false]);
  517.                 if ($userDeletionQue) {
  518.                     $userDeletionQue->setIsDeleted(true);
  519.                 }
  520.                 $debuglogLogger->info("Calling smartFormProcess()");
  521.                 $centralPayProcess $centralPayService->smartFormProcess($request);
  522.                 if (isset($centralPayProcess) && $centralPayProcess['error_flag'] == false) {
  523.                     $debuglogLogger->info('Step 3 - No error - Smart form rendered');
  524.                 } else {
  525.                     $debuglogLogger->info('Step 3 - Error - Something went wrong while getting the form rendering');
  526.                 }
  527.                 if (isset($centralPayProcess) && isset($centralPayProcess['url_sf']) && $centralPayProcess['url_sf']) {
  528.                     $debuglogLogger->info('Step 4 - (Before payment)Smart form redirection url is returned from sf response - '$centralPayProcess['url_sf']);
  529.                 } else {
  530.                     $debuglogLogger->info('Step 4 - Something went wrong while getting url');
  531.                 }
  532.                 return new JsonResponse([
  533.                     'error_flag' => false,
  534.                     'data' => $centralPayProcess['url_sf'] ?? []
  535.                 ]);
  536.             }
  537.             return new JsonResponse([
  538.                 'error_flag' => true,
  539.                 'message' => 'Something went wrong'
  540.             ]);
  541.         } catch (Exception $exception) {
  542.             $debuglogLogger->info('Step LAST - Exception thrown while smart form: '$exception->getMessage());
  543.             return new JsonResponse([
  544.                 'error_flag' => true,
  545.                 'message' => $exception->getMessage()
  546.             ]);
  547.         }
  548.     }
  549.     public function centralPayRedirectAction(Request $request)
  550.     {
  551.         try {
  552.             return $this->render('@SocialFrontend/Payment/Partials/cp_after_redirect.html.twig',
  553.                 [
  554.                     'md'    => $request->get('MD',$this->getParameter('project_name')),
  555.                     'paRes' => $request->get('PaRes'),
  556.                 ]);
  557.         } catch (Exception $exception) {
  558.             /** @var LoggerInterface $centralPayLogger */
  559.             $centralPayLogger->error($exception->getMessage());
  560.             $centralPayLogger->error(json_encode($request->request->all()));
  561.             // This is really bad - but will not get pass payment transaction in the next step since the paRes is failing
  562.             return $this->render('@SocialFrontend/Payment/Partials/cp_after_redirect.html.twig',
  563.                 [
  564.                     'md'    => '',
  565.                     'paRes' => '',
  566.                 ]);
  567.         }
  568.     }
  569.     public function testAction(Request $request)
  570.     {
  571.         $centralPayService $this->get('social_internal.payments.centralpay_provider_v2');
  572.         /*if($request->isMethod('GET')) {
  573.             return $centralPayService->generateView(CentralPayProviderV2::STEP_PAYMENT_PREINIT,$request->query->all(),array());
  574.         }*/
  575.         return $centralPayService->startProcess($request);
  576.         //VarDumper::dump($centralPayService);
  577.         exit;
  578.         //$response = $centralPayService->ipInfo('94.177.43.166');
  579.         $u_agent  $_SERVER['HTTP_USER_AGENT'];
  580.         $bname    'Unknown';
  581.         $platform 'Unknown';
  582.         $version  "";
  583.         // First get the platform?
  584.         if (preg_match('/linux/i'$u_agent)) {
  585.             $platform 'linux';
  586.         } elseif (preg_match('/macintosh|mac os x/i'$u_agent)) {
  587.             $platform 'mac';
  588.         } elseif (preg_match('/windows|win32/i'$u_agent)) {
  589.             $platform 'windows';
  590.         }
  591.         // Next get the name of the useragent yes seperately and for good reason
  592.         if (preg_match('/MSIE/i'$u_agent) && !preg_match('/Opera/i'$u_agent)) {
  593.             $bname 'Internet Explorer';
  594.             $ub    "MSIE";
  595.         } elseif (preg_match('/Firefox/i'$u_agent)) {
  596.             $bname 'Mozilla Firefox';
  597.             $ub    "Firefox";
  598.         } elseif (preg_match('/Chrome/i'$u_agent)) {
  599.             $bname 'Google Chrome';
  600.             $ub    "Chrome";
  601.         } elseif (preg_match('/Safari/i'$u_agent)) {
  602.             $bname 'Apple Safari';
  603.             $ub    "Safari";
  604.         } elseif (preg_match('/Opera/i'$u_agent)) {
  605.             $bname 'Opera';
  606.             $ub    "Opera";
  607.         } elseif (preg_match('/Netscape/i'$u_agent)) {
  608.             $bname 'Netscape';
  609.             $ub    "Netscape";
  610.         }
  611.         // finally get the correct version number
  612.         $known   = ['Version'$ub'other'];
  613.         $pattern '#(?<browser>' join('|'$known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
  614.         if (!preg_match_all($pattern$u_agent$matches)) {
  615.             // we have no matching number just continue
  616.         }
  617.         // see how many we have
  618.         $i count($matches['browser']);
  619.         if ($i != 1) {
  620.             //we will have two since we are not using 'other' argument yet
  621.             //see if version is before or after the name
  622.             if (strripos($u_agent"Version") < strripos($u_agent$ub)) {
  623.                 $version $matches['version'][0];
  624.             } else {
  625.                 $version $matches['version'][1];
  626.             }
  627.         } else {
  628.             $version $matches['version'][0];
  629.         }
  630.         // check if we have a number
  631.         if ($version == null || $version == "") {
  632.             $version "?";
  633.         }
  634.         /*VarDumper::dump([
  635.             'userAgent' => $u_agent,
  636.             'name'      => $bname,
  637.             'version'   => $version,
  638.             'platform'  => $platform,
  639.             'pattern'   => $pattern,
  640.         ]);
  641.         exit;
  642.         $browser = get_browser(null, true);
  643.         VarDumper::dump($browser);
  644.         exit;
  645.         VarDumper::dump($response);
  646.         exit;
  647.         VarDumper::dump('da');
  648.         exit;*/
  649.     }
  650.     /**
  651.      * @param Request         $request
  652.      * @param LoggerInterface $centralPayLogger
  653.      * @param ClientInterface $client
  654.      *
  655.      * @return JsonResponse
  656.      */
  657.     public function centralPayHooksAction(
  658.         Request $request,
  659.         LoggerInterface $centralPayLogger,
  660.         LoggerInterface $centralPaySFLogger,
  661.         LoggerInterface $cardBillingLogger,
  662.         ClientInterface $client
  663.     ): JsonResponse {
  664.         try {
  665.             $deflatedParams json_decode($request->getContent(), true);
  666.             if (isset($deflatedParams['type'])) {
  667.                 $centralPayService $this->get('social_internal.payments.centralpay_provider_v2');
  668.                 $centralPayLogger->info(">>>>>>>>>>>>>> Incoming hook:: \n>>>>>>> TYPE:::: {$deflatedParams['type']}\n" json_encode($deflatedParams,
  669.                         true) . "\n<<<<<<<<<<<<<<");
  670.                 $response $centralPayService->processHookRequest($deflatedParams);
  671.                 $centralPayLogger->critical('>>>>>>>>>>>>>> END HOOK UTILITY ACTION WITH :: ');
  672.                 $centralPayLogger->critical('>>>>>>> TYPE:::: ' $deflatedParams['type']);
  673.                 $centralPayLogger->critical(json_encode($responsetrue));
  674.                 $centralPayLogger->critical('<<<<<<<<<<<<<<');
  675.                 $centralPaySFLogger->info(">>>>>>>>>>>>>> Incoming hook:: \n>>>>>>> TYPE:::: {$deflatedParams['type']}\n" json_encode($deflatedParams,
  676.                         true) . "\n<<<<<<<<<<<<<<");
  677.                 $centralPaySFLogger->critical('>>>>>>>>>>>>>> END HOOK UTILITY ACTION WITH :: ');
  678.                 $centralPaySFLogger->critical('>>>>>>> TYPE:::: ' $deflatedParams['type']);
  679.                 $centralPaySFLogger->critical(json_encode($responsetrue));
  680.                 $centralPaySFLogger->critical('<<<<<<<<<<<<<<');
  681.                 return new JsonResponse($response200);
  682.             }
  683.             $this->get('sentry.client')->captureMessage('Payment hook type index in array not found!');
  684.             return new JsonResponse(['error_flag' => true'message' => 'Type is not found in cp request hook']);
  685.         } catch (Exception $e) {
  686.             $client->captureException($e);
  687.             //$this->get('sentry.client')->captureException($e);
  688.             return new JsonResponse(['error_flag' => true'message' => $e->getMessage()]);
  689.         }
  690.     }
  691. }