src/Aviatur/FlightBundle/Controller/FlightCallbackController.php line 1126

Open in your IDE?
  1. <?php
  2. namespace Aviatur\FlightBundle\Controller;
  3. use Aviatur\CustomerBundle\Services\ValidateSanctions;
  4. use Aviatur\CustomerBundle\Services\ValidateSanctionsRenewal;
  5. use Aviatur\FlightBundle\Services\EmissionWebservice;
  6. use Aviatur\GeneralBundle\Controller\OrderController;
  7. use Aviatur\GeneralBundle\Services\AviaturEncoder;
  8. use Aviatur\GeneralBundle\Services\AviaturErrorHandler;
  9. use Aviatur\GeneralBundle\Services\AviaturExperienceService;
  10. use Aviatur\GeneralBundle\Services\AviaturLogSave;
  11. use Aviatur\GeneralBundle\Services\AviaturMailer;
  12. use Aviatur\GeneralBundle\Services\PayoutExtraService;
  13. use Aviatur\InsuranceBundle\Services\InsuranceService;
  14. use Aviatur\PaymentBundle\Controller\P2PController;
  15. use Aviatur\PaymentBundle\Controller\PSEController;
  16. use Aviatur\PaymentBundle\Controller\PSERestController;
  17. use Aviatur\PaymentBundle\Controller\SafetypayController;
  18. use Aviatur\PaymentBundle\Services\CustomerMethodPaymentService;
  19. use Aviatur\PaymentBundle\Services\TokenizerService;
  20. use Aviatur\TwigBundle\Services\TwigFolder;
  21. use Doctrine\Persistence\ManagerRegistry;
  22. use Google\Service\Fitness\Session;
  23. use Random\RandomException;
  24. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  25. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  28. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  29. use Aviatur\GeneralBundle\Services\AviaturCardProviderAirlineHomologateServices;
  30. class FlightCallbackController extends AbstractController
  31. {
  32.     /**
  33.      * @var ManagerRegistry
  34.      */
  35.     protected ManagerRegistry $managerRegistry;
  36.     /**
  37.      * @var AviaturCardProviderAirlineHomologateServices
  38.      */
  39.     protected AviaturCardProviderAirlineHomologateServices $cardHomologateServices;
  40.     protected $paymentMethod;
  41.     private $specialDiscountParams;
  42.     private $countriesInCashWithLufthansa;
  43.     public function __construct(ManagerRegistry $managerRegistryAviaturCardProviderAirlineHomologateServices $cardHomologateServicesSessionInterface $session) {
  44.         $this->managerRegistry $managerRegistry;
  45.         $this->cardHomologateServices $cardHomologateServices;
  46.         $em $this->managerRegistry->getManager();
  47.         $this->specialDiscountParams $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('aviatur_enable_special_discounts');
  48.         /* Para traer los países que aplican CASH con tarjeta para Lufthansa */
  49.         $stringLufthansaCountries $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('countries_in_cash_with_lufthansa');
  50.         if ($stringLufthansaCountries) {
  51.             $this->countriesInCashWithLufthansa json_decode($stringLufthansaCountries->getValue())->countries ?? [];
  52.         } else {
  53.             $this->countriesInCashWithLufthansa = [];
  54.         }
  55.         $agencyId $session->has('agencyId') ? $session->get('agencyId') : 1;
  56.         $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($agencyId);
  57.         $paymentMethods $this->managerRegistry->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethod::class)->findByCode(['pse''pseRest']);
  58.         $activePayments array_filter($paymentMethods, function($payment) use ($agency$em) {
  59.             $paymentMethodAgency $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)
  60.                 ->findOneBy(['agency' => $agency->getId(), 'paymentMethod' => $payment->getId()]);
  61.             return $payment->getIsactive() && $paymentMethodAgency && $paymentMethodAgency->getIsactive();
  62.         });
  63.         switch (count($activePayments)) {
  64.             case 0:
  65.                 $this->paymentMethod null;
  66.                 break;
  67.             case 1:
  68.                 $this->paymentMethod reset($activePayments);
  69.                 break;
  70.             default:
  71.                 $paymentMethod $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethod::class)->findOneByCode('pseRest');
  72.                 $this->paymentMethod $paymentMethod;
  73.                 break;
  74.         }
  75.     }
  76.     public function safetyUrlAction(Request $requestAviaturErrorHandler $errorHandlerTwigFolder $twigFolderSafetypayController $safetypayController)
  77.     {
  78.         $post $request->request;
  79.         $MerchantSalesID $post->get('merchant_id');
  80.         if (empty($MerchantSalesID)):
  81.             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No hay información')); else:
  82.             $safetyController $safetypayController->safetyNotify($MerchantSalesID);
  83.         if ('ok' == $safetyController) {
  84.             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Notificación SafetyPay''Transacción Exitosa, Notificación Recibida'));
  85.         } else {
  86.             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''Error de comunicación'));
  87.         }
  88.         endif;
  89.     }
  90.     public function safetyCallbackOkAction(SessionInterface $sessionParameterBagInterface $parameterBag)
  91.     {
  92.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  93.         $correlationId $session->get($session->get($transactionIdSessionName).'[flight]['.$transactionIdSessionName.']');
  94.         if (false !== strpos($correlationId'||')) {
  95.             $correlationIds explode('||'$correlationId);
  96.             foreach ($correlationIds as $key => $correlationId) {
  97.                 $return $this->safetyCallbackOk($correlationIdtrue$key);
  98.             }
  99.             return $return;
  100.         } else {
  101.             return $this->safetyCallbackOk($correlationIdfalse);
  102.         }
  103.     }
  104.     public function safetyCallbackOk(SessionInterface $sessionParameterBagInterface $parameterBagSafetypayController $safetypayControllerAviaturErrorHandler $errorHandlerAviaturEncoder $aviaturEncoderTwigFolder $twigFolderEmissionWebservice $emissionWebserviceInsuranceService $insuranceServiceOrderController $orderControllerAviaturExperienceService $aviaturExperienceServicePayoutExtraService $payoutExtraService, \Swift_Mailer $mailer$correlationId$combination$segment null)
  105.     {
  106.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  107.         $emailNotification $parameterBag->get('email_notification');
  108.         $status null;
  109.         $twig null;
  110.         $em $this->managerRegistry->getManager();
  111.         $safetypayController->safetyok();
  112.         if (true === $session->has($transactionIdSessionName)) {
  113.             $transactionId $session->get($transactionIdSessionName);
  114.             if ($combination) {
  115.                 if (true === $session->has($transactionId.'[flight][order'.$segment.']')) {
  116.                     $orderProductCode $session->get($transactionId.'[flight][order'.$segment.']');
  117.                 } else {
  118.                     return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró orden asociada a este pago'));
  119.                 }
  120.             } else {
  121.                 if (true === $session->has($transactionId.'[flight][order]')) {
  122.                     $orderProductCode $session->get($transactionId.'[flight][order]');
  123.                 } else {
  124.                     return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró orden asociada a este pago'));
  125.                 }
  126.             }
  127.             $productId str_replace('PN'''json_decode($orderProductCode)->products);
  128.             $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  129.             $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  130.             $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  131.             $recordData = new \stdClass();
  132.             $recordData->record = (string) $orderProduct->getBooking();
  133.             $response $emissionWebservice->callServiceEmission('traer_reserva'$recordData$orderProduct->getId());
  134.             if (isset($response->originDestinationDetails) && isset($response->originDestinationDetails->itineraryInfo)) {
  135.                 foreach ($response->originDestinationDetails->itineraryInfo as $itinerary) {
  136.                     if (isset($itinerary->elementManagementItinerary->segmentName) && ('AIR' == (string) $itinerary->elementManagementItinerary->segmentName) && isset($itinerary->travelProduct->productDetails->identification) && ('ARNK' != (string) $itinerary->travelProduct->productDetails->identification)) {
  137.                         if ('HK' != (string) $itinerary->relatedProduct->status) {
  138.                             return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''El estado del tiquete no permite la emisión, por favor comunícate con nosotros a  los teléfonos 57 1 5879640 o 57 1 3821616 o  vía e-mail al correo soportepagoelectronico@aviatur.com.co 11'));
  139.                         }
  140.                     }
  141.                 }
  142.                 $payError $decodedResponse->payResponse->OperationResponse->ErrorManager->ErrorNumber->{'@content'};
  143.                 $notifyError $decodedResponse->notificationResponse->OperationActivityNotifiedResponse->ErrorManager->ErrorNumber->{'@content'};
  144.                 //Verificando que exista operación de pago
  145.                 if (isset($decodedResponse->payResponse->OperationResponse)) {
  146.                     $additionalQS '';
  147.                     //Verificando tipo de error en pago
  148.                     if (== $payError) {
  149.                         if ($combination) {
  150.                             $retryCount = (int) $session->get($transactionId.'[flight][retry'.$segment.']');
  151.                         } else {
  152.                             $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  153.                         }
  154.                         if ($combination) {
  155.                             $retryCount = (int) $session->get($transactionId.'[flight][retry'.$segment.']');
  156.                         } else {
  157.                             $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  158.                         }
  159.                         //Verificando tipo de error en notificación
  160.                         if (== $notifyError) {
  161.                             switch ($payError) {
  162.                                 case 0:
  163.                                     $twig 'aviatur_flight_payment_success_secure';
  164.                                     $status 'approved';
  165.                                     if ('rappi' == $orderProduct->getOrder()->getAgency()->getAssetsFolder()) {
  166.                                         $additionalQS '?bookingid='.$orderProduct->getBooking().'&total='.$decodedRequest->x_amount;
  167.                                     }
  168.                                     break;
  169.                                 case 2:
  170.                                     $twig 'aviatur_flight_payment_error_secure';
  171.                                     $status 'failed';
  172.                                     break;
  173.                             }
  174.                             $orderProduct->setStatus($status);
  175.                             $orderProduct->getOrder()->setStatus($status);
  176.                             $orderProduct->setUpdatingdate(new \DateTime());
  177.                             $orderProduct->getOrder()->setUpdatingdate(new \DateTime());
  178.                             //                            $em->persist($orderProduct);
  179.                             $em->flush();
  180.                             $agency $orderProduct->getOrder()->getAgency();
  181.                             $payoutExtraService->payoutExtrasCallback($twig$transactionId'flight'$agency$orderProduct);
  182.                             if ($session->has($transactionId.'[experience][payout_extra]')) {
  183.                                 $aviaturExperienceService->changeStatus($transactionId$status);
  184.                             }
  185.                             if (== $payError) {
  186.                                 $updateOrder $orderController->updatePaymentAction($orderProduct);
  187.                                 $emissionData json_decode($orderProduct->getEmissiondata());
  188.                                 $emissionData->CorrelationId $correlationId;
  189.                                 $response $emissionWebservice->callServiceEmission('emitir_cash_officeid'$emissionData$orderProduct);
  190.                                 $emissionXml $orderController->emissionDataAction($response);
  191.                                 if ($session->has($transactionId.'[assist][payout_extra]') && (false === $session->has($transactionId.'[assist][Emision]'))) {
  192.                                     $orderInsurance json_decode($session->get($transactionId.'[assist][order]'));
  193.                                     $EmisionTarjeta $insuranceService->EmisionTarjeta($orderInsurance);
  194.                                     $session->set($transactionId.'[assist][Emision]'$EmisionTarjeta->asXml());
  195.                                     $insuranceService->changeStatus($status$orderInsurance);
  196.                                 }
  197.                                 if ($session->has($transactionId.'[experience][payout_extra]')) {
  198.                                     $payoutExtrasValues json_decode($session->get($transactionId.'[flight][payout_extra_values]'));
  199.                                     foreach ($payoutExtrasValues as $key => $payoutExtraValues) {
  200.                                         if ('EXPERIENCE' == $payoutExtraValues->name) {
  201.                                             $orderInfoExperience json_decode($session->get($transactionId.'[experience][order'.$key.']'));
  202.                                             $productIdExperience str_replace('PN'''$orderInfoExperience->products);
  203.                                             $orderProductExperience $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdExperience);
  204.                                             $EmisionTarjeta $aviaturExperienceService->EmitirSolicitud($orderProductExperiencenulltrue);
  205.                                         }
  206.                                     }
  207.                                 }
  208.                                 if ('error' != $emissionXml) {
  209.                                     $updatePaymentXml $orderProduct->getUpdatepaymentdata();
  210.                                     $updatePayment explode('<booking_id2/>'$updatePaymentXml);
  211.                                     $orderProduct->setUpdatepaymentdata($updatePayment[0].'<booking_id2/>'.$emissionXml.$updatePayment[1]);
  212.                                     if ($combination) {
  213.                                         $session->set($transactionId.'[emission'.$segment.']'$response->asXML());
  214.                                     } else {
  215.                                         $session->set($transactionId.'[emission]'$response->asXML());
  216.                                     }
  217.                                 } else {
  218.                                     if (isset($emissionData->tarjeta)) {
  219.                                         unset($emissionData->tarjeta);
  220.                                         unset($emissionData->franquicia);
  221.                                         unset($emissionData->codigo_auth);
  222.                                         unset($emissionData->fecha_vencmiento);
  223.                                     }
  224.                                     $mailInfo print_r($emissionDatatrue).'<br>'.print_r($responsetrue);
  225.                                     $message = (new \Swift_Message())
  226.                                             ->setContentType('text/html')
  227.                                             ->setFrom($session->get('emailNoReply'))
  228.                                             ->setTo(['soportepagoelectronico@aviatur.com.co''soptepagelectronic@aviatur.com'])
  229.                                             ->setBcc([$emailNotification'soportepagoelectronico@aviatur.com.co''soptepagelectronic@aviatur.com'])
  230.                                             ->setSubject('Fallo de Emisión')
  231.                                             ->setBody($mailInfo);
  232.                                     $mailer->send($message);
  233.                                     $session->set($transactionId.'[emission][error]'true);
  234.                                     $urlResume $this->generateUrl($twig);
  235.                                     $urlResume .= $additionalQS;
  236.                                     return $this->redirect($urlResume);
  237.                                 }
  238.                             }
  239.                         } else {
  240.                             echo 'En este momento su #<referencia de factura> presenta un proceso de pago cuya transacción se encuentra
  241.                             PENDIENTE de recibir información por parte de su entidad financiera, por favor espere
  242.                             unos minutos y vuelva a consultar mas tarde para verificar sí su pago fue confirmado de
  243.                             forma exitosa. Si desea mayor información sobre el estado actual de su operación puede
  244.                             comunicarse a nuestras líneas de atención al cliente al teléfono XXXXXX o enviar
  245.                             inquietudes al email mispagos@micomercio.com y pregunte por el estado de la
  246.                             transacción <#CUS> .';
  247.                             $orderProduct->setEmissiondata('error');
  248.                             $orderProduct->setUpdatingdate(new \DateTime());
  249.                             $em->persist($orderProduct);
  250.                             $em->flush();
  251.                             if ($session->has($transactionId.'[assist][payout_extra]')) {
  252.                                 $orderInsurance json_decode($session->get($transactionId.'[assist][order]'));
  253.                                 $insuranceService->changeStatus($status$orderInsurance);
  254.                             }
  255.                             $twig 'aviatur_flight_payment_error_secure';
  256.                         }
  257.                         if ($combination) {
  258.                             $session->set($transactionId.'[flight][retry'.$segment.']'$retryCount 1);
  259.                         } else {
  260.                             $session->set($transactionId.'[flight][retry]'$retryCount 1);
  261.                         }
  262.                         $urlResume $this->generateUrl($twig);
  263.                         $urlResume .= $additionalQS;
  264.                         return $this->redirect($urlResume);
  265.                     } else {
  266.                         $decodedResponse->payResponse->OperationResponse->ListOfOperations $paymentResponse;
  267.                         $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
  268.                         $orderProduct->setUpdatingdate(new \DateTime());
  269.                         $em->persist($orderProduct);
  270.                         $em->flush();
  271.                         return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''Ocurrió un error al consultar el estado de la transacción'));
  272.                     }
  273.                 } else {
  274.                     return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró información de la transacción'));
  275.                 }
  276.             } else {
  277.                 return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''El estado del tiquete no permite la emisión, por favor comunícate con nosotros a  los teléfonos 57 1 5879640 o 57 1 3821616 o  vía e-mail al correo soportepagoelectronico@aviatur.com.co22'));
  278.             }
  279.         } else {
  280.             return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró identificador de la transacción'));
  281.         }
  282.     }
  283.     public function safetyCallbackErrorAction(SessionInterface $sessionParameterBagInterface $parameterBag)
  284.     {
  285.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  286.         $correlationId $session->get($session->get($transactionIdSessionName).'[flight]['.$transactionIdSessionName.']');
  287.         if (false !== strpos($correlationId'||')) {
  288.             $correlationIds explode('||'$correlationId);
  289.             foreach ($correlationIds as $key => $correlationId) {
  290.                 $return $this->safetyCallbackError($correlationIdtrue$key);
  291.             }
  292.             return $return;
  293.         } else {
  294.             return $this->safetyCallbackError($correlationIdfalse);
  295.         }
  296.     }
  297.     public function safetyCallbackError(SessionInterface $sessionParameterBagInterface $parameterBagAviaturErrorHandler $errorHandlerAviaturEncoder $aviaturEncoderTwigFolder $twigFolder$correlationId$combination$segment null)
  298.     {
  299.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  300.         $status null;
  301.         $em $this->managerRegistry->getManager();
  302.         $transactionId $session->get($transactionIdSessionName);
  303.         if ($combination) {
  304.             if (true === $session->has($transactionId.'[flight][order'.$segment.']')) {
  305.                 $orderProductCode $session->get($transactionId.'[flight][order'.$segment.']');
  306.                 $retryCount = (int) $session->get($transactionId.'[flight][retry'.$segment.']');
  307.             } else {
  308.                 return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró orden asociada a este pago'));
  309.             }
  310.         } else {
  311.             if (true === $session->has($transactionId.'[flight][order]')) {
  312.                 $orderProductCode $session->get($transactionId.'[flight][order]');
  313.                 $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  314.             } else {
  315.                 return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró orden asociada a este pago'));
  316.             }
  317.         }
  318.         $productId str_replace('PN'''json_decode($orderProductCode)->products);
  319.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  320.         $payResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayResponse(), $orderProduct->getPublicKey()));
  321.         $payRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayRequest(), $orderProduct->getPublicKey()));
  322.         $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($payResponse), $orderProduct->getPublicKey()));
  323.         if ('baloto' == $payRequest->dataTransf->x_payment_data) {
  324.             $status 'pending';
  325.             $payResponse->dataTransf->x_response_code 100;
  326.             $payResponse->dataTransf->x_response_reason_text = (string) 'Transaction Pending';
  327.         } elseif ('safety' == $payRequest->dataTransf->x_payment_data) {
  328.             $status 'rejected';
  329.             $payResponse->dataTransf->x_response_code 100;
  330.             $payResponse->dataTransf->x_response_reason_text = (string) 'Transaction Expired';
  331.         }
  332.         $orderProduct->setStatus($status);
  333.         $orderProduct->setUpdatingdate(new \DateTime());
  334.         $orderProduct->getOrder()->setUpdatingdate(new \DateTime());
  335.         $order $em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($orderProduct->getOrder()->getId());
  336.         $order->setStatus($status);
  337.         //        $em->persist($order);
  338.         //        $em->persist($orderProduct);
  339.         if ($session->has($transactionId.'[assist][payout_extra]')) {
  340.             $orderProductCodeInsurance $session->get($transactionId.'[assist][order]');
  341.             $productIdInsurance str_replace('PN'''json_decode($orderProductCodeInsurance)->products);
  342.             $orderProductInsurance $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdInsurance);
  343.             $orderProductInsurance->setStatus($status);
  344.             $orderProductInsurance->setUpdatingdate(new \DateTime());
  345.             $orderProductInsurance->getOrder()->setUpdatingdate(new \DateTime());
  346.             $orderInsurance $em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($orderProductInsurance->getOrder()->getId());
  347.             $orderInsurance->setStatus($status);
  348.         //            $em->persist($orderInsurance);
  349.         }
  350.         $em->flush();
  351.         if ($combination) {
  352.             $session->set($transactionId.'[flight][retry'.$segment.']'$retryCount 1);
  353.         } else {
  354.             $session->set($transactionId.'[flight][retry]'$retryCount 1);
  355.         }
  356.         return $this->redirect($this->generateUrl('aviatur_flight_payment_rejected_secure'));
  357.     }
  358.     public function worldCallbackAction(SessionInterface $sessionParameterBagInterface $parameterBagAviaturErrorHandler $errorHandlerAviaturEncoder $aviaturEncoderTwigFolder $twigFolderEmissionWebservice $emissionWebserviceInsuranceService $insuranceServiceOrderController $orderControllerAviaturExperienceService $aviaturExperienceServicePayoutExtraService $payoutExtraService, \Swift_Mailer $mailer)
  359.     {
  360.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  361.         $correlationId $session->get($session->get($transactionIdSessionName).'[flight]['.$transactionIdSessionName.']');
  362.         if (false !== strpos($correlationId'||')) {
  363.             $correlationIds explode('||'$correlationId);
  364.             foreach ($correlationIds as $key => $correlationId) {
  365.                 $return $this->worldCallback($session$parameterBag$errorHandler$aviaturEncoder$twigFolder$emissionWebservice$insuranceService$orderController$aviaturExperienceService$payoutExtraService$mailer$correlationIdtrue$key);
  366.             }
  367.             return $return;
  368.         } else {
  369.             return $this->worldCallback($session$parameterBag$errorHandler$aviaturEncoder$twigFolder$emissionWebservice$insuranceService$orderController$aviaturExperienceService$payoutExtraService$mailer$correlationIdfalse);
  370.         }
  371.     }
  372.     public function worldCallback(SessionInterface $sessionParameterBagInterface $parameterBagAviaturErrorHandler $errorHandlerAviaturEncoder $aviaturEncoderTwigFolder $twigFolderEmissionWebservice $emissionWebserviceInsuranceService $insuranceServiceOrderController $orderControllerAviaturExperienceService $aviaturExperienceServicePayoutExtraService $payoutExtraService, \Swift_Mailer $mailer$correlationId$combination$segment null)
  373.     {
  374.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  375.         $emailNotification $parameterBag->get('email_notification');
  376.         $em $this->managerRegistry->getManager();
  377.         $agencyFolder $twigFolder->twigFlux();
  378.         $transactionId $session->get($transactionIdSessionName);
  379.         if ($combination) {
  380.             $prepaymentInfo = \simplexml_load_string((string) $session->get($transactionId.'[flight][prepayment'.$segment.']'));
  381.             $orderProductCode $session->get($transactionId.'[flight][order'.$segment.']');
  382.         } else {
  383.             $prepaymentInfo = \simplexml_load_string($session->get($transactionId.'[flight][prepayment]'));
  384.             $orderProductCode $session->get($transactionId.'[flight][order]');
  385.         }
  386.         $productId str_replace('PN'''json_decode($orderProductCode)->products);
  387.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  388.         $agency $orderProduct->getOrder()->getAgency();
  389.         $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  390.         $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  391.         if (null != $decodedResponse) {
  392.             if ($combination) {
  393.                 $retryCount = (int) $session->get($transactionId.'[flight][retry'.$segment.']');
  394.             } else {
  395.                 $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  396.             }
  397.             $twig '';
  398.             $infoEmission $decodedRequest->x_first_name.' '.$decodedRequest->x_last_name.'/'
  399.                     .$decodedRequest->x_address.'/'
  400.                     .$decodedRequest->x_cust_id.'/'
  401.                     .$decodedRequest->x_phone.'/'
  402.                     .$decodedRequest->x_email;
  403.             if (isset($decodedRequest->x_service_fee_base)) {
  404.                 $valuesEmission 'TA:'.number_format($decodedRequest->x_service_fee_base0'.''')
  405.                         .'/ITA:'.number_format($decodedRequest->x_service_fee_tax0'.''')
  406.                         .'/TAX:'.number_format($decodedRequest->x_tax0'.''')
  407.                         .'/VB:'.number_format($decodedRequest->x_amount_base0'.''')
  408.                         .'/AT:'.number_format($decodedRequest->x_airport_tax0'.''');
  409.             } else {
  410.                 $valuesEmission '/TAX:'.number_format($decodedRequest->x_tax0'.''')
  411.                         .'/VB:'.number_format($decodedRequest->x_amount_base0'.''')
  412.                         .'/AT:'.number_format($decodedRequest->x_airport_tax0'.''');
  413.             }
  414.             $comision = (string) 1;
  415.             $configFlightAgency $em->getRepository(\Aviatur\FlightBundle\Entity\ConfigFlightAgency::class)->findOneBy(['agency' => $agency'provider' => $orderProduct->getProvider()]);
  416.             if ((null != $configFlightAgency) && (null != $configFlightAgency->getWsurl())) {
  417.                 $officeId $configFlightAgency->getOfficeid();
  418.             } else {
  419.                 $officeId $agency->getOfficeid();
  420.             }
  421.             if ('0XZA' == $officeId) {
  422.                 $valuesEmission .= '/IATA:76522552';
  423.             }
  424.             if (isset($decodedResponse->x_response_code_cyber) && (== $decodedResponse->x_response_code_cyber)) {
  425.                 $decodedResponse->x_response_code_case 99;
  426.             } else {
  427.                 if (isset($decodedResponse->resultado->reply->orderStatus->payment->lastEvent)) {
  428.                     $decodedResponse->x_response_code_case = (string) $decodedResponse->resultado->reply->orderStatus->payment->lastEvent;
  429.                 } elseif (isset($decodedResponse->resultado->reply->orderStatusEvent->payment->lastEvent)) {
  430.                     $decodedResponse->x_response_code_case 'REFUSED';
  431.                 } elseif (isset($decodedResponse->resultado->reply->error)) {
  432.                     $decodedResponse->x_response_code_case 'REFUSED';
  433.                 }
  434.             }
  435.             switch ($decodedResponse->x_response_code_case) {
  436.                 case 99:
  437.                     $twig 'aviatur_flight_payment_rejected_secure';
  438.                     break;
  439.                 case 'ERROR':
  440.                     $twig 'aviatur_flight_payment_error_secure';
  441.                     break;
  442.                 case 'AUTHORISED':
  443.                     $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  444.                     $twig 'aviatur_flight_payment_success_secure';
  445.                     $franchise $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->findOneByWorldpaycode($decodedResponse->x_franchise);
  446.                     // Sin dispersion de fondos
  447.                     $emissionData = new \stdClass();
  448.                     $emissionData->record $orderProduct->getBooking();
  449.                     $emissionData->comision $comision;
  450.                     $serviceName 'emitir_cash_officeid';
  451.                     //$serviceName = $orderProduct->getProvider()->getName() == 'sabre-ndc-qa' ? 'emitir_cash_officeid_ndc': 'emitir_cash_officeid';
  452.                     $emissionData->email = (string) $decodedRequest->x_email;
  453.                     $emissionData->datos_facturacion = (string) $infoEmission;
  454.                     $emissionData->valores_adicionales = (string) $valuesEmission;
  455.                     // YARED COMMENT esta validacion es una mierda pero es culpa de sabre entonces tendremos que quitarla algun dia
  456.                     $emissionData->OfficeID $officeId;
  457.                     $orderProduct->getProvider()->getName() == 'sabre-ndc-qa' $emissionData->officeID $officeId $emissionData->OfficeID $officeId;
  458.                    /*  //Aqui se realiza la emision
  459.                     $response = $emissionWebservice->callServiceEmission($serviceName, $emissionData, $orderProduct->getId());
  460.                     //Aqui va ancillaries con worldpay
  461.                     $vectorAncillariesData = $orderProduct->getOrder()->getAncillariesOrder();
  462.                     if(sizeof($vectorAncillariesData) > 0){
  463.                         $ancillariesData = $vectorAncillariesData[0]->getData();
  464.                     } else {
  465.                         $ancillariesData = null;
  466.                     }
  467.                     if(isset($ancillariesData) && !is_null($ancillariesData)) {
  468.                         $ancillariesProcessedData = $this->processAncillariesData($ancillariesData, $correlationId);
  469.                         $ticketingVendor = $prepaymentInfo->Message->OTA_AirBookRS->AirReservation->Ticketing->TicketingVendor;
  470.                         $airlineCodeTicketing = isset($ticketingVendor['CodeContext']) ? (string) $ticketingVendor['CodeContext'] : (string) $ticketingVendor['Code'];
  471.                         if(false !== strpos($airlineCodeTicketing, '-')){
  472.                             $arrayAirlineCode = explode('-', $airlineCodeTicketing);
  473.                             $airlineCodeTicketing = $arrayAirlineCode[1];
  474.                         }
  475.                         $ticketingVendorAirline = $em->getRepository(\Aviatur\FlightBundle\Entity\Airline::class)->findOneByIata($airlineCodeTicketing);
  476.                         $airlineIdVendor = $ticketingVendorAirline->getId();
  477.                         $emissionXml = $orderController->emissionDataAction($response, $ancillariesProcessedData, $orderProduct, $airlineIdVendor);
  478.                     } else {
  479.                         $emissionXml = $orderController->emissionDataAction($response);
  480.                     } */
  481.                     $response $emissionWebservice->callServiceEmission($serviceName$emissionData$orderProduct->getId());
  482.                     $emissionXml $orderController->emissionDataAction($response);
  483.                     //Fin ancillaries con worldpay
  484.                     $orderProduct->setEmissiondata(json_encode($emissionData));
  485.                     $orderProduct->setUpdatingdate(new \DateTime());
  486.                     $em->persist($orderProduct);
  487.                     $em->flush();
  488.                     if ((true === $session->has($transactionId.'[assist][payout_extra]')) && (false === $session->has($transactionId.'[assist][Emision]'))) {
  489.                         $orderInsurance json_decode($session->get($transactionId.'[assist][order]'));
  490.                         $productInsurance str_replace('PN'''$orderInsurance->products);
  491.                         $orderProductInsurance $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productInsurance);
  492.                         $decodedResponseInsurance json_decode($aviaturEncoder->AviaturDecode($orderProductInsurance->getPayresponse(), $orderProductInsurance->getPublicKey()));
  493.                         if (isset($decodedResponseInsurance->x_response_code) && == $decodedResponseInsurance->x_response_code) {
  494.                             $EmisionTarjeta $insuranceService->EmisionTarjeta($orderInsurance);
  495.                             $session->set($transactionId.'[assist][Emision]'$EmisionTarjeta->asXml());
  496.                             $insuranceService->changeStatus('approved'$orderInsurance);
  497.                         }
  498.                     }
  499.                     if ($session->has($transactionId.'[experience][payout_extra]')) {
  500.                         $payoutExtrasValues json_decode($session->get($transactionId.'[flight][payout_extra_values]'));
  501.                         foreach ($payoutExtrasValues as $payoutExtraValues) {
  502.                             if ('EXPERIENCE' == $payoutExtraValues->name) {
  503.                                 $orderInfoExperience json_decode($session->get($transactionId.'[experience][order'.$payoutExtraValues->id.']'));
  504.                                 $productIdExperience str_replace('PN'''$orderInfoExperience->products);
  505.                                 $orderProductExperience $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdExperience);
  506.                                 if (isset($orderProductExperience->x_response_code) && == $orderProductExperience->x_response_code) {
  507.                                     $EmitirSolicitud $aviaturExperienceService->EmitirSolicitud($orderProductExperiencenulltrue);
  508.                                 }
  509.                             }
  510.                         }
  511.                     }
  512.                     if ('error' != $emissionXml) {
  513.                         if ($combination) {
  514.                             $session->set($transactionId.'[emission'.$segment.']'$response->asXML());
  515.                         } else {
  516.                             $session->set($transactionId.'[emission]'$response->asXML());
  517.                         }
  518.                         $updatePaymentXml $orderProduct->getUpdatepaymentdata();
  519.                         if (false === strpos($updatePaymentXml'<emission_data>')) {
  520.                             $updatePayment explode('<booking_id2/>'$updatePaymentXml);
  521.                             $orderProduct->setUpdatepaymentdata($updatePayment[0].'<booking_id2/>'.$emissionXml.$updatePayment[1]);
  522.                             $em->persist($orderProduct);
  523.                             $em->flush();
  524.                         }
  525.                     } else {
  526.                         if (isset($emissionData->tarjeta)) {
  527.                             unset($emissionData->tarjeta);
  528.                             unset($emissionData->franquicia);
  529.                             unset($emissionData->codigo_auth);
  530.                             unset($emissionData->fecha_vencmiento);
  531.                         }
  532.                         $mailInfo print_r($emissionDatatrue).'<br>'.print_r($responsetrue);
  533.                         $message = (new \Swift_Message())
  534.                                 ->setContentType('text/html')
  535.                                 ->setFrom($session->get('emailNoReply'))
  536.                                 ->setTo(['soportepagoelectronico@aviatur.com.co''soptepagelectronic@aviatur.com'])
  537.                                 ->setBcc($emailNotification)
  538.                                 ->setSubject('Fallo de Emisión')
  539.                                 ->setBody($mailInfo);
  540.                         $mailer->send($message);
  541.                         $session->set($transactionId.'[emission][error]'true);
  542.                         return $this->redirect($this->generateUrl($twig));
  543.                     }
  544.                     break;
  545.                 case 'REFUSED':
  546.                     $twig '' != $twig $twig 'aviatur_flight_payment_rejected_secure';
  547.                     break;
  548.                 default:
  549.                     $twig '' != $twig $twig 'aviatur_flight_payment_pending_secure';
  550.                     $franchise $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->
  551.                             findOneByWorldpaycode(str_replace(['CR_''RM_''CDNSA'], ['''''CS'], $decodedResponse->x_franchise));
  552.                     // Sin dispersion de fondos
  553.                     $emissionData = new \stdClass();
  554.                     //                    $emissionData->record = '59RJO7';
  555.                     $emissionData->record $orderProduct->getBooking();
  556.                     $emissionData->comision $comision;
  557.                     $emissionData->email = (string) $decodedRequest->x_email;
  558.                     $emissionData->datos_facturacion = (string) $infoEmission;
  559.                     $emissionData->valores_adicionales = (string) $valuesEmission;
  560.                     $emissionData->OfficeID $officeId;
  561.                     $orderProduct->setEmissiondata(json_encode($emissionData));
  562.                     $orderProduct->setUpdatingdate(new \DateTime());
  563.                     $em->persist($orderProduct);
  564.                     $em->flush();
  565.                     $retryCount 1;
  566.                     break;
  567.             }
  568.             if ($combination) {
  569.                 $session->set($transactionId.'[flight][retry'.$segment.']'$retryCount 1);
  570.             } else {
  571.                 $session->set($transactionId.'[flight][retry]'$retryCount 1);
  572.             }
  573.             $payoutExtraService->payoutExtrasCallback($twig$transactionId'flight'$agency$orderProduct);
  574.             return $this->redirect($this->generateUrl($twig));
  575.         } else {
  576.             $orderProduct->setStatus('pending');
  577.             $em->persist($orderProduct);
  578.             $em->flush();
  579.             $session->set('redirectedRetry'true);
  580.             return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_flight_retry_secure'), '''No hay respuesta por parte del servicio de pagoa'));
  581.         }
  582.     }
  583.     public function daviviendaCallbackAction(SessionInterface $sessionParameterBagInterface $parameterBag)
  584.     {
  585.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  586.         $correlationId $session->get($session->get($transactionIdSessionName).'[flight]['.$transactionIdSessionName.']');
  587.         if (false !== strpos($correlationId'||')) {
  588.             $correlationIds explode('||'$correlationId);
  589.             foreach ($correlationIds as $key => $correlationId) {
  590.                 $return $this->daviviendaCallback($correlationIdtrue$key);
  591.             }
  592.             return $return;
  593.         } else {
  594.             return $this->daviviendaCallback($correlationIdfalse);
  595.         }
  596.     }
  597.     public function daviviendaCallback(SessionInterface $sessionParameterBagInterface $parameterBagAviaturErrorHandler $errorHandlerAviaturEncoder $aviaturEncoderEmissionWebservice $emissionWebserviceOrderController $orderControllerPayoutExtraService $payoutExtraService, \Swift_Mailer $mailerTokenizerService $tokenizerServiceValidateSanctions $validateSanctions$correlationId$combination$segment null)
  598.     {
  599.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  600.         $emailNotification $parameterBag->get('email_notification');
  601.         $webmasterEmail $parameterBag->get('webmaster_email');
  602.         $subject null;
  603.         $em $this->managerRegistry->getManager();
  604.         $transactionId $session->get($transactionIdSessionName);
  605.         if ($combination) {
  606.             $prepaymentInfo = \simplexml_load_string($session->get($transactionId.'[flight][prepayment'.$segment.']'));
  607.             $orderProductCode $session->get($transactionId.'[flight][order'.$segment.']');
  608.         } else {
  609.             $prepaymentInfo = \simplexml_load_string($session->get($transactionId.'[flight][prepayment]'));
  610.             $orderProductCode $session->get($transactionId.'[flight][order]');
  611.         }
  612.         $productId str_replace('PN'''json_decode($orderProductCode)->products);
  613.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  614.         $agency $orderProduct->getOrder()->getAgency();
  615.         $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  616.         $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  617.         if (null != $decodedResponse) {
  618.             if ($combination) {
  619.                 $airlineValidation $em->getRepository(\Aviatur\FlightBundle\Entity\AirlineValidation::class)->find($session->get($transactionId.'[airline_validation'.$segment.']'));
  620.                 $retryCount = (int) $session->get($transactionId.'[flight][retry'.$segment.']');
  621.             } else {
  622.                 $airlineValidation $em->getRepository(\Aviatur\FlightBundle\Entity\AirlineValidation::class)->find($session->get($transactionId.'[airline_validation]'));
  623.                 $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  624.             }
  625.             $twig '';
  626.             $additionalQS '';
  627.             $infoEmission $decodedRequest->x_first_name.' '.$decodedRequest->x_last_name.'/'
  628.                     .$decodedRequest->x_address.'/'
  629.                     .$decodedRequest->x_cust_id.'/'
  630.                     .$decodedRequest->x_phone.'/'
  631.                     .$decodedRequest->x_email;
  632.             if (isset($decodedRequest->x_service_fee_base)) {
  633.                 $valuesEmission 'TA:'.number_format($decodedRequest->x_service_fee_base0'.''')
  634.                         .'/ITA:'.number_format($decodedRequest->x_service_fee_tax0'.''')
  635.                         .'/TAX:'.number_format($decodedRequest->x_tax0'.''')
  636.                         .'/VB:'.number_format($decodedRequest->x_amount_base0'.''')
  637.                         .'/AT:'.number_format($decodedRequest->x_airport_tax0'.''');
  638.             } else {
  639.                 $valuesEmission '/TAX:'.number_format($decodedRequest->x_tax0'.''')
  640.                         .'/VB:'.number_format($decodedRequest->x_amount_base0'.''')
  641.                         .'/AT:'.number_format($decodedRequest->x_airport_tax0'.''');
  642.             }
  643.             $comision = (string) 1;
  644.             $airlinesSpecialComision = [
  645.                 'CZ',
  646.                 'DT',
  647.                 'EK',
  648.             ];
  649.             $validatingAirline $airlineValidation->getAirline()->getIata();
  650.             if (in_array($validatingAirline$airlinesSpecialComision)) {
  651.                 if (('CZ' == $validatingAirline) || ('DT' == $validatingAirline)) {
  652.                     $comision = (string) 3;
  653.                 }
  654.                 if ('EK' == $validatingAirline) {
  655.                     $comision = (string) 4;
  656.                 }
  657.             }
  658.             $pricedItinerary $prepaymentInfo->Message->OTA_AirBookRS->AirReservation;
  659.             $airlinePaymentType = (isset($decodedRequest->x_points_complete) && $decodedRequest->x_points_complete) ? 'CASH' $airlineValidation->getPaymentType();
  660.             $emailData json_decode($orderProduct->getEmail(), true);
  661.             $journeySummary $emailData['journeySummaries']['0'];
  662.             $originCityCode $journeySummary['originCode'];
  663.             $city $em->getRepository(\Aviatur\SearchBundle\Entity\SearchCities::class)->findOneByIata($originCityCode);
  664.             if (null == $city) {
  665.                 $city $em->getRepository(\Aviatur\SearchBundle\Entity\SearchAirports::class)->findOneByIata($originCityCode);
  666.             }
  667.             if (null != $city) {
  668.                 $originCountry $city->getCountrycode();
  669.                 if ('LH' == $validatingAirline && in_array($originCountry$this->countriesInCashWithLufthansa)) {
  670.                     $airlinePaymentType 'CASH';
  671.                 }
  672.             }
  673.             $configFlightAgency $em->getRepository(\Aviatur\FlightBundle\Entity\ConfigFlightAgency::class)->findOneBy(['agency' => $agency'provider' => $orderProduct->getProvider()]);
  674.             if ((null != $configFlightAgency) && (null != $configFlightAgency->getWsurl())) {
  675.                 $officeId $configFlightAgency->getOfficeid();
  676.             } else {
  677.                 $officeId $agency->getOfficeid();
  678.             }
  679.             if ('0XZA' == $officeId) {
  680.                 $valuesEmission .= '/IATA:76522552';
  681.             }
  682.             if (isset($decodedResponse->x_response_code_cyber) && (== $decodedResponse->x_response_code_cyber)) {
  683.                 $decodedResponse->x_response_code_case 99;
  684.             } else {
  685.                 $decodedResponse->x_response_code_case = ($decodedResponse->x_response_code ?? $decodedResponse->davivienda->x_response_code ?? '----');
  686.             }
  687.             $updatePaymentXml $orderProduct->getUpdatepaymentdata();
  688.             if (isset($decodedRequest->redemptionPoints) && isset($decodedRequest->daviviendaMinPoints) && $decodedRequest->redemptionPoints 0) {
  689.                 $pointRedemptionValue $decodedRequest->daviviendaMinPoints;
  690.             } else {
  691.                 $pointRedemptionValue 0;
  692.             }
  693.             $orderReference json_decode($orderProductCodetrue);
  694.             //guardamos las referencias de los 2 tickets/////////////////
  695.             $reference $orderReference['order'].'-'.$orderReference['products'];
  696.             if (!$session->has($transactionId.'[flight][references]')) {
  697.                 $session->set($transactionId.'[flight][references]'$reference);
  698.                 $references $session->get($transactionId.'[flight][references]');
  699.             } else {
  700.                 $references $session->get($transactionId.'[flight][references]').' + '.$reference;
  701.                 $session->set($transactionId.'[flight][references]'$references);
  702.             }
  703.             //guardamos los booking de los 2 tickets
  704.             if (!$session->has($transactionId.'[flight][bookings]')) {
  705.                 $session->set($transactionId.'[flight][bookings]'$orderProduct->getBooking());
  706.                 $bookings $session->get($transactionId.'[flight][bookings]');
  707.             } else {
  708.                 $bookings $session->get($transactionId.'[flight][bookings]').' + '.$orderProduct->getBooking();
  709.                 $session->get($transactionId.'[flight][bookings]'$bookings);
  710.             }
  711.             //////////////////////////////////////////////////////////////////////////////////////////////////
  712.             switch ($decodedResponse->x_response_code_case) {
  713.                 case 99:
  714.                     //rechazado cybersource
  715.                     $twig 'aviatur_flight_payment_rejected_secure';
  716.                     $statusP2P 'rejectCyber';
  717.                     // no break
  718.                 case 3:// pendiente p2p
  719.                     $twig '' != $twig $twig 'aviatur_flight_payment_pending_secure';
  720.                     $statusP2P 'pendigP2P';
  721.                     $orderProduct->setUpdatingdate(new \DateTime());
  722.                     $em->persist($orderProduct);
  723.                     $em->flush();
  724.                     $retryCount 1;
  725.                     break;
  726.                 case 0:// error p2p
  727.                     $twig 'aviatur_flight_payment_error_secure';
  728.                     $statusP2P 'errorP2P';
  729.                     if ($session->has($transactionId.'[flight][key][redemptionPoints]')) {//si hay una combinación con puntos y uno de los ticketes sale rechazado se nos notificara por correo
  730.                         if (isset($email)) {
  731.                             $from 'noreply@aviatur.com';
  732.                             $subject 'Combinación rechazada de aviatur.com.co';
  733.                             $body '<b>ERROR EN LA PASARELA</b></br>Referencia Interna:'.$references.'</br>El banco rechazó la siguiente transacción: '.$bookings.'</br>Código de Autorización Redención: '.$session->get($transactionId.'[flight][key][redemptionPoints]').'<br>Total de puntos de la redención: '.$session->get($transactionId.'[flight][pointRedemptionValue]').'</br>Valor en peso de la redención: COP '.$session->get($transactionId.'[flight][pointRedemptionValue]') * $pointRedemptionValue.'</br>Transaction ID: '.$transactionId;
  734.                             $this->get('aviatur_ath_service')->sendEmail($from$email$subject$body); //llamar al servicio para envio de correo
  735.                         }
  736.                     }
  737.                     // no break
  738.                 case 2:// rechazada p2p
  739.                     $twig '' != $twig $twig 'aviatur_flight_payment_rejected_secure';
  740.                     $statusP2P 'rejectP2P';
  741.                     if ($session->has($transactionId.'[flight][key][redemptionPoints]')) {//si hay una combinación con puntos y uno de los tiketes sale rechazado se nos notificara por correo
  742.                         if (isset($email)) {
  743.                             $from 'noreply@aviatur.com';
  744.                             $subject 'Combinación rechazada de aviatur.com.co';
  745.                             $body '</br>Referencia Interna:'.$references.'</br>El banco rechazó la siguiente transacción: '.$bookings.'</br>Código de Autorización Redención: '.$session->get($transactionId.'[flight][key][redemptionPoints]').'<br>Total de puntos de la redención: '.$session->get($transactionId.'[flight][pointRedemptionValue]').'</br>Valor en peso de la redención: COP '.$session->get($transactionId.'[flight][pointRedemptionValue]') * $pointRedemptionValue.'</br>Transaction ID: '.$transactionId;
  746.                             $this->get('aviatur_ath_service')->sendEmail($from$email$subject$body); //llamar al servicio para envio de correo
  747.                         }
  748.                     }
  749.                     break;
  750.                 case 1:// aprobado p2p
  751.                     $emissionData = new \stdClass();
  752.                     $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  753.                     $twig 'aviatur_flight_payment_success_secure';
  754.                     if ('rappi' == $orderProduct->getOrder()->getAgency()->getAssetsFolder()) {
  755.                         $infoTotalAmount $decodedRequest->x_amount $decodedRequest->x_airport_tax $decodedRequest->x_service_fee;
  756.                         $additionalQS '?bookingid='.$bookings.'&total='.$infoTotalAmount;
  757.                     }
  758.                     $franchise $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->
  759.                             findOneByPaymentgatewaycode(str_replace(['CR_''RM_''CDNSA'], ['''''CS'], $decodedResponse->x_franchise));
  760.                     // Sin dispersion de fondos
  761.                     $emissionData->record $orderProduct->getBooking();
  762.                     $emissionData->comision $comision;
  763.                     $serviceName 'emitir_cash_officeid';
  764.                     //$serviceName = $orderProduct->getProvider()->getName() == 'sabre-ndc-qa' ? 'emitir_cash_officeid_ndc': 'emitir_cash_officeid';
  765.                     $special_emission false;
  766.                     if ($session->has($transactionId '[flight][special_emission_replace_iata]')) {//Precompra Aerolinea
  767.                         $special_emissions_params $session->get($transactionId '[flight][special_emission_replace_iata]');
  768.                         $ticketingVendor $prepaymentInfo->Message->OTA_AirBookRS->AirReservation->Ticketing->TicketingVendor;
  769.                         $airline_iata = isset($ticketingVendor['CodeContext']) ? (string) $ticketingVendor['CodeContext'] : (string) $ticketingVendor['Code'];
  770.                         if (isset($special_emissions_params['airlineReplaceCode']) && in_array($airline_iata$special_emissions_params['airlineRequired'])) {
  771.                             $special_emission true;
  772.                         }
  773.                     }
  774.                     // Dispersion de fondos
  775.                     if (('DISP' == $airlinePaymentType) && !isset($pricedItinerary->PriceInfo->ItinTotalFare->DispersionOverride) && !isset($decodedResponse->onlyRedemption) && !isset($decodedRequest->emitir_cash) && !$special_emission) {
  776.                         if (!isset($decodedRequest->combinedEmission)) {
  777.                             if (!isset($decodedRequest->davivienda->combinedEmission)) {
  778.                                 $emissionData->tarjeta = (string) $tokenizerService->getToken($decodedRequest->x_card_num);
  779.                                 $emissionData->franquicia = (string) $franchise->getEmissioncode();
  780.                                 $emissionData->codigo_auth = (string) $decodedResponse->x_approval_code;
  781.                                 $emissionData->fecha_vencmiento = (string) substr($decodedRequest->x_exp_date02).substr($decodedRequest->x_exp_date42);
  782.                                 $serviceName 'emitir_tc_officeid';
  783.                             } else {
  784.                                 $serviceName 'emitir_tc_Combinada_officeid';
  785.                                 if (null == $orderProduct->getEmissiondata() || '' == $orderProduct->getEmissiondata()) {
  786.                                     $orderController->dataEmisionCombinadaAction($prepaymentInfo->Message->OTA_AirBookRS->AirReservation$orderProduct$emissionData);
  787.                                 } else {
  788.                                     $emissionData json_decode($orderProduct->getEmissiondata());
  789.                                     $emissionData->comision $comision;
  790.                                 }
  791.                             }
  792.                         } else {
  793.                             $serviceName 'emitir_tc_Combinada_officeid';
  794.                             if (null == $orderProduct->getEmissiondata() || '' == $orderProduct->getEmissiondata()) {
  795.                                 $orderController->dataEmisionCombinadaAction($prepaymentInfo->Message->OTA_AirBookRS->AirReservation$orderProduct$emissionData);
  796.                             } else {
  797.                                 $emissionData json_decode($orderProduct->getEmissiondata());
  798.                                 $emissionData->comision $comision;
  799.                             }
  800.                         }
  801.                     }
  802.                     if ('emitir_tc_Combinada_officeid' != $serviceName) {
  803.                         $emissionData->datos_facturacion = (string) $infoEmission;
  804.                         $emissionData->valores_adicionales = (string) $valuesEmission;
  805.                     }
  806.                     $emissionData->email = (string) $decodedRequest->x_email;
  807.                     // YARED COMMENT esta validacion es una mierda perop es culpa de sabre entonces tendremos que quitarla algun dia
  808.                     $emissionData->OfficeID $officeId;
  809.                     $orderProduct->getProvider()->getName() == 'sabre-ndc-qa' $emissionData->officeID $officeId $emissionData->OfficeID $officeId;
  810.                     $response $emissionWebservice->callServiceEmission($serviceName$emissionData$orderProduct->getId());
  811.                     $emissionXml $orderController->emissionDataAction($response);
  812.                     $emissionData->tarjeta = (string) $decodedRequest->x_card_num;
  813.                     $orderProduct->setEmissiondata(json_encode($emissionData));
  814.                     $orderProduct->setUpdatingdate(new \DateTime());
  815.                     $em->flush();
  816.                     //                    if (($session->has($transactionId . '[assist][payout_extra]') === true) && ($session->has($transactionId . '[assist][Emision]') === false)) {
  817.                     //                        $orderInsurance = json_decode($session->get($transactionId . '[assist][order]'));
  818.                     //                        $productInsurance = str_replace('PN', '', $orderInsurance->products);
  819.                     //                        $orderProductInsurance = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productInsurance);
  820.                     //                        $decodedResponseInsurance = json_decode($this->get('aviatur_md5')->AviaturDecode($orderProductInsurance->getPayresponse(), $orderProductInsurance->getPublicKey()));
  821.                     //                        if (isset($decodedResponseInsurance->x_response_code) && $decodedResponseInsurance->x_response_code == 1) {
  822.                     //                            $EmisionTarjeta = $this->get('insurance_service')->EmisionTarjeta($orderInsurance);
  823.                     //                            $session->set($transactionId . '[assist][Emision]', $EmisionTarjeta->asXml());
  824.                     //                            $this->get('insurance_service')->changeStatus('approved', $orderInsurance);
  825.                     //                        }
  826.                     //                    }
  827.                     //
  828.                     //                    if ($session->has($transactionId . '[experience][payout_extra]')) {
  829.                     //                        $payoutExtrasValues = json_decode($session->get($transactionId . '[flight][payout_extra_values]'));
  830.                     //                        foreach ($payoutExtrasValues as $key => $payoutExtraValues) {
  831.                     //                            if ($payoutExtraValues->name == 'EXPERIENCE') {
  832.                     //                                if (!$session->has($transactionId . '[experience][Emision' . $key . ']') && $session->has($transactionId . '[experience][Emision' . $key . ']') === false) {
  833.                     //                                    $orderInfoExperience = json_decode($session->get($transactionId . '[experience][order' . $key . ']'));
  834.                     //                                    $productIdExperience = str_replace('PN', '', $orderInfoExperience->products);
  835.                     //                                    $orderProductExperience = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdExperience);
  836.                     //                                    $decodedResponseExperience = json_decode($this->get('aviatur_md5')->AviaturDecode($orderProductExperience->getPayresponse(), $orderProductExperience->getPublicKey()));
  837.                     //                                    if (isset($decodedResponseExperience->x_response_code) && $decodedResponseExperience->x_response_code == 1) {
  838.                     //                                        $this->get('experience_service')->EmitirSolicitud($orderProductExperience, $key, true);
  839.                     //                                    }
  840.                     //                                }
  841.                     //                            }
  842.                     //                        }
  843.                     //                    }
  844.                     $updatePayment explode('<booking_id2/>'$updatePaymentXml);
  845.                     if ('error' != $emissionXml) {
  846.                         if ($combination) {
  847.                             $session->set($transactionId.'[emission'.$segment.']'$response->asXML());
  848.                         } else {
  849.                             $session->set($transactionId.'[emission]'$response->asXML());
  850.                         }
  851.                         if (false === strpos($updatePaymentXml'<emission_data>')) {
  852.                             $orderProduct->setUpdatepaymentdata($updatePayment[0].'<booking_id2/>'.$emissionXml.$updatePayment[1]);
  853.                             $em->persist($orderProduct);
  854.                             $em->flush();
  855.                         }
  856.                     } else {
  857.                         if (isset($emissionData->tarjeta)) {
  858.                             unset($emissionData->tarjeta);
  859.                             unset($emissionData->franquicia);
  860.                             unset($emissionData->codigo_auth);
  861.                             unset($emissionData->fecha_vencmiento);
  862.                         }
  863.                         $mailInfo print_r($emissionDatatrue).'<br>'.print_r($responsetrue);
  864.                         $mailBcc = [$emailNotification];
  865.                         if ($session->has($transactionId.'[usingDaviviendaPoints]') && isset($decodedRequest->redemptionPoints)) {
  866.                             $mailBcc = [$emailNotification$webmasterEmail];
  867.                             if (isset($emissionData->tarjeta1)) {
  868.                                 unset($emissionData->tarjeta1);
  869.                                 unset($emissionData->franquicia1);
  870.                                 unset($emissionData->codigo_auth1);
  871.                                 unset($emissionData->fecha_vencmiento1);
  872.                             }
  873.                             if (isset($decodedRequest->combinedEmission) || isset($decodedRequest->davivienda->combinedEmission)) {
  874.                                 $messageMixedPayment ' y otra parte con tarjeta de crédito, se debe realiza emisión con pago combinado colocando el pago en Puntos como cash.<br><br>';
  875.                                 $messagePointPayment 'unicamente, no se generó pago con tarjeta de crédito por lo que la emisión de la misma se realiza en cash.<br><br>';
  876.                                 $messagePayment = isset($decodedRequest->onlyRedemption) ? $messagePointPayment $messageMixedPayment;
  877.                                 $mailInfo print_r('Esta reserva fue pagada con puntos Davivienda ('.$decodedRequest->redemptionPoints.') 'true).$messagePayment.$mailInfo;
  878.                             }
  879.                         }
  880.                         $message = (new \Swift_Message())
  881.                                 ->setContentType('text/html')
  882.                                 ->setFrom($session->get('emailNoReply'))
  883.                                 //->setTo(['sergio.amaya@aviatur.com'])
  884.                                 ->setTo(['soportepagoelectronico@aviatur.com.co''soptepagelectronic@aviatur.com'])
  885.                                 ->setBcc($mailBcc)
  886.                                 ->setSubject('Fallo de Emision')
  887.                                 ->setBody($mailInfo);
  888.                         try {
  889.                             $mailer->send($message);
  890.                         } catch (\Exception $e) {
  891.                         }
  892.                         $session->set($transactionId.'[emission][error]'true);
  893.                         return $this->redirect($this->generateUrl($twig));
  894.                     }
  895.                     break;
  896.             }
  897.             if ($session->has($transactionId.'[usingDaviviendaPoints]') && $combination) {
  898.                 if (isset($statusP2P) && $segment 0) {
  899.                     $orderInfo json_decode($session->get($transactionId.'[flight][order0]'));
  900.                     $productId str_replace('PN'''$orderInfo->products);
  901.                     $orderProductObject $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  902.                     $bodyText 'Se generó un rechazo de pago para la reserva '.$bookings.', que se encuentra en combinación con la reserva '.$orderProductObject->getBooking().' generada con puntos Davivienda por favor completar el proceso manual ya que se debe encontrar emitida';
  903.                     switch ($statusP2P) {
  904.                         case 'rejectCyber':
  905.                             $subject 'Puntos Davivienda - Rechazo Cybersource';
  906.                             $bodyText 'Se generó un pago para la reserva '.$bookings.', pero fue rechazada por Cybersource, por favor tener encuenta que en caso de ser Improcedente por parte del departamento '
  907.                                     .'de Control Pago electrónico se debe dar manejo a la reserva '.$orderProductObject->getBooking().' emitida en combinación con puntos Davivienda ya se debe encontrar emitida.';
  908.                             break;
  909.                         case 'pendigP2P':
  910.                             $subject 'Puntos Davivienda - Transacción pendiente';
  911.                             break;
  912.                         case 'errorP2P':
  913.                         case 'rejectP2P':
  914.                             $subject 'Puntos Davivienda - Transacción rechazada / no realizada';
  915.                             break;
  916.                     }
  917.                     $message = (new \Swift_Message())
  918.                             ->setContentType('text/html')
  919.                             ->setFrom('noreply@aviatur.com.co')
  920.                             ->setTo('soptepagelectronic@aviatur.com')
  921.                             //->setTo(array('sergio.amaya@aviatur.com.co'))
  922.                             ->setSubject($subject)
  923.                             ->setBody($bodyText);
  924.                     $mailer->send($message);
  925.                 }
  926.             }
  927.             if ($combination) {
  928.                 $session->set($transactionId.'[flight][retry'.$segment.']'$retryCount 1);
  929.             } else {
  930.                 $session->set($transactionId.'[flight][retry]'$retryCount 1);
  931.             }
  932.             $payoutExtraService->payoutExtrasCallback($twig$transactionId'flight'$agency);
  933.             $urlResume $this->generateUrl($twig);
  934.             $urlResume .= $additionalQS;
  935.             //////// se envia el correo del modulo anti fraude en caso de ser necesario//////////
  936.             if ($session->has('Marked_name') && $session->has('Marked_document')) {
  937.                 $product 'Vuelo';
  938.                 $validateSanctions->sendMarkedEmail($orderProductCode$session$agency$orderProduct$transactionId$product);
  939.             }
  940.             ////////////////////////////////////////////////////////////////////////////////////
  941.             return $this->redirect($urlResume);
  942.         } else {
  943.             $orderProduct->setStatus('pending');
  944.             //            $em->persist($orderProduct);
  945.             $em->flush();
  946.             $session->set('redirectedRetry'true);
  947.             return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_flight_retry_secure'), '''No hay respuesta por parte del servicio de pagob'));
  948.         }
  949.     }
  950.     public function p2pCallbackAction(
  951.         SessionInterface $session,
  952.         ParameterBagInterface $parameterBag,
  953.         AviaturErrorHandler $errorHandler,
  954.         AviaturEncoder $aviaturEncoder,
  955.         TwigFolder $twigFolder,
  956.         CustomerMethodPaymentService $methodPaymentService,
  957.         TokenizerService $tokenizerService,
  958.         TokenStorageInterface $tokenStorage,
  959.         AviaturMailer $aviaturMailer,
  960.         EmissionWebservice $emissionWebservice,
  961.         InsuranceService $insuranceService,
  962.         OrderController $orderController,
  963.         AviaturExperienceService $aviaturExperienceService,
  964.         PayoutExtraService $payoutExtraService,
  965.         \Swift_Mailer $mailer,
  966.         AviaturLogSave $logSave,
  967.         ValidateSanctionsRenewal $validateSanctions,
  968.         P2PController $p2PController
  969.         )
  970.     {
  971.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  972.         $correlationId $session->get($session->get($transactionIdSessionName).'[flight]['.$transactionIdSessionName.']');
  973.         if (false !== strpos($correlationId'||')) {
  974.             $correlationIds explode('||'$correlationId);
  975.             foreach ($correlationIds as $key => $correlationIndivId) {
  976.                 $return $this->p2pCallback(
  977.                     $session,
  978.                     $parameterBag,
  979.                     $errorHandler,
  980.                     $aviaturEncoder,
  981.                     $twigFolder,
  982.                     $methodPaymentService,
  983.                     $tokenizerService,
  984.                     $tokenStorage,
  985.                     $aviaturMailer,
  986.                     $emissionWebservice,
  987.                     $insuranceService,
  988.                     $orderController,
  989.                     $aviaturExperienceService,
  990.                     $payoutExtraService,
  991.                     $mailer,
  992.                     $logSave,
  993.                     $validateSanctions,
  994.                     $p2PController,
  995.                     $correlationIndivIdtrue$key);
  996.             }
  997.             return $return;
  998.         } else {
  999.             return $this->p2pCallback(
  1000.                     $session,
  1001.                     $parameterBag,
  1002.                     $errorHandler,
  1003.                     $aviaturEncoder,
  1004.                     $twigFolder,
  1005.                     $methodPaymentService,
  1006.                     $tokenizerService,
  1007.                     $tokenStorage,
  1008.                     $aviaturMailer,
  1009.                     $emissionWebservice,
  1010.                     $insuranceService,
  1011.                     $orderController,
  1012.                     $aviaturExperienceService,
  1013.                     $payoutExtraService,
  1014.                     $mailer,
  1015.                     $logSave,
  1016.                     $validateSanctions,
  1017.                     $p2PController,
  1018.                     $correlationIdtrue);
  1019.         }
  1020.     }
  1021.     private function p2pCallback(SessionInterface $sessionParameterBagInterface $parameterBagAviaturErrorHandler $errorHandlerAviaturEncoder $aviaturEncoderTwigFolder $twigFolderCustomerMethodPaymentService $methodPaymentServiceTokenizerService $tokenizerServiceTokenStorageInterface $tokenStorageAviaturMailer $aviaturMailerEmissionWebservice $emissionWebserviceInsuranceService $insuranceServiceOrderController $orderControllerAviaturExperienceService $aviaturExperienceServicePayoutExtraService $payoutExtraService, \Swift_Mailer $mailerAviaturLogSave $logSaveValidateSanctionsRenewal $validateSanctionsP2PController $p2PController$correlationId$combination$segment null)
  1022.     {
  1023.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  1024.         $emailNotification $parameterBag->get('email_notification');
  1025.         $emission_track 'Inicia callback TC - '.(!is_null($segment) ? 'segmento '.$segment.' - ' '').date('Y-m-d H:i:s').'micro: '.microtime().PHP_EOL;
  1026.         $em $this->managerRegistry->getManager();
  1027.         $agencyFolder $twigFolder->twigFlux();
  1028.         $transactionId $session->get($transactionIdSessionName);
  1029.         if ($combination) {
  1030.             $prepaymentInfo = \simplexml_load_string((string) $session->get($transactionId.'[flight][prepayment'.$segment.']'));
  1031.             $orderProductCode $session->get($transactionId.'[flight][order'.$segment.']');
  1032.         } else {
  1033.             $prepaymentInfo = \simplexml_load_string($session->get($transactionId.'[flight][prepayment]'));
  1034.             $orderProductCode $session->get($transactionId.'[flight][order]');
  1035.         }
  1036.         $productId str_replace('PN'''json_decode($orderProductCode)->products);
  1037.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  1038.         $agency $orderProduct->getOrder()->getAgency();
  1039.         $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  1040.         $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  1041.         //////// se envia el correo del modulo anti fraude en caso de ser necesario//////////
  1042.         /*
  1043.         if ($session->has('Marked_name') && $session->has('Marked_document')) {
  1044.             $product = 'Vuelo';
  1045.             $validateSanctions->sendMarkedEmail($orderProductCode, $session, $agency, $orderProduct, $transactionId, $product);
  1046.         }
  1047.         */
  1048.         /* Pero solo si hay condicionados (no bloqueados) y que paguen con Tarjeta */
  1049.         if ($session->has('Marked_users')) {
  1050.             $product 'Vuelo';
  1051.             $validateSanctions->sendMarkedEmail($orderProductCode$session$agency$orderProduct$transactionId$product);
  1052.         }
  1053.         ////////////////////////////////////////////////////////////////////////////////////
  1054.         if (null != $decodedResponse) {
  1055.             if ($combination) {
  1056.                 $airlineValidation $em->getRepository(\Aviatur\FlightBundle\Entity\AirlineValidation::class)
  1057.                         ->find($session->get($transactionId.'[airline_validation'.$segment.']'));
  1058.                 $retryCount = (int) $session->get($transactionId.'[flight][retry'.$segment.']');
  1059.             } else {
  1060.                 $airlineValidation $em->getRepository(\Aviatur\FlightBundle\Entity\AirlineValidation::class)
  1061.                         ->find($session->get($transactionId.'[airline_validation]'));
  1062.                 $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  1063.             }
  1064.             $twig '';
  1065.             $additionalQS '';
  1066.             $infoEmission $decodedRequest->x_first_name.' '.$decodedRequest->x_last_name.'/'
  1067.                     .$decodedRequest->x_address.'/'
  1068.                     .$decodedRequest->x_cust_id.'/'
  1069.                     .$decodedRequest->x_phone.'/'
  1070.                     .$decodedRequest->x_email;
  1071.             if (isset($decodedRequest->x_service_fee_base)) {
  1072.                 $valuesEmission 'TA:'.number_format($decodedRequest->x_service_fee_base0'.''')
  1073.                         .'/ITA:'.number_format($decodedRequest->x_service_fee_tax0'.''')
  1074.                         .'/TAX:'.number_format($decodedRequest->x_tax0'.''')
  1075.                         .'/VB:'.number_format($decodedRequest->x_amount_base0'.''')
  1076.                         .'/AT:'.number_format(($decodedRequest->x_airport_tax ?? 0), 0'.''');
  1077.             } else {
  1078.                 $valuesEmission '/TAX:'.number_format($decodedRequest->x_tax0'.''')
  1079.                         .'/VB:'.number_format($decodedRequest->x_amount_base0'.''')
  1080.                         .'/AT:'.number_format(($decodedRequest->x_airport_tax ?? 0), 0'.''');
  1081.             }
  1082.             $comision = (string) 1;
  1083.             $airlinesSpecialComision = [
  1084.                 'CZ',
  1085.                 'DT',
  1086.                 'EK',
  1087.             ];
  1088.             $validatingAirline $airlineValidation->getAirline()->getIata();
  1089.             if (in_array($validatingAirline$airlinesSpecialComision)) {
  1090.                 if (('CZ' == $validatingAirline) || ('DT' == $validatingAirline)) {
  1091.                     $comision = (string) 3;
  1092.                 }
  1093.                 if ('EK' == $validatingAirline) {
  1094.                     $comision = (string) 4;
  1095.                 }
  1096.             }
  1097.             // Si hopper no viene pues hacer esta shit a ver que pex
  1098.             if (!$session->has($transactionId.'[HopperPrice]')) {
  1099.                 $pricedItinerary $prepaymentInfo->Message->OTA_AirBookRS->AirReservation;
  1100.             }
  1101.             $airlinePaymentType $airlineValidation->getPaymentType();
  1102.             $emailData json_decode($orderProduct->getEmail(), true);
  1103.             $journeySummary $emailData['journeySummaries']['0'];
  1104.             $originCityCode $journeySummary['originCode'];
  1105.             $city $em->getRepository(\Aviatur\SearchBundle\Entity\SearchCities::class)->findOneByIata($originCityCode);
  1106.             if (null == $city) {
  1107.                 $city $em->getRepository(\Aviatur\SearchBundle\Entity\SearchAirports::class)->findOneByIata($originCityCode);
  1108.             }
  1109.             if (null != $city) {
  1110.                 $originCountry $city->getCountrycode();
  1111.                 if ('LH' == $validatingAirline && in_array($originCountry$this->countriesInCashWithLufthansa)) {
  1112.                     $airlinePaymentType 'CASH';
  1113.                 }
  1114.             }
  1115.             /* Hay que validar que se cumplan las condiciones de registro de campañas, para que cambie el $airlinePaymentType a CASH */
  1116.             if($this->validateActivationOfAviaturCampaignForCash($prepaymentInfo$em$agency)){
  1117.                 $airlinePaymentType 'CASH';
  1118.             }
  1119.             $configFlightAgency $em->getRepository(\Aviatur\FlightBundle\Entity\ConfigFlightAgency::class)->findOneBy(['agency' => $agency'provider' => $orderProduct->getProvider()]);
  1120.             if ((null != $configFlightAgency) && (null != $configFlightAgency->getWsurl())) {
  1121.                 $officeId $configFlightAgency->getOfficeid();
  1122.             } else {
  1123.                 $officeId $agency->getOfficeid();
  1124.             }
  1125.             if ('0XZA' == $officeId) {
  1126.                 $valuesEmission .= '/IATA:76522552';
  1127.             }
  1128.             if (isset($decodedResponse->x_response_code_cyber) && (== $decodedResponse->x_response_code_cyber)) {
  1129.                 $decodedResponse->x_response_code_case 99;
  1130.             } else {
  1131.                 $decodedResponse->x_response_code_case $decodedResponse->x_response_code;
  1132.             }
  1133.             $jsonSendEmail $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('send_email');
  1134.             if (isset(json_decode($jsonSendEmail->getDescription())->email)) {
  1135.                 $email json_decode($jsonSendEmail->getDescription())->email->CallBack;
  1136.             }
  1137.             $reference str_replace('{"order":"'''$orderProductCode);
  1138.             $reference str_replace('","products":"''-'$reference);
  1139.             $reference str_replace('"}'''$reference);
  1140.             $references $reference;
  1141.             $bookings $orderProduct->getBooking();
  1142.             $emission_track .= 'Verifica resultado trx - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1143.             switch ($decodedResponse->x_response_code_case) {
  1144.                 case 99:
  1145.                     $emission_track .= 'Rechazado Cyber - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1146.                     //rechazado cybersource
  1147.                     $parameters $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('aviatur_switch_rechazada_cyber');
  1148.                     if ($parameters) {
  1149.                         if (== $parameters->getValue()) {
  1150.                             if (== $decodedResponse->x_response_code) {
  1151.                                 $postData json_decode($session->get($transactionId.'[flight][detail_data_flight]'));
  1152.                                 if (isset($postData->PD->cusPOptSelected)) {
  1153.                                     if (isset($postData->PD->cusPOptSelectedStatus)) {
  1154.                                         if ('NOTVERIFIED' == $postData->PD->cusPOptSelectedStatus) {
  1155.                                             $postData->PD->cusPOptSelectedStatus 'ACTIVE';
  1156.                                             $customerLogin $tokenStorage->getToken()->getUser();
  1157.                                             $methodPaymentService->setMethodsByCustomer($customerLoginjson_decode(json_encode($postData), true));
  1158.                                         }
  1159.                                     }
  1160.                                 }
  1161.                                 if (isset($postData->PD->savePaymProc)) {
  1162.                                     //                        $customer = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($postData->BD->id);
  1163.                                     $customerLogin $tokenStorage->getToken()->getUser();
  1164.                                     $methodPaymentService->setMethodsByCustomer($customerLoginjson_decode(json_encode($postData), true));
  1165.                                 }
  1166.                             }
  1167.                         }
  1168.                     }
  1169.                     $twig 'aviatur_flight_payment_rejected_secure';
  1170.                     // no break
  1171.                 case 3:// pendiente p2p
  1172.                     $emission_track .= 'Pendiente - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1173.                     $twig '' != $twig $twig 'aviatur_flight_payment_pending_secure';
  1174.                     $franchise $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->
  1175.                             findOneByPaymentgatewaycode(str_replace(['CR_''RM_''CDNSA'], ['''''CS'], $decodedResponse->x_franchise));
  1176.                     // Sin dispersion de fondos
  1177.                     $emissionData = new \stdClass();
  1178.                     $emissionData->record $orderProduct->getBooking();
  1179.                     $emissionData->comision $comision;
  1180.                     // Dispersion de fondos
  1181.                     // Si hopper no viene has esta mal
  1182.                     if (!$session->has($transactionId.'[HopperPrice]')) {
  1183.                         if (('DISP' == $airlinePaymentType || 'NDC' == $airlinePaymentType) && !isset($pricedItinerary->PriceInfo->ItinTotalFare->DispersionOverride)) {
  1184.                             $emissionData->tarjeta = (string) $decodedRequest->x_card_num;
  1185.                             $emissionData->franquicia = (null != $franchise) ? (string) $franchise->getEmissioncode() : '';
  1186.                             $emissionData->codigo_auth = (string) $decodedResponse->x_approval_code;
  1187.                             $emissionData->fecha_vencmiento = (string) substr($decodedRequest->x_exp_date02).substr($decodedRequest->x_exp_date42);
  1188.                         }
  1189.                     }
  1190.                     $emissionData->email = (string) $decodedRequest->x_email;
  1191.                     $emissionData->datos_facturacion = (string) $infoEmission;
  1192.                     $emissionData->valores_adicionales = (string) $valuesEmission;
  1193.                     $emissionData->OfficeID $officeId;
  1194.                     $orderProduct->setEmissiondata(json_encode($emissionData));
  1195.                     $orderProduct->setUpdatingdate(new \DateTime());
  1196.                     $em->persist($orderProduct);
  1197.                     $em->flush();
  1198.                     $retryCount 1;
  1199.                     break;
  1200.                 case 0:// error p2p
  1201.                     $emission_track .= 'Error - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1202.                     $twig 'aviatur_flight_payment_error_secure';
  1203.                     if (isset($email)) {
  1204.                         $from $session->get('emailNoReply');
  1205.                         $error $twig;
  1206.                         $subject $orderProduct->getDescription().':Error en el proceso de pago de Aviatur';
  1207.                         $body '</br>El proceso de pago a retornado un error </br>Referencia: '.$references.'</br>Reserva:'.$bookings;
  1208.                         $aviaturMailer->sendEmailGeneral($from$email$subject$body);
  1209.                     }
  1210.                     // no break
  1211.                 case 2:// rechazada p2p
  1212.                     $emission_track .= 'Rechazado - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1213.                     $twig '' != $twig $twig 'aviatur_flight_payment_rejected_secure';
  1214.                     if (isset($email)) {
  1215.                         $from $session->get('emailNoReply');
  1216.                         $error $twig;
  1217.                         $subject $orderProduct->getDescription().':Transacción rechazada';
  1218.                         $body '</br>El pago fue rechazado </br>Referencia: '.$references.'</br>Reserva:'.$bookings;
  1219.                         $aviaturMailer->sendEmailGeneral($from$email$subject$body);
  1220.                     }
  1221.                     break;
  1222.                 case 1:// aprobado p2p
  1223.                     $emission_track .= 'Aprobado - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1224.                     $emissionData = new \stdClass();
  1225.                     $postData json_decode($session->get($transactionId.'[flight][detail_data_flight]'));
  1226.                     if (isset($postData->PD->cusPOptSelected)) {
  1227.                         if (isset($postData->PD->cusPOptSelectedStatus)) {
  1228.                             if ('NOTVERIFIED' == $postData->PD->cusPOptSelectedStatus) {
  1229.                                 $postData->PD->cusPOptSelectedStatus 'ACTIVE';
  1230.                                 $customerLogin $tokenStorage->getToken()->getUser();
  1231.                                 $methodPaymentService->setMethodsByCustomer($customerLoginjson_decode(json_encode($postData), true));
  1232.                             }
  1233.                         }
  1234.                     }
  1235.                     if (isset($postData->PD->savePaymProc)) {
  1236.                         //$customer = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($postData->BD->id);
  1237.                         $customerLogin $tokenStorage->getToken()->getUser();
  1238.                         $methodPaymentService->setMethodsByCustomer($customerLoginjson_decode(json_encode($postData), true));
  1239.                     }
  1240.                     $emission_track .= 'Inicio emision - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1241.                     $retryCount = (int) $session->get($transactionId.'[flight][retry]');
  1242.                     $twig 'aviatur_flight_payment_success_secure';
  1243.                     if ('rappi' == $orderProduct->getOrder()->getAgency()->getAssetsFolder()) {
  1244.                         $infoTotalAmount $decodedRequest->x_amount $decodedRequest->x_airport_tax $decodedRequest->x_service_fee;
  1245.                         $additionalQS '?bookingid='.$orderProduct->getBooking().'&total='.$infoTotalAmount;
  1246.                     }
  1247.                     $franchise $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->
  1248.                             findOneByPaymentgatewaycode(str_replace(['CR_''RM_''CDNSA'], ['''''CS'], $decodedResponse->x_franchise));
  1249.                     // Sin dispersion de fondos
  1250.                     $emissionData->record $orderProduct->getBooking();
  1251.                     $emissionData->comision $comision;
  1252.                     $serviceName 'emitir_cash_officeid';
  1253.                     //$serviceName = $orderProduct->getProvider()->getName() == 'sabre-ndc-qa' ? 'emitir_cash_officeid_ndc': 'emitir_cash_officeid';
  1254.                     $special_emission false;
  1255.                     if ($session->has($transactionId '[flight][special_emission_replace_iata]')) {//Precompra Aerolinea
  1256.                         $special_emissions_params $session->get($transactionId '[flight][special_emission_replace_iata]');
  1257.                         $ticketingVendor $prepaymentInfo->Message->OTA_AirBookRS->AirReservation->Ticketing->TicketingVendor;
  1258.                         $airline_iata = isset($ticketingVendor['CodeContext']) ? (string) $ticketingVendor['CodeContext'] : (string) $ticketingVendor['Code'];
  1259.                         if (isset($special_emissions_params['airlineReplaceCode']) && in_array($airline_iata$special_emissions_params['airlineRequired'])) {
  1260.                             $special_emission true;
  1261.                         }
  1262.                     }
  1263.                     // Si el total de la reserva es solo con puntos debemos cambiar el $airlinePaymentType a CASH
  1264.                     if ((isset($decodedRequest->onlyRedemption) && $decodedRequest->onlyRedemption === true) && (isset($decodedResponse->onlyRedemption) && $decodedResponse->onlyRedemption === 'true')) {
  1265.                         $airlinePaymentType 'CASH';
  1266.                     }
  1267.                     // Dispersion de fondos
  1268.                     if (('DISP' == $airlinePaymentType || 'NDC' == $airlinePaymentType) && !isset($pricedItinerary->PriceInfo->ItinTotalFare->DispersionOverride) && !$special_emission) {
  1269.                         $emissioncode=$this->cardHomologateServices->cardHomologateConfig($franchise$airlineValidation$orderProduct);
  1270.                         $emissionData->tarjeta = (string) $tokenizerService->getToken($decodedRequest->x_card_num);
  1271.                         $emissionData->franquicia = (string) $emissioncode;
  1272.                         $emissionData->codigo_auth = (string) ($decodedResponse->x_approval_code ?? "");
  1273.                         $emissionData->fecha_vencmiento = (string) substr($decodedRequest->x_exp_date02).substr($decodedRequest->x_exp_date42);
  1274.                         if (('NDC' == $airlinePaymentType)) {
  1275.                             $emissionData->cvv = (string) $decodedRequest->x_card_code;
  1276.                         }
  1277.                         $serviceName 'emitir_tc_officeid';
  1278.                         //if ($session->has($transactionId . '[CeSudDiscount][apply]')) {
  1279.                         //$serviceName = 'emitir_tc_Combinada_officeid';
  1280.                         //$emissionData->tarjeta1 = (string) $decodedRequest->x_card_num;
  1281.                         //$emissionData->franquicia1 = (string) $franchise->getEmissioncode();
  1282.                         //$emissionData->codigo_auth1 = (string) $decodedResponse->x_approval_code;
  1283.                         //$emissionData->fecha_vencmiento1 = (string) substr($decodedRequest->x_exp_date, 0, 2) . substr($decodedRequest->x_exp_date, 4, 2);
  1284.                         //$emissionData->valor1 = (string) ((float) $decodedRequest->x_amount + (float) $decodedRequest->x_airport_tax);
  1285.                         //$emissionData->tarjeta2 = $requestCencosud['x_card_num_aviatur'];
  1286.                         //$emissionData->franquicia2 = 'VI';
  1287.                         //$emissionData->codigo_auth2 = $decodedResponse->x_approval_code_aviatur;
  1288.                         //$emissionData->fecha_vencmiento2 = (string) substr($decodedResponse->x_exp_date, 0, 2) . substr($decodedResponse->x_exp_date, 4, 2);
  1289.                         //$emissionData->valor2 = $requestCencosud['x_amount_aviatur'];
  1290.                         //}
  1291.                     }
  1292.                     $emissionData->email = (string) $decodedRequest->x_email;
  1293.                     $emissionData->datos_facturacion = (string) $infoEmission;
  1294.                     $emissionData->valores_adicionales = (string) $valuesEmission;
  1295.                     // YARED COMMENT esta validacion no es útil pero es culpa de sabre entonces tendremos que quitarla algun dia
  1296.                     $emissionData->OfficeID $officeId;
  1297.                     $orderProduct->getProvider()->getName() == 'sabre-ndc-qa' $emissionData->officeID $officeId $emissionData->OfficeID $officeId;
  1298.                     $emission_track .= 'Llama servicio: '.$serviceName.' - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1299.                     $response $emissionWebservice->callServiceEmission($serviceName$emissionData$orderProduct->getId());
  1300.                     $emission_track .= 'Fin llamado servicio: '.$serviceName.' - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1301.                     $emission_track .= 'Procesa respuesta: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1302.                     /* Se debe verificar si se tienen datos adicionales de ancillaries */
  1303.                     $vectorAncillariesData $orderProduct->getOrder()->getAncillariesOrder();
  1304.                     if (isset($vectorAncillariesData)) {
  1305.                         if (sizeof($vectorAncillariesData) > 0) {
  1306.                             $ancillariesData $vectorAncillariesData[0]->getData();
  1307.                         }
  1308.                     } else {
  1309.                         $ancillariesData null;
  1310.                     }
  1311.                     if(isset($ancillariesData) && !is_null($ancillariesData)){
  1312.                         /* Se va detallando por cada order_product para transmitir al consumo de servicios adicionales */
  1313.                         if (('NDC' == $airlinePaymentType)) {
  1314.                             /* Obtener el addProductData y su etiqueta <passengers> */
  1315.                             $addProductData $orderProduct->getAddproductdata();
  1316.                             $total_amount $this->totalAmountSelectedAncillaries($addProductData);
  1317.                             if($total_amount 0){
  1318.                                 /* Número de la orden, y solo se transmite el total de los ancillaries seleccionados por todo el order_product */
  1319.                                 $numero_orden $orderProduct->getOrder()->getId();
  1320.                                 // comentado debido a que el cobro de estos servicios adicionales los realizara en caso de ser NDC la pasarela de la aerolinea
  1321.                                 // $info_response_add_serv = $this->p2pSendInformationAdditionalServices($p2PController, $orderController, $transactionId, $session, $parameterBag, $tokenizerService, $methodPaymentService, $mailer, $logSave, $numero_orden, $total_amount, $productId, 'ancillaries', 'Ancillaries');
  1322.                             }
  1323.                         }
  1324.                         $ancillariesProcessedData $this->processAncillariesData($ancillariesData,$correlationId);
  1325.                         /* Para aplicar en validaciones asociadas a ancillaries (Código IATA sin NDC- en caso de tenerlo) */
  1326.                         $ticketingVendor $prepaymentInfo->Message->OTA_AirBookRS->AirReservation->Ticketing->TicketingVendor;
  1327.                         $airlineCodeTicketing = isset($ticketingVendor['CodeContext']) ? (string) $ticketingVendor['CodeContext'] : (string) $ticketingVendor['Code'];
  1328.                         if(false !== strpos($airlineCodeTicketing'-')){
  1329.                             $arrayAirlineCode explode('-'$airlineCodeTicketing);
  1330.                             $airlineCodeTicketing $arrayAirlineCode[1];
  1331.                         }
  1332.                         $ticketingVendorAirline $em->getRepository(\Aviatur\FlightBundle\Entity\Airline::class)->findOneByIata($airlineCodeTicketing);
  1333.                         $airlineIdVendor $ticketingVendorAirline->getId();
  1334.                         $emissionXml $orderController->emissionDataAction($response$ancillariesProcessedData$orderProduct$airlineIdVendor);
  1335.                     } else {
  1336.                         $emissionXml $orderController->emissionDataAction($response);
  1337.                     }
  1338.                     $emission_track .= 'Respuesta procesada: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1339.                     $emissionData->tarjeta = (string) $decodedRequest->x_card_num;
  1340.                     /* Porque no se puede guardar el CVV en los logs */
  1341.                     if (('NDC' == $airlinePaymentType) && !isset($pricedItinerary->PriceInfo->ItinTotalFare->DispersionOverride) && !$special_emission) {
  1342.                         unset($emissionData->cvv);
  1343.                     }
  1344.                     $orderProduct->setEmissiondata(json_encode($emissionData));
  1345.                     $orderProduct->setUpdatingdate(new \DateTime());
  1346.                     $em->flush();
  1347.                     if ((true === $session->has($transactionId.'[assist][payout_extra]')) && (false === $session->has($transactionId.'[assist][Emision]'))) {
  1348.                         $orderInsurance json_decode($session->get($transactionId.'[assist][order]'));
  1349.                         $productInsurance str_replace('PN'''$orderInsurance->products);
  1350.                         $orderProductInsurance $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productInsurance);
  1351.                         $decodedResponseInsurance json_decode($aviaturEncoder->AviaturDecode($orderProductInsurance->getPayresponse(), $orderProductInsurance->getPublicKey()));
  1352.                         if (isset($decodedResponseInsurance->x_response_code) && == $decodedResponseInsurance->x_response_code) {
  1353.                             $EmisionTarjeta $insuranceService->EmisionTarjeta($orderProductInsurance);
  1354.                             $session->set($transactionId.'[assist][Emision]'$EmisionTarjeta->asXml());
  1355.                             $insuranceService->changeStatus('approved'$orderProductInsurance);
  1356.                         }
  1357.                     }
  1358.                     if ($session->has($transactionId.'[experience][payout_extra]')) {
  1359.                         $payoutExtrasValues json_decode($session->get($transactionId.'[flight][payout_extra_values]'));
  1360.                         foreach ($payoutExtrasValues as $key => $payoutExtraValues) {
  1361.                             if ('EXPERIENCE' == $payoutExtraValues->name) {
  1362.                                 if (!$session->has($transactionId.'[experience][Emision'.$key.']') && false === $session->has($transactionId.'[experience][Emision'.$key.']')) {
  1363.                                     $orderInfoExperience json_decode($session->get($transactionId.'[experience][order'.$key.']'));
  1364.                                     $productIdExperience str_replace('PN'''$orderInfoExperience->products);
  1365.                                     $orderProductExperience $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdExperience);
  1366.                                     $decodedResponseExperience json_decode($aviaturEncoder->AviaturDecode($orderProductExperience->getPayresponse(), $orderProductExperience->getPublicKey()));
  1367.                                     if (isset($decodedResponseExperience->x_response_code) && == $decodedResponseExperience->x_response_code) {
  1368.                                         $aviaturExperienceService->EmitirSolicitud($orderProductExperience$keytrue);
  1369.                                     }
  1370.                                 }
  1371.                             }
  1372.                         }
  1373.                     }
  1374.                     $emission_track .= 'Revisa si error: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1375.                     if ('error' != $emissionXml) {
  1376.                         $emission_track .= 'No error en RS: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1377.                         if ($combination) {
  1378.                             $session->set($transactionId.'[emission'.$segment.']'$response->asXML());
  1379.                         } else {
  1380.                             $session->set($transactionId.'[emission]'$response->asXML());
  1381.                         }
  1382.                         $updatePaymentXml $orderProduct->getUpdatepaymentdata();
  1383.                         /* La idea es que tome el primer número de tiquete como número de approval_code */
  1384.                         if (('NDC' == $airlinePaymentType)) {
  1385.                             if(null !== $session->get($transactionId.'[x_response_code_cyber]')){
  1386.                                 if($session->get($transactionId.'[x_response_code_cyber]') == 1){
  1387.                                     $updatePaymentXml str_replace('<approval_code>000000</approval_code>''<approval_code>'.((string)$response->dataElementsMaster->paymentTrx->descText).'</approval_code>'$updatePaymentXml);
  1388.                                 }
  1389.                             }
  1390.                         }
  1391.                         if (false === strpos($updatePaymentXml'<emission_data>')) {
  1392.                             $updatePayment explode('<booking_id2/>'$updatePaymentXml);
  1393.                             $orderProduct->setUpdatepaymentdata($updatePayment[0].'<booking_id2/>'.$emissionXml.$updatePayment[1]);
  1394.                             $em->persist($orderProduct);
  1395.                             $em->flush();
  1396.                         }
  1397.                         /* Se debe validar en NDC si se ha generado un total de servicios adicionales, para pasar a P2P de forma automática */
  1398.                         if (('NDC' == $airlinePaymentType) && null !== $session->get($transactionId.'[x_response_code_cyber]') && -== $session->get($transactionId.'[flight][segment_admin_fee]')) {
  1399.                             /* Obtener administrative_amount desde el XML de UpdatePaymentData recientemente guardado con el persist y flush */
  1400.                             $updatePaymentXmlNew $orderProduct->getUpdatepaymentdata();
  1401.                             /* Debe haber sido aprobado previamente por Cybersource, para proceder a transmitir */
  1402.                             //if(strpos($updatePaymentXmlNew, '<administrative_amount>') !== false && $session->get($transactionId.'[x_response_code_cyber]') == 1){
  1403.                             $administrative_amount = (double)$session->get($transactionId.'[value_additional_services]');
  1404.                             if($administrative_amount && $session->get($transactionId.'[x_response_code_cyber]') == 1){
  1405.                                 //$ubicacionInicial = strpos($updatePaymentXmlNew, '<administrative_amount>') + 23;
  1406.                                 //$ubicacionFinal = strpos($updatePaymentXmlNew, '</administrative_amount>');
  1407.                                 //$administrative_amount = (double)substr($updatePaymentXmlNew, $ubicacionInicial, $ubicacionFinal - $ubicacionInicial);
  1408.                                 //if($administrative_amount > 0){
  1409.                                 if(!$session->has($transactionId.'[has_approval_code_add_serv_by_ndc]')){
  1410.                                     $session->set($transactionId.'[has_approval_code_add_serv_by_ndc]'0);
  1411.                                 }
  1412.                                 if($session->get($transactionId.'[has_approval_code_add_serv_by_ndc]') === 0){
  1413.                                     /* Número de la orden */
  1414.                                     //$ini_num_fact = strpos($updatePaymentXmlNew, '<order_id>') + 10;
  1415.                                     //$fin_num_fact = strpos($updatePaymentXmlNew, '</order_id>');
  1416.                                     //$numero_orden = substr($updatePaymentXmlNew, $ini_num_fact, $fin_num_fact - $ini_num_fact);
  1417.                                     $numero_orden $orderProduct->getOrder()->getId();
  1418.                                     /* Se crea para no afectar la transmisión de los servicios a P2P, y no repisar lo que hay actualmente para Cybersource con NDC */
  1419.                                     $em $this->managerRegistry->getManager();
  1420.                                     $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  1421.                                     $assetsFolder $agency->getAssetsFolder();
  1422.                                     if ('octopus' == $assetsFolder) {
  1423.                                         $Descriptionplacetopay 'Octopus Ganacia TA';
  1424.                                     } else {
  1425.                                         $Descriptionplacetopay 'Additional Services';
  1426.                                     }
  1427.                                     $info_response_add_serv $this->p2pSendInformationAdditionalServices($p2PController$orderController$transactionId$session$parameterBag$tokenizerService$methodPaymentService$mailer$logSave$numero_orden$administrative_amount$productId'additional_services'$Descriptionplacetopay);
  1428.                                     /* Obtenemos el approval code para llevarlo al administrative_approval_code en el updatePaymentData */
  1429.                                     $approval_code $info_response_add_serv["x_approval_code"];
  1430.                                     /* Revisar el updatePaymentData para incluir el administrative_approval_code */
  1431.                                     $splitted_payment_data explode('<administrative_approval_code>'$updatePaymentXmlNew);
  1432.                                     $position_splitted_1 strpos($splitted_payment_data[1], '</administrative_approval_code>') + 31;
  1433.                                     $splitted_payment_data[1] = substr($splitted_payment_data[1], $position_splitted_1);
  1434.                                     $updatePaymentXmlNew $splitted_payment_data[0] . '<administrative_approval_code>' $approval_code '</administrative_approval_code>' $splitted_payment_data[1];
  1435.                                     /* Revisar el administrative state para ir confeccionando una estructura XML que ayude a reemplazar la existente */
  1436.                                     $new_structure_administrative_state '<admnistrative_state>
  1437.                         <id>'.$info_response_add_serv["x_response_code"].'</id>
  1438.                         <name>'.$info_response_add_serv["x_response_reason_text"].'</name>
  1439.                         <reason_code>'.$info_response_add_serv["x_response_reason_code"].'</reason_code>
  1440.                         <reason_text/>
  1441.                     </admnistrative_state>';
  1442.                                     $splitted_payment_data_2 explode('<admnistrative_state>'$updatePaymentXmlNew);
  1443.                                     $position_splitted_2 strpos($splitted_payment_data_2[1], '</admnistrative_state>') + 22;
  1444.                                     $splitted_payment_data_2[1] = substr($splitted_payment_data_2[1], $position_splitted_2);
  1445.                                     $updatePaymentXmlNew $splitted_payment_data_2[0] . $new_structure_administrative_state $splitted_payment_data_2[1];
  1446.                                     /* Por fuerza se debe actualizar el payResponse para que actualice los estados de la emisión de servicios (por medio de la TA) */
  1447.                                     $decodedResponse json_decode($aviaturEncoder->aviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()), true);
  1448.                                     $decodedResponse["x_ta_response_code"] = $info_response_add_serv["x_response_code"];
  1449.                                     $decodedResponse["x_ta_response_reason_code"] = $info_response_add_serv["x_response_reason_code"];
  1450.                                     $decodedResponse["x_ta_response_reason_text"] = $info_response_add_serv["x_response_reason_text"];
  1451.                                     $orderProduct->setUpdatingdate(new \DateTime());
  1452.                                     $encodedResponse $aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey());
  1453.                                     $orderProduct->setPayresponse($encodedResponse);
  1454.                                     /* Guardar el XML nuevo */
  1455.                                     $orderProduct->setUpdatepaymentdata($updatePaymentXmlNew);
  1456.                                     $em->persist($orderProduct);
  1457.                                     $em->flush();
  1458.                                     /* Se blinda la variable de sesión para evitar un 'repisado' apenas se obtenga el $approval_code (solo si el código de respuesta es 1) */
  1459.                                     if($info_response_add_serv["x_response_code"] == "1"){
  1460.                                         $session->set($transactionId.'[has_approval_code_add_serv_by_ndc]'1);
  1461.                                     }
  1462.                                 }
  1463.                                 //}
  1464.                             }
  1465.                         }
  1466.                     } else {
  1467.                         $decodedRequest->x_card_code '***';
  1468.                         $orderProduct->setPayrequest($aviaturEncoder->AviaturEncode(json_encode($decodedRequest), $orderProduct->getPublicKey()));
  1469.                         $emission_track .= 'Si error en RS: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1470.                         if (isset($emissionData->tarjeta)) {
  1471.                             unset($emissionData->tarjeta);
  1472.                             unset($emissionData->franquicia);
  1473.                             unset($emissionData->codigo_auth);
  1474.                             unset($emissionData->fecha_vencmiento);
  1475.                             if (('NDC' == $airlinePaymentType)) {
  1476.                                 unset($emissionData->cvv);
  1477.                             }
  1478.                         }
  1479.                         $emission_track .= 'Prepara correo: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1480.                         $mailInfo print_r($emissionDatatrue).'<br>'.print_r($responsetrue);
  1481.                         // $message = (new \Swift_Message())
  1482.                         //         ->setContentType('text/html')
  1483.                         //         ->setFrom($session->get('emailNoReply'))
  1484.                         //         ->setTo(['soportepagoelectronico@aviatur.com.co', 'soptepagelectronic@aviatur.com', 'notificacionessitioweb@aviatur.com'])
  1485.                         //         ->setBcc([$emailNotification, 'soportepagoelectronico@aviatur.com.co', 'soptepagelectronic@aviatur.com'])
  1486.                         //         ->setSubject('Fallo de Emisión')
  1487.                         //         ->setBody($mailInfo);
  1488.                         // $mailer->send($message);
  1489.                         $emission_track .= 'Fin envio correo: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1490.                         if (('NDC' == $airlinePaymentType)) {
  1491.                             $twig 'aviatur_flight_payment_rejected_secure';
  1492.                             /* Actualización de los estados de order y order_product */
  1493.                             $order $em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($orderProduct->getOrder()->getId());
  1494.                             $order->setStatus('rejected');
  1495.                             $orderProduct->setStatus('rejected');
  1496.                             /* Actualización del PayResponse con valores asemejados a la simulación (rejected) */
  1497.                             $productResponse $aviaturEncoder->AviaturDecode($orderProduct->getPayResponse(), $orderProduct->getPublicKey());
  1498.                             $opResponse json_decode($productResponse);
  1499.                             $opResponse->x_response_code 2;
  1500.                             $opResponse->x_response_reason_code '01';
  1501.                             $opResponse->x_response_reason_text 'Rechazada';
  1502.                             /* Actualización del PayResponse */
  1503.                             $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($opResponse), $orderProduct->getPublicKey()));
  1504.                             /* Actualización del updatePaymentData (por que hay que dejarle la respuesta de 1 a 2)
  1505.                                 Hay que buscar <state> y </state> para cambiarle su contenido para las propiedades de rechazo
  1506.                             */
  1507.                             $stringUpdatePaymentData $orderProduct->getUpdatepaymentdata();
  1508.                             $beginUpdatePaymentData strpos($stringUpdatePaymentData'<state>');
  1509.                             if(false !== $beginUpdatePaymentData){
  1510.                                 $endUpdatePaymentData strpos($stringUpdatePaymentData'</state>') + 8;
  1511.                                 $qtyReplacement $endUpdatePaymentData $beginUpdatePaymentData;
  1512.                                 $stringToReplace trim(substr($stringUpdatePaymentData$beginUpdatePaymentData$qtyReplacement));
  1513.                                 $newReplacementString '<state><id>2</id><name>Rechazada</name><reason_code>01</reason_code><reason_text/></state>';
  1514.                                 $stringUpdatePaymentData str_replace($stringToReplace$newReplacementString$stringUpdatePaymentData);
  1515.                                 $orderProduct->setUpdatePaymentData($stringUpdatePaymentData);
  1516.                             }
  1517.                             $em->persist($orderProduct);
  1518.                             $em->flush();
  1519.                         }
  1520.                         $logSave->logSave($emission_track'TrackEmisionCallback''info');
  1521.                         $session->set($transactionId.'[emission][error]'true);
  1522.                         /* Aplica en CASH o DISP en forma normal, pues se validan plantillas que están con approved */
  1523.                         if (('NDC' != $airlinePaymentType)) {
  1524.                             $payoutExtraService->payoutExtrasCallback($twig$transactionId'flight'$agency$orderProduct);
  1525.                             return $this->redirect($this->generateUrl($twig));
  1526.                         }
  1527.                     }
  1528.                     break;
  1529.             }
  1530.             $emission_track .= 'Fin verificar respuesta trx: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1531.             if ($combination) {
  1532.                 $session->set($transactionId.'[flight][retry'.$segment.']'$retryCount 1);
  1533.             } else {
  1534.                 $session->set($transactionId.'[flight][retry]'$retryCount 1);
  1535.             }
  1536.             $payoutExtraService->payoutExtrasCallback($twig$transactionId'flight'$agency$orderProduct);
  1537.             $urlResume $this->generateUrl($twig);
  1538.             $urlResume .= $additionalQS;
  1539.             $emission_track .= 'Fin Callback: - '.date('Y-m-d H:i:s').' - micro: '.microtime().PHP_EOL;
  1540.             $decodedRequest->x_card_code "***";
  1541.             $orderProduct->setPayrequest($aviaturEncoder->AviaturEncode(json_encode($decodedRequest), $orderProduct->getPublicKey()));
  1542.             $logSave->logSave($emission_track'TrackEmisionCallback''info');
  1543.             return $this->redirect($urlResume);
  1544.         } else {
  1545.             $orderProduct->setStatus('pending');
  1546.             //            $em->persist($orderProduct);
  1547.             $em->flush();
  1548.             $session->set('redirectedRetry'true);
  1549.             return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_flight_retry_secure'), '''No hay respuesta por parte del servicio de pagoc'));
  1550.         }
  1551.     }
  1552.     /**
  1553.      * @throws RandomException
  1554.      */
  1555.     public function pseCallbackAction(
  1556.         SessionInterface         $session,
  1557.         ParameterBagInterface    $parameterBag,
  1558.         AviaturErrorHandler      $errorHandler,
  1559.         AviaturEncoder           $aviaturEncoder,
  1560.         TwigFolder               $twigFolder,
  1561.         PSEController            $PSEController,
  1562.         PSERestController        $PSERestController,
  1563.         EmissionWebservice       $emissionWebservice,
  1564.         InsuranceService         $insuranceService,
  1565.         OrderController          $orderController,
  1566.         AviaturExperienceService $aviaturExperienceService,
  1567.         PayoutExtraService       $payoutExtraService,
  1568.         \Swift_Mailer            $mailer,
  1569.         AviaturLogSave           $logSave,
  1570.                                  $transaction): \Symfony\Component\HttpFoundation\RedirectResponse
  1571.     {
  1572.         $em $this->managerRegistry->getManager();
  1573.         if ($session->has('agencyId')) {
  1574.             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  1575.         } else {
  1576.             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find(1);
  1577.         }
  1578.         $paymentCode $this->paymentMethod->getCode() === 'pse' 'pse' 'pseRest';
  1579.         $paymentMethod $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethod::class)->findOneByCode($paymentCode);
  1580.         $paymentMethodAgency $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findOneBy(['agency' => $agency'paymentMethod' => $paymentMethod'isactive' => true]);
  1581.         $tranKey $paymentMethodAgency->getTrankey();
  1582.         $decodedUrl json_decode($aviaturEncoder->AviaturDecode(base64_decode($transaction), $tranKey), true);
  1583.         $correlationId $decodedUrl['x_correlation_id'];
  1584.         if (false !== strpos($correlationId'||')) {
  1585.             $correlationIds explode('||'$correlationId);
  1586.             $correlationIds array_reverse($correlationIds);
  1587.             foreach ($correlationIds as $key => $correlationId) {
  1588.                 $return $this->pseCallback(
  1589.                     $session,
  1590.                     $parameterBag,
  1591.                     $errorHandler,
  1592.                     $aviaturEncoder,
  1593.                     $twigFolder,
  1594.                     $PSEController,
  1595.                     $PSERestController,
  1596.                     $emissionWebservice,
  1597.                     $insuranceService,
  1598.                     $orderController,
  1599.                     $aviaturExperienceService,
  1600.                     $payoutExtraService,
  1601.                     $mailer,
  1602.                     $logSave,
  1603.                     $decodedUrl['x_orders'],
  1604.                     true,
  1605.                     $paymentCode,
  1606.                     $correlationId,
  1607.                     $key
  1608.                 );
  1609.             }
  1610.             return $return;
  1611.         } else {
  1612.             return $this->pseCallback(
  1613.                 $session,
  1614.                 $parameterBag,
  1615.                 $errorHandler,
  1616.                 $aviaturEncoder,
  1617.                 $twigFolder,
  1618.                 $PSEController,
  1619.                 $PSERestController,
  1620.                 $emissionWebservice,
  1621.                 $insuranceService,
  1622.                 $orderController,
  1623.                 $aviaturExperienceService,
  1624.                 $payoutExtraService,
  1625.                 $mailer,
  1626.                 $logSave,
  1627.                 $decodedUrl['x_orders'],
  1628.                 false,
  1629.                 $paymentCode,
  1630.                 $correlationId
  1631.             );
  1632.         }
  1633.     }
  1634.     /**
  1635.      * @throws RandomException
  1636.      */
  1637.     public function pseCallback(SessionInterface $sessionParameterBagInterface $parameterBagAviaturErrorHandler $errorHandlerAviaturEncoder $aviaturEncoderTwigFolder $twigFolderPSEController $PSEControllerPSERestController $PSERestControllerEmissionWebservice $emissionWebserviceInsuranceService $insuranceServiceOrderController $orderControllerAviaturExperienceService $aviaturExperienceServicePayoutExtraService $payoutExtraService, \Swift_Mailer $mailerAviaturLogSave $logSave$orders$combination$paymentCode$correlationId,$segment null): \Symfony\Component\HttpFoundation\RedirectResponse
  1638.     {
  1639.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  1640.         $emailNotification $parameterBag->get('email_notification');
  1641.         $status null;
  1642.         $twig null;
  1643.         $em $this->managerRegistry->getManager();
  1644.         $transactionId = ($session->has($transactionIdSessionName)) ? $session->get($transactionIdSessionName) : null;
  1645.         $validateOrder false;
  1646.         if (isset($orders['flight'])) {
  1647.             $validateOrder true;
  1648.             $flightOrders explode('+'$orders['flight']);
  1649.             if ($combination) {
  1650.                 $orderProductCode $flightOrders[$segment];
  1651.                 $productId $flightOrders[$segment];
  1652.             } else {
  1653.                 $orderProductCode $flightOrders[0];
  1654.                 $productId $flightOrders[0];
  1655.             }
  1656.             $retryCount 1;
  1657.         } else {
  1658.             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró identificador de la transacción'));
  1659.         }
  1660.         /* Para aplicar en validaciones asociadas a ancillaries (Código IATA sin NDC- en caso de tenerlo) */
  1661.         if ($combination) {
  1662.             $prepaymentInfo = \simplexml_load_string((string) $session->get($transactionId.'[flight][prepayment'.$segment.']'));
  1663.         } else {
  1664.             $prepaymentInfo = \simplexml_load_string($session->get($transactionId.'[flight][prepayment]'));
  1665.         }
  1666.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  1667.         if (empty($orderProduct)) {
  1668.             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró orden asociada a este pago'));
  1669.         } else {
  1670.             if ('approved' == $orderProduct->getStatus()) {
  1671.                 return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró información de la transacción'));
  1672.             }
  1673.             $agency $orderProduct->getOrder()->getAgency();
  1674.             $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  1675.             $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  1676.             $recordData = new \stdClass();
  1677.             $recordData->record = (string) $orderProduct->getBooking();
  1678.             $additionalQS '';
  1679.             $pseTransactionId '';
  1680.             if (isset($decodedResponse) || isset($decodedResponse->createTransactionResult) || isset($decodedResponse->createTransactionPaymentResponseInformation)) {
  1681.                 if ($paymentCode === 'pse') {
  1682.                     if (isset($decodedResponse->createTransactionResult)) {
  1683.                         $pseTransactionId $decodedResponse->createTransactionResult->transactionID ?? $decodedResponse->createTransactionResult->trazabilityCode;
  1684.                     } elseif (isset($decodedResponse->createTransactionPaymentResponseInformation)) {
  1685.                         $pseTransactionId $decodedResponse->createTransactionPaymentResponseInformation->transactionID ?? $decodedResponse->createTransactionPaymentResponseInformation->trazabilityCode;
  1686.                     }
  1687.                     if (isset($PSEController->pseCallbackAction($orderController,$pseTransactionId$decodedResponse)->getTransactionInformationResult)) {
  1688.                         $paymentResponse $PSEController->pseCallbackAction($orderController$pseTransactionId$decodedResponse);
  1689.                     } else {
  1690.                         $paymentResponse json_decode($PSEController->pseCallbackAction($orderController$pseTransactionId$decodedResponse));
  1691.                     }
  1692.                 } else {
  1693.                     $pseTransactionId $decodedResponse->internalReference;
  1694.                     $paymentResponse $PSERestController->getTransactionInfo($pseTransactionId);
  1695.                     $logSave->logSave(json_encode($paymentResponse), '_pseRest'$decodedRequest->payment->reference .'_RS'$pseTransactionId);
  1696.                 }
  1697.                 if (!isset($paymentResponse->error)) {
  1698.                     if (!$session->has($transactionId.'[flight][detail_data_flight]')) {
  1699.                         $message 'Una vez el pago sea confirmado recibirá su confirmación de reserva, de no ser así comuníquese con nuestra central de reservas.';
  1700.                         return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Gracias por su compra'$message));
  1701.                     }
  1702.                     if (isset($paymentResponse)) {
  1703.                         if ($paymentCode === 'pse') {
  1704.                             if (isset($paymentResponse->getTransactionInformationResponseBody)) {
  1705.                                 $decodedResponse->getTransactionInformationResult $paymentResponse->getTransactionInformationResponseBody;
  1706.                                 $paymentResponse->getTransactionInformationResult $paymentResponse->getTransactionInformationResponseBody;
  1707.                             } else {
  1708.                                 $decodedResponse->getTransactionInformationResult $paymentResponse->getTransactionInformationResult;
  1709.                             }
  1710.                         } else {
  1711.                             $decodedResponse->getTransactionInformationResult $paymentResponse;
  1712.                             /* Aplica directamente en pserest, para actualizar la información del update_payment_data */
  1713.                             $currentUpdatePaymentData $orderProduct->getUpdatepaymentdata();
  1714.                             $xmlParcial substr($currentUpdatePaymentDatastrpos($currentUpdatePaymentData'<FILTRO>') + 8strpos($currentUpdatePaymentData'</FILTRO>') - strpos($currentUpdatePaymentData'<FILTRO>') - 8);
  1715.                             $xmlConvertido = \simplexml_load_string($xmlParcial);
  1716.                             /* Asignación de valores para update_payment_data (afectando name y reason_code, no se toca el ID) */
  1717.                             $xmlConvertido->products->product->payment_data->state->reason_code $decodedResponse->getTransactionInformationResult->status->reason;
  1718.                             $decodeMessage $this->changeAcutes($decodedResponse->getTransactionInformationResult->status->message);
  1719.                             $xmlConvertido->products->product->payment_data->state->name $decodeMessage;
  1720.                             $xmlDefinitivo $xmlConvertido->asXML();
  1721.                             $xmlDefinitivo str_replace('<?xml version="1.0"?>'''$xmlDefinitivo);
  1722.                             $newUpdatePaymentData str_replace('<FILTRO>'.$xmlParcial.'</FILTRO>''<FILTRO>'.$xmlDefinitivo.'</FILTRO>'$currentUpdatePaymentData);
  1723.                             $orderProduct->setUpdatepaymentdata($newUpdatePaymentData);
  1724.                         }
  1725.                     }
  1726.                     $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
  1727.                     $orderProduct->setUpdatingdate(new \DateTime());
  1728.                     $em->persist($orderProduct);
  1729.                     $em->flush();
  1730.                     // Obtener el valor de returCode para continuar con logica existente
  1731.                     if ((isset($paymentResponse->getTransactionInformationResult->returnCode) && 'SUCCESS' == (string) $paymentResponse->getTransactionInformationResult->returnCode)
  1732.                         || (isset($paymentResponse->status->status))
  1733.                     ) {
  1734.                         $returnCodeStatus 'SUCCESS';
  1735.                     } else {
  1736.                         $returnCodeStatus = (string) $paymentResponse->getTransactionInformationResult->returnCode;
  1737.                     }
  1738.                     if ($returnCodeStatus === 'SUCCESS') {
  1739.                         $statusTransaction $this->getStatusTransaction($paymentResponse$orderProduct$decodedRequest);
  1740.                         $twig $statusTransaction['twig'];
  1741.                         $status $statusTransaction['status'];
  1742.                         $additionalQS $statusTransaction['additionalQS'];
  1743.                         $orderProduct->setStatus($status);
  1744.                         $orderProduct->getOrder()->setStatus($status);
  1745.                         $orderProduct->setUpdatingdate(new \DateTime());
  1746.                         $orderProduct->getOrder()->setUpdatingdate(new \DateTime());
  1747.                         $payoutExtraService->payoutExtrasCallback($twig$transactionId'flight'$agency$orderProduct);
  1748.                         if ($session->has($transactionId '[experience][payout_extra]')) {
  1749.                             $payoutExtrasValues json_decode($session->get($transactionId '[flight][payout_extra_values]'));
  1750.                             foreach ($payoutExtrasValues as $key => $payoutExtraValues) {
  1751.                                 if ('EXPERIENCE' == $payoutExtraValues->name) {
  1752.                                     $orderInfoExperience json_decode($session->get($transactionId '[experience][order' $key ']'));
  1753.                                     $productIdExperience str_replace('PN'''$orderInfoExperience->products);
  1754.                                     $orderProductExperience $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdExperience);
  1755.                                     if ('approved' != $orderProductExperience->getStatus()) {
  1756.                                         $aviaturExperienceService->changeStatus($orderProductExperience$status);
  1757.                                     }
  1758.                                 }
  1759.                             }
  1760.                         } elseif (TRUE === $validateOrder && isset($orders['experience']) && (== $segment || NULL == $segment)) {
  1761.                             $ordersExperience explode('+'$orders['experience']);
  1762.                             foreach ($ordersExperience as $key => $ordersExperiences) {
  1763.                                 $orderProductExperience $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($ordersExperiences);
  1764.                                 if ('approved' != $orderProductExperience->getStatus()) {
  1765.                                     $aviaturExperienceService->changeStatus($orderProductExperience$status);
  1766.                                 }
  1767.                             }
  1768.                         }
  1769.                         if ('approved' == $status) {
  1770.                             $emissionData json_decode($orderProduct->getEmissiondata());
  1771.                             //revisar esta emision como comprobarla
  1772.                             $serviceName 'emitir_cash_officeid';
  1773.                             //$serviceName = $orderProduct->getProvider()->getName() == 'sabre-ndc-qa' ? 'emitir_cash_officeid_ndc' : 'emitir_cash_officeid';
  1774.                             $response $emissionWebservice->callServiceEmission($serviceName$emissionData$orderProduct->getId());
  1775.                             /* Se debe verificar si se tienen datos adicionales de ancillaries */
  1776.                             $vectorAncillariesData $orderProduct->getOrder()->getAncillariesOrder();
  1777.                             $result = [];
  1778.                             if(sizeof($vectorAncillariesData) > 0){
  1779.                                 $ancillariesData $vectorAncillariesData[0]->getData();
  1780.                             } else {
  1781.                                 $ancillariesData null;
  1782.                             }
  1783.                             if(isset($ancillariesData)){
  1784.                                 /* Para aplicar en validaciones asociadas a ancillaries (Código IATA sin NDC- en caso de tenerlo) */
  1785.                                 $ticketingVendor $prepaymentInfo->Message->OTA_AirBookRS->AirReservation->Ticketing->TicketingVendor;
  1786.                                 $airlineCodeTicketing = isset($ticketingVendor['CodeContext']) ? (string) $ticketingVendor['CodeContext'] : (string) $ticketingVendor['Code'];
  1787.                                 if(false !== strpos($airlineCodeTicketing'-')){
  1788.                                     $arrayAirlineCode explode('-'$airlineCodeTicketing);
  1789.                                     $airlineCodeTicketing $arrayAirlineCode[1];
  1790.                                 }
  1791.                                 $ticketingVendorAirline $em->getRepository(\Aviatur\FlightBundle\Entity\Airline::class)->findOneByIata($airlineCodeTicketing);
  1792.                                 $airlineIdVendor $ticketingVendorAirline->getId();
  1793.                                 $ancillariesProcessedData $this->processAncillariesData($ancillariesData,$correlationId);
  1794.                                 $emissionXml $orderController->emissionDataAction($response$ancillariesProcessedData$orderProduct$airlineIdVendor);
  1795.                             } else {
  1796.                                 $emissionXml $orderController->emissionDataAction($response);
  1797.                             }
  1798.                             $validateInsurance FALSE;
  1799.                             if ($session->has($transactionId '[assist][payout_extra]') && (FALSE === $session->has($transactionId '[assist][Emision]'))) {
  1800.                                 $orderInsurance json_decode($session->get($transactionId '[assist][order]'));
  1801.                                 $productIdInsurance str_replace('PN'''$orderInsurance->products);
  1802.                                 $orderProductInsurance $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdInsurance);
  1803.                                 $validateInsurance TRUE;
  1804.                                 if ('approved' == $orderProductInsurance->getStatus()) {
  1805.                                     $validateInsurance FALSE;
  1806.                                 }
  1807.                             } elseif (TRUE === $validateOrder && isset($orders['insurance']) && (== $segment || NULL == $segment)) {
  1808.                                 $productIdInsurance $orders['insurance'];
  1809.                                 $orderProductInsurance $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdInsurance);
  1810.                                 $validateInsurance TRUE;
  1811.                                 if ('approved' == $orderProductInsurance->getStatus()) {
  1812.                                     $validateInsurance FALSE;
  1813.                                 }
  1814.                             }
  1815.                             if ($validateInsurance && !empty($orderProductInsurance)) {
  1816.                                 $orderProductInsurance->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProductInsurance->getPublicKey()));
  1817.                                 $orderProductInsurance->setUpdatingdate(new \DateTime());
  1818.                                 $em->persist($orderProductInsurance);
  1819.                                 $em->flush();
  1820.                                 $EmisionTarjeta $insuranceService->EmisionTarjeta($orderProductInsurance);
  1821.                                 $session->set($transactionId '[assist][Emision]'$EmisionTarjeta->asXml());
  1822.                                 $insuranceService->changeStatus($status$orderProductInsurance);
  1823.                             }
  1824.                             if ($session->has($transactionId '[experience][payout_extra]')) {
  1825.                                 $payoutExtrasValues json_decode($session->get($transactionId '[flight][payout_extra_values]'));
  1826.                                 foreach ($payoutExtrasValues as $key => $payoutExtraValues) {
  1827.                                     if ('EXPERIENCE' == $payoutExtraValues->name) {
  1828.                                         $orderInfoExperience json_decode($session->get($transactionId '[experience][order' $key ']'));
  1829.                                         $productIdExperience str_replace('PN'''$orderInfoExperience->products);
  1830.                                         $orderProductExperience $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productIdExperience);
  1831.                                         $orderProductExperience->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProductExperience->getPublicKey()));
  1832.                                         $orderProductExperience->setUpdatingdate(new \DateTime());
  1833.                                         $em->persist($orderProductExperience);
  1834.                                         $em->flush();
  1835.                                         if ('approved' != $orderProductExperience->getStatus()) {
  1836.                                             $EmisionTarjeta $aviaturExperienceService->EmitirSolicitud($orderProductExperienceNULLTRUE);
  1837.                                         } elseif ((== $segment || NULL == $segment) && 'approved' == $orderProductExperience->getStatus()) {
  1838.                                             $EmisionTarjeta $aviaturExperienceService->EmitirSolicitud($orderProductExperienceNULLTRUE);
  1839.                                         }
  1840.                                     }
  1841.                                 }
  1842.                             } elseif (TRUE === $validateOrder && isset($orders['experience']) && (== $segment || NULL == $segment)) {
  1843.                                 $ordersExperience explode('+'$orders['experience']);
  1844.                                 foreach ($ordersExperience as $key => $ordersExperiences) {
  1845.                                     $orderProductExperience $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($ordersExperiences);
  1846.                                     $orderProductExperience->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProductExperience->getPublicKey()));
  1847.                                     $orderProductExperience->setUpdatingdate(new \DateTime());
  1848.                                     $em->persist($orderProductExperience);
  1849.                                     $em->flush();
  1850.                                     if ('approved' != $orderProductExperience->getStatus()) {
  1851.                                         $EmisionTarjeta $aviaturExperienceService->EmitirSolicitud($orderProductExperienceNULLTRUE);
  1852.                                     } elseif ((== $segment || NULL == $segment) && 'approved' == $orderProductExperience->getStatus()) {
  1853.                                         $EmisionTarjeta $aviaturExperienceService->EmitirSolicitud($orderProductExperienceNULLTRUE);
  1854.                                     }
  1855.                                 }
  1856.                             }
  1857.                             if ('error' != $emissionXml) {
  1858.                                 $updatePaymentXml $orderProduct->getUpdatepaymentdata();
  1859.                                 $updatePayment explode('<booking_id2/>'$updatePaymentXml);
  1860.                                 $orderProduct->setUpdatepaymentdata($updatePayment[0] . '<booking_id2/>' $emissionXml $updatePayment[1]);
  1861.                                 if (!empty($transactionId)) {
  1862.                                     if ($combination) {
  1863.                                         $session->set($transactionId '[emission' $segment ']'$response->asXML());
  1864.                                     } else {
  1865.                                         $session->set($transactionId '[emission]'$response->asXML());
  1866.                                     }
  1867.                                 }
  1868.                             } else {
  1869.                                 if (isset($emissionData->tarjeta)) {
  1870.                                     unset($emissionData->tarjeta);
  1871.                                     unset($emissionData->franquicia);
  1872.                                     unset($emissionData->codigo_auth);
  1873.                                     unset($emissionData->fecha_vencmiento);
  1874.                                 }
  1875.                                 $mailInfo print_r($emissionDataTRUE) . '<br>' print_r($responseTRUE);
  1876.                                 $message = (new \Swift_Message())
  1877.                                     ->setContentType('text/html')
  1878.                                     ->setFrom($session->get('emailNoReply'))
  1879.                                     ->setTo(['soportepagoelectronico@aviatur.com.co''soptepagelectronic@aviatur.com'])
  1880.                                     ->setBcc([$emailNotification'soportepagoelectronico@aviatur.com.co''soptepagelectronic@aviatur.com'])
  1881.                                     ->setSubject('Fallo de Emisión')
  1882.                                     ->setBody($mailInfo);
  1883.                                 $mailer->send($message);
  1884.                                 if (!empty($transactionId)) {
  1885.                                     $session->set($transactionId '[emission][error]'TRUE);
  1886.                                 }
  1887.                                 $urlResume $this->generateUrl($twig);
  1888.                                 $urlResume .= $additionalQS;
  1889.                                 $em->persist($orderProduct);
  1890.                                 $em->flush();
  1891.                                 return $this->redirect($urlResume);
  1892.                             }
  1893.                         }
  1894.                         $em->persist($orderProduct);
  1895.                         $em->flush();
  1896.                     } elseif ('FAIL_INVALIDTRAZABILITYCODE' == $returnCodeStatus || 'FAIL_ACCESSDENIED' == $returnCodeStatus || 'FAIL_TIMEOUT' == $returnCodeStatus) {
  1897.                         echo 'En este momento su #<referencia de factura> presenta un proceso de pago cuya transacción se encuentra
  1898.                             PENDIENTE de recibir información por parte de su entidad financiera, por favor espere
  1899.                             unos minutos y vuelva a consultar mas tarde para verificar sí su pago fue confirmado de
  1900.                             forma exitosa. Si desea mayor información sobre el estado actual de su operación puede
  1901.                             comunicarse a nuestras líneas de atención al cliente al teléfono XXXXXX o enviar
  1902.                             inquietudes al email mispagos@micomercio.com y pregunte por el estado de la
  1903.                             transacción <#CUS> .'
  1904.                         ;
  1905.                         $orderProduct->setEmissiondata('error');
  1906.                         $orderProduct->setUpdatingdate(new \DateTime());
  1907.                         $em->persist($orderProduct);
  1908.                         $em->flush();
  1909.                         $twig 'aviatur_flight_payment_error_secure';
  1910.                     }
  1911.                     if (!empty($transactionId)) {
  1912.                         if ($combination) {
  1913.                             $session->set($transactionId.'[flight][retry'.$segment.']'$retryCount 1);
  1914.                         } else {
  1915.                             $session->set($transactionId.'[flight][retry]'$retryCount 1);
  1916.                         }
  1917.                     }
  1918.                     $urlResume $this->generateUrl($twig);
  1919.                     $urlResume .= $additionalQS;
  1920.                     return $this->redirect($urlResume);
  1921.                 } else {
  1922.                     $decodedResponse->getTransactionInformationResult $paymentResponse;
  1923.                     $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
  1924.                     $orderProduct->setUpdatingdate(new \DateTime());
  1925.                     $em->persist($orderProduct);
  1926.                     $em->flush();
  1927.                     return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''Ocurrió un error al consultar el estado de la transacción'));
  1928.                 }
  1929.             } else {
  1930.                 return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró información de la transacción'));
  1931.             }
  1932.         }
  1933.     }
  1934.     public function getStatusTransaction($paymentResponse$orderProduct$decodedRequest): array
  1935.     {
  1936.         $statusResponse $paymentResponse->getTransactionInformationResult->transactionState ?? $paymentResponse->status->status;
  1937.         $twig $status $additionalQS '';
  1938.         switch ((string) $statusResponse) {
  1939.             case 'OK':
  1940.             case 'APPROVED':
  1941.                 $twig 'aviatur_flight_payment_success_secure';
  1942.                 $status 'approved';
  1943.                 if ('rappi' == $orderProduct->getOrder()->getAgency()->getAssetsFolder()) {
  1944.                     $additionalQS '?bookingid='.$orderProduct->getBooking().'&total='.$decodedRequest->totalAmount;
  1945.                 }
  1946.                 break;
  1947.             case 'PENDING':
  1948.                 $twig 'aviatur_flight_payment_pending_secure';
  1949.                 $status 'pending';
  1950.                 break;
  1951.             case 'NOT_AUTHORIZED':
  1952.             case 'REJECTED':
  1953.                 $twig 'aviatur_flight_payment_rejected_secure';
  1954.                 $status 'rejected';
  1955.                 break;
  1956.             case 'FAILED':
  1957.                 $twig 'aviatur_flight_payment_error_secure';
  1958.                 $status 'failed';
  1959.                 break;
  1960.         }
  1961.         return [
  1962.             'twig' => $twig,
  1963.             'status' => $status,
  1964.             'additionalQS' => $additionalQS
  1965.         ];
  1966.     }
  1967.     public function doublePayment(AviaturEncoder $aviaturEncoderOrderController $orderControllerAviaturLogSave $logSaveP2PController $p2PController$orderProduct$info$combination false$segment false$consumingPayment false)
  1968.     {
  1969.         $requestCencosud = [];
  1970.         $x_invoice_num null;
  1971.         $em $this->managerRegistry->getManager();
  1972.         $validateEmitted false;
  1973.         if (isset($info['request']->x_cencosud_p2p)) {
  1974.             unset($info['request']->x_cencosud_p2p);
  1975.         }
  1976.         if (isset($info['request']->infoCash)) {
  1977.             //CASH INFORMATION
  1978.             $x_invoice_num $info['request']->infoCash->x_reference;
  1979.             $x_description $info['request']->infoCash->x_description;
  1980.         } elseif (isset($info['request']->payer)) {
  1981.             //PSE INFORMATION
  1982.             $x_invoice_num $info['request']->reference;
  1983.             $x_description $info['request']->description;
  1984.         } elseif (isset($info['request']->x_card_type)) {
  1985.             //P2P INFORMATION
  1986.             $x_invoice_num $info['request']->x_invoice_num;
  1987.             $x_description $info['request']->x_description;
  1988.         } elseif (isset($info['request']->dataTransf)) {
  1989.             //SAFETY INFORMATION
  1990.             $x_invoice_num $info['request']->dataTransf->x_reference;
  1991.             $x_description $info['request']->dataTransf->x_description;
  1992.         }
  1993.         $flightType = ('NAC' == $info['flightType']) ? 81 82;
  1994.         $airline_code 71;
  1995.         $airline_name 'Aviatur';
  1996.         $airline_iata_code 'Aviatur';
  1997.         switch ($info['agencyId']) {
  1998.             case 76:
  1999.             case 85:
  2000.                 $airline_code == $flightType 43 44;
  2001.                 $airline_name 'Octopus Travel';
  2002.                 $airline_iata_code 'Octopus Travel';
  2003.                 break;
  2004.             case 119:
  2005.                 $airline_code == $flightType 81 82;
  2006.                 $airline_name 'Cielos Abiertos';
  2007.                 $airline_iata_code 'Cielos Abiertos';
  2008.                 break;
  2009.         }
  2010.         $requestCencosud['product_type'] = 'flight';
  2011.         $requestCencosud['x_card_num'] = '4111111111111111'//CAMBIAR POR TARJETA DE LA PROMOCION
  2012.         $requestCencosud['x_invoice_num'] = $x_invoice_num.'-C';
  2013.         $requestCencosud['x_amount'] = $info['x_amount'];
  2014.         $requestCencosud['x_tax'] = 0;
  2015.         $requestCencosud['x_amount_base'] = 0;
  2016.         $requestCencosud['x_service_fee'] = 0;
  2017.         $requestCencosud['x_service_fee_tax'] = 0;
  2018.         $requestCencosud['x_service_fee_base'] = 0;
  2019.         $requestCencosud['x_airport_tax'] = 0;
  2020.         $requestCencosud['x_first_name'] = 'CENCOSUD COLOMBIA S.A';
  2021.         $requestCencosud['x_last_name'] = 'CENCOSUD COLOMBIA S.A';
  2022.         $requestCencosud['x_cust_id'] = '9001551077';
  2023.         $requestCencosud['x_address'] = 'Av 19 No 4 62';
  2024.         $requestCencosud['x_phone'] = '3817111';
  2025.         $requestCencosud['x_email'] = 'jorge.ubaque@aviatur.com';
  2026.         $requestCencosud['x_exp_date'] = $cencosudExpDate '112020';
  2027.         $requestCencosud['x_card_code'] = '000';
  2028.         $requestCencosud['x_differed'] = '1';
  2029.         $requestCencosud['x_client_id'] = $info['x_client_id'];
  2030.         $requestCencosud['x_airline'] = $airline_code;
  2031.         $requestCencosud['x_airline_name'] = $airline_name;
  2032.         $requestCencosud['x_airline_iata_code'] = $airline_iata_code;
  2033.         $requestCencosud['x_airport_tax'] = 0;
  2034.         $requestCencosud['x_service_fee_code'] = 99;
  2035.         $requestCencosud['x_currency_code'] = 'COP';
  2036.         $requestCencosud['x_description'] = $x_description;
  2037.         $requestCencosud['x_cencoPayment'] = true;
  2038.         $info['request']->x_cencosud_p2p $requestCencosud;
  2039.         //save new information of request
  2040.         $orderProduct->setPayrequest($aviaturEncoder->AviaturEncode(json_encode($info['request']), $orderProduct->getPublicKey()));
  2041.         $orderProduct->setUpdatingdate(new \DateTime());
  2042.         $em->flush();
  2043.         if (true === $consumingPayment) {
  2044.             if (isset($info['response']->x_cencosud_p2p)) {
  2045.                 unset($info['response']->x_cencosud_p2p);
  2046.             }
  2047.             $paymentResponseCencosud $p2PController->placetopayAction($requestCencosud$combination$segment);
  2048.             $logSave->logSave(print_r($paymentResponseCencosudtrue), 'paymentP2P''paymentResponse');
  2049.             //Add info from second transaction to response
  2050.             $info['response']->x_invoice_num $paymentResponseCencosud['x_invoice_num'];
  2051.             $info['response']->x_amount $paymentResponseCencosud['x_amount'];
  2052.             $info['response']->x_response_reason_code $paymentResponseCencosud['x_response_reason_code'];
  2053.             $info['response']->x_response_reason_text $paymentResponseCencosud['x_response_reason_text'];
  2054.             $info['response']->x_approval_code $paymentResponseCencosud['x_approval_code'];
  2055.             $info['response']->x_response_code $paymentResponseCencosud['x_response_code'];
  2056.             $info['response']->x_franchise $paymentResponseCencosud['x_franchise'];
  2057.             $info['response']->x_bank_name $paymentResponseCencosud['x_bank_name'];
  2058.             $info['response']->x_exp_date $cencosudExpDate;
  2059.             $info['response']->x_transaction_date date('Y-m-d H:i:s');
  2060.             $info['response']->x_cencosud_p2p $paymentResponseCencosud;
  2061.             //save new information of response
  2062.             $orderProduct->setPayrequest($aviaturEncoder->AviaturEncode(json_encode($info['request']), $orderProduct->getPublicKey()));
  2063.             $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($info['response']), $orderProduct->getPublicKey()));
  2064.             $orderProduct->setUpdatingdate(new \DateTime());
  2065.             $em->flush();
  2066.             //Generate new update payment
  2067.             $orderController->updatePaymentAction($orderProduct);
  2068.             if (isset($paymentResponseCencosud->x_response_code_cyber) && (== $paymentResponseCencosud->x_response_code_cyber)) {
  2069.                 $paymentResponseCencosud->x_response_code_case 99;
  2070.             } elseif (isset($paymentResponseCencosud->x_response_code)) {
  2071.                 $paymentResponseCencosud->x_response_code_case $paymentResponseCencosud->x_response_code;
  2072.             } elseif (isset($paymentResponseCencosud['error'])) {
  2073.                 $validateEmitted false;
  2074.             }
  2075.             if (isset($paymentResponseCencosud->x_response_code_case)) {
  2076.                 switch ($paymentResponseCencosud->x_response_code_case) {
  2077.                     case 99:
  2078.                         //rechazado cybersource
  2079.                         $validateEmitted false;
  2080.                         break;
  2081.                     case 3:// pendiente p2p
  2082.                         $validateEmitted false;
  2083.                         break;
  2084.                     case 0:// error p2p
  2085.                         $validateEmitted false;
  2086.                         break;
  2087.                     case 2://rechazada p2p
  2088.                         $validateEmitted false;
  2089.                         break;
  2090.                     case 1:// aprobado p2p
  2091.                         $validateEmitted true;
  2092.                         break;
  2093.                 }
  2094.             }
  2095.         }
  2096.         return $validateEmitted;
  2097.     }
  2098.     public function p2pSendInformationAdditionalServices(P2PController $p2PControllerOrderController $orderController$transactionIdSessionInterface $sessionParameterBagInterface $parameterBagTokenizerService $tokenizerServiceCustomerMethodPaymentService $methodPaymentService$mailerAviaturLogSave $logSave$numero_orden$administrative_amount$productId$name_product_add_serv$description_add_serv)
  2099.     {
  2100.         $em $this->managerRegistry->getManager();
  2101.         $orderProductExperience $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  2102.         $postData json_decode($session->get($transactionId.'[flight][detail_data_flight]'));
  2103.         $array json_decode($session->get($transactionId.'[add_serv][p2p_array]'), true);
  2104.         /* Validación temporal del array */
  2105.         // $array['x_card_num'] = '4111111111111111';
  2106.         // $array['x_exp_date'] = '122024';
  2107.         // $array['x_card_code'] = '123';
  2108.         /* Validación temporal del array */
  2109.         $x_client_id $postData->BD->id;
  2110.         $array['product_type'] = $name_product_add_serv;
  2111.         $array['productId'] = $productId;
  2112.         $array['x_cant_passenger'] = $postData->PI->person_count_1;
  2113.         $array['x_client_id'] = $x_client_id;
  2114.         $arrayAdditionalServices $array;
  2115.         $arrayAdditionalServices['x_invoice_num'] = "ON".$numero_orden."-PN".$productId;
  2116.         $arrayAdditionalServices['x_description'] = $description_add_serv." - "."ON".$numero_orden."-PN".$productId;
  2117.         $arrayAdditionalServices['x_amount'] = (int) $administrative_amount;
  2118.         $arrayAdditionalServices['x_tax'] = (int) 0;
  2119.         $arrayAdditionalServices['x_amount_base'] = (int) 0;
  2120.         $arrayAdditionalServices['x_airport_tax'] = (int) 0;
  2121.         unset($arrayAdditionalServices['x_airline']);
  2122.         unset($arrayAdditionalServices['x_airline_name']);
  2123.         unset($arrayAdditionalServices['x_airline_iata_code']);
  2124.         unset($arrayAdditionalServices['x_service_fee']);
  2125.         unset($arrayAdditionalServices['x_service_fee_tax']);
  2126.         unset($arrayAdditionalServices['x_service_fee_base']);
  2127.         unset($arrayAdditionalServices['x_service_fee_code']);
  2128.         unset($arrayAdditionalServices['x_airport_tax']);
  2129.         $paymentResponseAddServ $p2PController->placetopayAction($parameterBag$tokenizerService$methodPaymentService$mailer$logSave$arrayAdditionalServicesfalsenull$numero_orden$transactionId);
  2130.         if (null != $paymentResponseAddServ) {
  2131.             //$updateOrder = $orderController->updatePaymentAction($orderProductExperience);
  2132.             if (isset($paymentResponseAddServ['x_response_code']) && (== $paymentResponseAddServ['x_response_code'])) {
  2133.                 $x_response_code_case 99;
  2134.             } elseif (isset($paymentResponseAddServ['error'])) {
  2135.                 $x_response_code_case 0;
  2136.             } else {
  2137.                 $x_response_code_case $paymentResponseAddServ['x_response_code'];
  2138.             }
  2139.             switch ($x_response_code_case) {
  2140.                 case 99:
  2141.                     $status 'rejected';
  2142.                     break;
  2143.                 case 3:// pendiente p2p
  2144.                     $status 'pending';
  2145.                     break;
  2146.                 case 0:// error p2p
  2147.                     $status 'error';
  2148.                     // no break
  2149.                 case 2:// rechazada p2p
  2150.                     $status 'rejected';
  2151.                     break;
  2152.                 case 1:
  2153.                     $status 'approved';
  2154.                     break;
  2155.             }
  2156.         } else {
  2157.             $status 'pending';
  2158.         }
  2159.         //$orderProductExperience->setUpdatingdate(new \DateTime());
  2160.         //$orderProductExperience->setStatus($status);
  2161.         //$em->persist($orderProductExperience);
  2162.         //$em->flush();
  2163.         unset($x_client_id);
  2164.         return $paymentResponseAddServ;
  2165.     }
  2166.     public function totalAmountSelectedAncillaries($addProductData){
  2167.         $total_amount 0;
  2168.         $init_position strpos($addProductData'<passengers>');
  2169.         $final_position strpos($addProductData'</passengers>');
  2170.         $stringXmlPassengers substr($addProductData$init_position, ($final_position $init_position)+13);
  2171.         $xmlPassengers simplexml_load_string($stringXmlPassengers);
  2172.         $array_passengers = array();
  2173.         /* Si hay un solo pasajero, igual se debe pasar a array */
  2174.         if(isset($xmlPassengers->passenger[0])){
  2175.             foreach($xmlPassengers->passenger as $key => $passenger){
  2176.                 $array_passengers[] = $passenger;
  2177.             }
  2178.         } else {
  2179.             $array_passengers[] = $xmlPassengers->passenger;
  2180.         }
  2181.         /* Revisar cada registro de ancillaries si hay uno o varios (Si los hay) */
  2182.         foreach($array_passengers as $key1 => $passenger){
  2183.             if(isset($passenger->ancillaries)){
  2184.                 /* Validar si hay uno o varios ancillaries para afectar los valores finales en la suma */
  2185.                 if(isset($passenger->ancillaries->ancillarie[0])){
  2186.                     foreach ($passenger->ancillaries->ancillarie as $key2 => $ancillarie) {
  2187.                         $total_amount += (double)$ancillarie->UnitPrice->TotalAmount;
  2188.                     }
  2189.                 } else {
  2190.                     $total_amount += (double)$passenger->ancillaries->ancillarie->UnitPrice->TotalAmount;
  2191.                 }
  2192.             }
  2193.         }
  2194.         return $total_amount;
  2195.     }
  2196.     /**
  2197.      * validateActivationOfAviaturCampaignForCash()
  2198.      * Validate If there is an active campaign for an Aviatur agency, for changing $airlinePaymentType to CASH.
  2199.      * If the condition exists, the function gets true
  2200.      * Author: Ing. David Rincon
  2201.      * Email: david.rincon@aviatur.com
  2202.      * Date: 2024/10/31
  2203.      * @param $prepaymentInfo Response.
  2204.      * @param $em Registry Manager.
  2205.      * @param $agency Code of the agency.
  2206.      * @return true or false
  2207.      */
  2208.     public function validateActivationOfAviaturCampaignForCash($prepaymentInfo$em$agency){
  2209.         /* Hay que validar que se cumplan las condiciones de registro de campañas, para que cambie el $airlinePaymentType a CASH */
  2210.         $result false;
  2211.         if(!is_null($this->specialDiscountParams)){
  2212.             if($this->specialDiscountParams->getValue() == '1'){
  2213.                 if ('' != $prepaymentInfo->Message->OTA_AirBookRS->AirReservation->BookingReferenceID['ID']) {
  2214.                     $pricedItinerary $prepaymentInfo->Message->OTA_AirBookRS->AirReservation;
  2215.                     $xmlOrigin = (string) $pricedItinerary->OriginDestinationOptions->OriginDestinationOption->FlightSegment->DepartureAirport['LocationCode'];
  2216.                     foreach ($pricedItinerary->OriginDestinationOptions->OriginDestinationOption->FlightSegment as $flightSegment) {
  2217.                         $xmlDestination = (string) $flightSegment->ArrivalAirport['LocationCode'];
  2218.                     }
  2219.                     $xmlDate = (string) $pricedItinerary->OriginDestinationOptions->OriginDestinationOption[0]->FlightSegment['DepartureDateTime'];
  2220.                     $cities $em->getRepository(\Aviatur\SearchBundle\Entity\SearchCities::class)->findByIata([$xmlOrigin$xmlDestination]);
  2221.                     if (!= sizeof($cities)) {
  2222.                         $citiesArray = [];
  2223.                         $tempCities $cities;
  2224.                         $cities = [];
  2225.                         foreach ($tempCities as $city) {
  2226.                             if (!in_array($city->getIata(), $citiesArray)) {
  2227.                                 $citiesArray[] = $city->getIata();
  2228.                                 $cities[] = $city;
  2229.                             }
  2230.                         }
  2231.                         $airports $em->getRepository(\Aviatur\SearchBundle\Entity\SearchAirports::class)->findByIata([$xmlOrigin$xmlDestination]);
  2232.                         foreach ($airports as $airport) {
  2233.                             $tempCity $airport->getSearchCities();
  2234.                             if ((null != $tempCity) && !in_array($tempCity->getIata(), $citiesArray)) {
  2235.                                 $cities[] = $tempCity;
  2236.                                 $citiesArray[] = $tempCity->getIata();
  2237.                             }
  2238.                         }
  2239.                     }
  2240.                     $specialDiscountCity = array();
  2241.                     $specialCountries = array();
  2242.                     foreach ($cities as $city) {
  2243.                         $specialDiscountCity[] = $city->getIata();
  2244.                         $specialCountries[] = $city->getCountrycode();
  2245.                     }
  2246.                     $specialDiscountAviaturFlight $em->getRepository(\Aviatur\FlightBundle\Entity\SpecialDiscountAviatur::class)->findWithCities($specialDiscountCity[1], $xmlDate$agency$specialCountries);
  2247.                     if (!is_null($specialDiscountAviaturFlight)) {
  2248.                         $result true;
  2249.                     }
  2250.                 }
  2251.             }
  2252.         }
  2253.         return $result;
  2254.     }
  2255.     public function processAncillariesData($ancillariesData,$correlationId) {
  2256.         $result = [];
  2257.         $arrayEmissionDataAncillaries json_decode($ancillariesDatatrue);
  2258.         // Decodificar los datos de asientos y equipaje si existen
  2259.         if (isset($arrayEmissionDataAncillaries["seats"])) {
  2260.             $arrayEmissionDataAncillaries["seats"] = json_decode(json_decode(json_encode(urldecode($arrayEmissionDataAncillaries["seats"]))), true);
  2261.         }
  2262.         if (isset($arrayEmissionDataAncillaries["baggage"])) {
  2263.             $arrayEmissionDataAncillaries["baggage"] = json_decode(json_decode(json_encode(urldecode($arrayEmissionDataAncillaries["baggage"]))), true);
  2264.         }
  2265.         // Procesar equipaje
  2266.         if (isset($arrayEmissionDataAncillaries['baggage']) && is_array($arrayEmissionDataAncillaries['baggage'])) {
  2267.             foreach ($arrayEmissionDataAncillaries['baggage'] as $item) {
  2268.                 $position str_replace('P'''$item['passangerId']);
  2269.                 if (!isset($result[$position])) {
  2270.                     $result[$position] = [];
  2271.                 }
  2272.                 if($correlationId == $item['correlationID']){
  2273.                     $item['OfferItemID'] = $item['ServiceIdSegment'] . "-" $item['OfferItemID'];
  2274.                     $result[$position][] = $item;
  2275.                 }
  2276.             }
  2277.         }
  2278.         // Procesar asientos
  2279.         if (isset($arrayEmissionDataAncillaries['seats']) && is_array($arrayEmissionDataAncillaries['seats'])) {
  2280.             foreach ($arrayEmissionDataAncillaries['seats'] as $item) {
  2281.                 $position str_replace('P'''$item['passangerId']);
  2282.                 if (!isset($result[$position])) {
  2283.                     $result[$position] = [];
  2284.                 }
  2285.                 if($correlationId == $item['correlationID']){
  2286.                     $item['OfferItemID'] = $item['OfferItemID'] . "-" $item['SelectedSeat'];
  2287.                     $result[$position][] = $item;
  2288.                 }
  2289.             }
  2290.         }
  2291.         return $result;
  2292.     }
  2293.     /**
  2294.      * changeAcutes()
  2295.      * Cambia los acentos para que no lleguen cadenas dañadas a un XML.
  2296.      * Author: Ing. David Rincon
  2297.      * Email: david.rincon@aviatur.com
  2298.      * Date: 2025/05/08
  2299.      * @param $cadena (Cadena original)
  2300.      * @return $cadena (Cadena sin acentos)
  2301.      */
  2302.     function changeAcutes($cadena){
  2303.         //Reemplazamos la A y a
  2304.         $cadena str_replace(
  2305.             array('Á''À''Â''Ä''á''à''ä''â''ª'),
  2306.             array('A''A''A''A''a''a''a''a''a'),
  2307.             $cadena );
  2308.         //Reemplazamos la E y e
  2309.         $cadena str_replace(
  2310.             array('É''È''Ê''Ë''é''è''ë''ê'),
  2311.             array('E''E''E''E''e''e''e''e'),
  2312.             $cadena );
  2313.         //Reemplazamos la I y i
  2314.         $cadena str_replace(
  2315.             array('Í''Ì''Ï''Î''í''ì''ï''î'),
  2316.             array('I''I''I''I''i''i''i''i'),
  2317.             $cadena );
  2318.         //Reemplazamos la O y o
  2319.         $cadena str_replace(
  2320.             array('Ó''Ò''Ö''Ô''ó''ò''ö''ô'),
  2321.             array('O''O''O''O''o''o''o''o'),
  2322.             $cadena );
  2323.         //Reemplazamos la U y u
  2324.         $cadena str_replace(
  2325.             array('Ú''Ù''Û''Ü''ú''ù''ü''û'),
  2326.             array('U''U''U''U''u''u''u''u'),
  2327.             $cadena );
  2328.         //Reemplazamos la N, n, C y c
  2329.         $cadena str_replace(
  2330.             array('Ñ''ñ''Ç''ç'),
  2331.             array('N''n''C''c'),
  2332.             $cadena );
  2333.         return $cadena;
  2334.     }
  2335. }