src/Aviatur/PaymentBundle/Controller/SafetypayController.php line 42

Open in your IDE?
  1. <?php
  2. namespace Aviatur\PaymentBundle\Controller;
  3. use Aviatur\GeneralBundle\Services\AviaturEncoder;
  4. use Aviatur\PaymentBundle\Models\SafetyPayProxy;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  9. use Symfony\Component\Routing\RouterInterface;
  10. class SafetypayController
  11. {
  12.     public $url;
  13.     public $port_ssl;
  14.     public $operation;
  15.     public $conf = [];
  16.     public $wsdl;
  17.     public $ignore_level 0;
  18.     public $em;
  19.     public $session;
  20.     public $aviaturMd5;
  21.     public $agency;
  22.     public $login;
  23.     public $tranKey;
  24.     public $siteCode;
  25.     public $currency;
  26.     public $endpoint;
  27.     public $Environment;
  28.     public function __construct(RequestStack $requestStackManagerRegistry $managerRegistrySessionInterface $sessionParameterBagInterface $parameterBagAviaturEncoder $aviatur_md5)
  29.     {
  30.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  31.         
  32.         $request $requestStack->getCurrentRequest();
  33.         $this->em $managerRegistry->getManager();
  34.         $this->session $session;
  35.         $this->aviaturMd5 $aviatur_md5;
  36.         $isFront $session->has('operatorId');
  37.         if (null != $request) {
  38.             $transactionId $session->get($transactionIdSessionName);
  39.             if (preg_match('/flight/'$request->attributes->get('_route'))) {
  40.                 $postData json_decode($session->get($transactionId.'[flight][detail_data_flight]'), true);
  41.             } elseif (preg_match('/hotel/'$request->attributes->get('_route'))) {
  42.                 $postData json_decode($session->get($transactionId.'[hotel][detail_data_hotel]'), true);
  43.             }
  44.             $this->agency $this->em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($this->session->get('agencyId'));
  45.         } else {
  46.             $this->agency $this->em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find(1);
  47.         }
  48.         if (!$isFront) {
  49.             if (isset($postData)) {
  50.                 $paymentMethod $postData['PD']['type'];
  51.             } else {
  52.                 $paymentMethod 'safety';
  53.             }
  54.         
  55.         $paymentMethod $this->em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethod::class)->findOneByCode($paymentMethod);
  56.         $paymentMethodAgency $this->em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findOneBy(['agency' => $this->agency'paymentMethod' => $paymentMethod]);
  57.         
  58.         if (isset($paymentMethodAgency)){
  59.             $this->login $paymentMethodAgency->getSitecode();
  60.             $this->tranKey $paymentMethodAgency->getTrankey();
  61.             $this->siteCode $paymentMethodAgency->getSitecode();
  62.             $this->currency $paymentMethodAgency->getCurrency();
  63.             if (== $paymentMethodAgency->getIstest()) {
  64.                 $this->endpoint $paymentMethodAgency->getTestendpoint();
  65.                 $this->Environment 1//For Sandbox (Test);
  66.             } else {
  67.                 $this->endpoint $paymentMethodAgency->getProductionendpoint();
  68.                 $this->Environment 0//For Production
  69.             }
  70.         }
  71.         }
  72.     }
  73.     public function safetyAction(RouterInterface $routerParameterBagInterface $parameterBag, \Swift_Mailer $mailer$parametMerchant$array)
  74.     {
  75.         $emailNotification $parameterBag->get('email_notification');
  76.         $emissionData null;
  77.         $response null;
  78.         $tokenUrl = [];
  79.         $channel null;
  80.         if ('Alojamiento' == $parametMerchant['dataTrans']['x_type_description']):
  81.             //Url Hoteles
  82.             $transactionOk $router->generate('aviatur_hotel_payment_safety_ok_return_url_secure', [], true);
  83.             $transactionError $router->generate('aviatur_hotel_payment_safety_error_return_url_secure', [], true);
  84.         elseif ('Tiquete Aereo' == $parametMerchant['dataTrans']['x_type_description']):
  85.             //Url Vuelos
  86.             $transactionOk $router->generate('aviatur_flight_payment_safety_ok_return_url_secure', [], true);
  87.             $transactionError $router->generate('aviatur_flight_payment_safety_error_return_url_secure', [], true);
  88.         elseif ('Helicopteros' == $parametMerchant['dataTrans']['x_type_description']):
  89.             //Url Vuelos
  90.             $transactionOk $router->generate('aviatur_helicopter_payment_safety_ok_return_url_secure', [], true);
  91.             $transactionError $router->generate('aviatur_helicopter_payment_safety_error_return_url_secure', [], true);
  92.         elseif ('assist' == $parametMerchant['dataTrans']['x_type_description']):
  93.             //Url Vuelos
  94.             $transactionOk $router->generate('aviatur_insurance_payment_safety_ok_return_url_secure', [], true);
  95.             $transactionError $router->generate('aviatur_insurance_payment_safety_error_return_url_secure', [], true);
  96.         elseif ('package' == $parametMerchant['dataTrans']['x_type_description']):
  97.             //Url Vuelos
  98.             $transactionOk $router->generate('aviatur_package_payment_safety_ok_return_url_secure', [], true);
  99.             $transactionError $router->generate('aviatur_package_payment_safety_error_return_url_secure', [], true);
  100.         elseif ('cruise' == $parametMerchant['dataTrans']['x_type_description']):
  101.             //Url Cruceros
  102.             $transactionOk $router->generate('aviatur_cruise_payment_safety_ok_return_url_secure', [], true);
  103.             $transactionError $router->generate('aviatur_cruise_payment_safety_error_return_url_secure', [], true);
  104.         endif;
  105.         $MerchantSalesID $parametMerchant['MerchantSalesID'];
  106.         $Amount $parametMerchant['Amount'];
  107.         if ('safety' == $array['x_payment_data']):
  108.             $ProductID 1;
  109.         $ExpirationTime 30; elseif ('baloto' == $array['x_payment_data']):
  110.             $ProductID 2;
  111.         $ExpirationTime 300;
  112.         endif;
  113.         $parameters = [
  114.             'Username' => $this->siteCode,
  115.             'ApiKey' => $this->siteCode,
  116.             'SignatureKey' => $this->tranKey,
  117.             'RequestDateTime' => $this->getDateIso8601(time()),
  118.             'CurrencyID' => $this->currency,
  119.             'Amount' => round((float) strip_tags($Amount), 2),
  120.             'MerchantSalesID' => $MerchantSalesID,
  121.             'Language' => 'ES',
  122.             'TrackingCode' => '',
  123.             'ExpirationTime' => $ExpirationTime,
  124.             'FilterBy' => '',
  125.             'TransactionOkURL' => $transactionOk,
  126.             'TransactionErrorURL' => $transactionError,
  127.             'TransactionExpirationTime' => $ExpirationTime,
  128.             'CustomMerchantName' => '',
  129.             'ShopperEmail' => '',
  130.             'ProductID' => $ProductID,
  131.             'SubMerchantID' => '',
  132.             'ResponseFormat' => 'XML',
  133.             'Protocol' => 'https',
  134.             'Environment' => $this->Environment,
  135.             'port_ssl' => 443,
  136.         ];
  137.         $parametMerchant['dataTrans']['dirIp'] = $this->getRealIP();
  138.         $parametMerchant['dataTrans']['x_response_code'] = '';
  139.         $parametMerchant['dataTrans']['x_response_reason_text'] = '';
  140.         $safetypayProxy = new SafetyPayProxy();
  141.         $Result $safetypayProxy->CreateExpressToken($parameters);
  142.         $MerchantSalesID explode('+'$MerchantSalesID);
  143.         foreach ($MerchantSalesID as $key => $MerchantSales) {
  144.             $order explode('+'$MerchantSalesID[$key]);
  145.             $order_id explode('PN'$order[0]);
  146.             $publicKey $this->aviaturMd5->aviaturRandomKey();
  147.             $requestArray = ['tokenRequest' => $Result['Request'], 'payRequest' => '''notificationRequest' => '''dataTransf' => $parametMerchant['dataTrans']];
  148.             $responseArray = ['tokenResponse' => $Result['Response'], 'payResponse' => '''notificationResponse' => ''];
  149.             $responseArray['dataTransf']['x_response_code'] = '';
  150.             $responseArray['dataTransf']['x_response_reason_text'] = '';
  151.             $requestArray['dataTransf']['x_operationId'] = 'SafetyPay';
  152.             if (isset($array['x_cant_passenger'])) {
  153.                 $responseArray['x_cant_passenger'] = $array['x_cant_passenger'];
  154.                 $responseArray['product_type'] = $array['product_type'];
  155.             }
  156.             $encodeRequest json_encode($requestArray);
  157.             $encodeResponse json_encode($responseArray);
  158.             $safetyRequest $this->aviaturMd5->AviaturEncode($encodeRequest$publicKey);
  159.             $safetyResponse $this->aviaturMd5->AviaturEncode($encodeResponse$publicKey);
  160.             $order_product $this->em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->findOneById($order_id[1]);
  161.             $order_product->setEmissiondata($array['xmlCreateOrder']);
  162.             $order_product->setPayRequest($safetyRequest);
  163.             $order_product->setPayResponse($safetyResponse);
  164.             $order_product->setPublicKey($publicKey);
  165.             $order_product->setStatus('pending');
  166.             $order $this->em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($order_product->getOrder()->getId());
  167.             $order->setStatus('pending');
  168.             $this->em->persist($order);
  169.             $this->em->persist($order_product);
  170.         }
  171.         $this->em->flush();
  172.         $emissionData->x_booking $array['x_booking'];
  173.         $emissionData->x_first_name $array['x_first_name'];
  174.         $emissionData->x_last_name $array['x_last_name'];
  175.         $emissionData->x_doc_num $array['x_doc_num'];
  176.         $emissionData->x_reference $array['x_reference'];
  177.         $emissionData->x_description $array['x_description'];
  178.         $emissionData->x_total_amount $array['x_total_amount'];
  179.         $emissionData->x_email $array['x_email'];
  180.         $emissionData->x_address $array['x_address'];
  181.         $emissionData->x_phone $array['x_phone'];
  182.         $emissionData->x_type_description $array['x_type_description'];
  183.         $emissionData->x_resultSafetyPay $Result;
  184.         $mailInfo print_r($emissionDatatrue).'<br>'.print_r($responsetrue);
  185.         $message = (new \Swift_Message())
  186.                 ->setContentType('text/html')
  187.                 ->setFrom($this->session->get('emailNoReply'))
  188.                 ->setTo('soportepagoelectronico@aviatur.com.co''soptepagelectronic@aviatur.com')
  189.                 ->setBcc($emailNotification)
  190.                 ->setSubject('Creación Transacción SafetyPay'.$emissionData->x_reference)
  191.                 ->setBody($mailInfo);
  192.         $mailer->send($message);
  193.         if ('0' == $Result['result']['ErrorManager']['ErrorNumber']['@content']):
  194.             $tokenUrl['url'] = $Result['result']['ShopperRedirectURL'].$channel;
  195.         $tokenUrl['html'] = '<a href="'.$Result['result']['ShopperRedirectURL'].$channel.'"target="_new">'
  196.                     .'<img src="images/safetypay_logo.jpg" border="0" alt="SafetyPay Inc." /></a>';
  197.         return $Response = ['response' => $tokenUrl['url'], 'status' => 'ok']; else:
  198.             if (is_array($Result['result']['ErrorManager']['ErrorNumber']['@content'])):
  199.                 $tokenUrl '<span style="color:red;">Error: '
  200.                         .current($Result['result']['ErrorManager']['ErrorNumber']['@content']).': '
  201.                         .current($Result['result']['ErrorManager']['Description']['@content']).'. Severity: '
  202.                         .current($Result['result']['ErrorManager']['Severity']['@content']).'.</span>'; else:
  203.                 $tokenUrl '<span style="color:red;">Error '
  204.                         .$Result['result']['ErrorManager']['ErrorNumber']['@content'].': '
  205.                         .$Result['result']['ErrorManager']['Description']['@content'].'. Severity: '
  206.                         .$Result['result']['ErrorManager']['Severity']['@content'].'.</span>';
  207.         endif;
  208.         return $Response = ['response' => $tokenUrl'status' => 'error'];
  209.         endif;
  210.     }
  211.     public function safetyok()
  212.     {
  213.         $toconfirm = [];
  214.         $ConfirmTransactions = [];
  215.         $ResultOperation = [];
  216.         $parameters = [
  217.             'ApiKey' => $this->siteCode,
  218.             'SignatureKey' => $this->tranKey,
  219.             'Environment' => $this->Environment,
  220.             'Protocol' => 'https',
  221.             'port_ssl' => 443,
  222.             'RequestDateTime' => $this->getDateIso8601(time()),
  223.         ];
  224.         $safetypayProxy = new SafetyPayProxy();
  225.         $Result $safetypayProxy->GetNewOperationActivity($parameters);
  226.         $MerchantSalesID $Result['result']['ListOfOperations']['Operation']['MerchantSalesID'];
  227.         $MerchantSalesID explode('+'$MerchantSalesID);
  228.         foreach ($MerchantSalesID as $key => $MerchantSales) {
  229.             $order explode('+'$MerchantSalesID[$key]);
  230.             $order_id explode('PN'$order[0]);
  231.             $publicKey $this->aviaturMd5->aviaturRandomKey();
  232.             $order_product $this->em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->findOneById($order_id[1]);
  233.             if (null != $order_product):
  234.                 $decodedRequest json_decode($this->aviaturMd5->aviaturDecode($order_product->getPayrequest(), $order_product->getPublicKey()), true);
  235.             $decodedResponse json_decode($this->aviaturMd5->aviaturDecode($order_product->getPayresponse(), $order_product->getPublicKey()), true);
  236.             $decodedRequest['payRequest'] = $Result['Request'];
  237.             $decodedRequest['dataTransf']['x_operationId'] = $Result['result']['ListOfOperations']['Operation']['OperationID'];
  238.             $decodedResponse['payResponse'] = $Result['Response'];
  239.             $safetyRequest $this->aviaturMd5->AviaturEncode(json_encode($decodedRequest), $publicKey);
  240.             $safetyResponse $this->aviaturMd5->AviaturEncode(json_encode($decodedResponse), $publicKey);
  241.             $order_product->setPayRequest($safetyRequest);
  242.             $order_product->setPayResponse($safetyResponse);
  243.             $order_product->setPublicKey($publicKey);
  244.             $order_product->setStatus('approved');
  245.             $order $this->em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($order_product->getOrder()->getId());
  246.             $order->setStatus('approved');
  247.             $this->em->persist($order);
  248.             $this->em->persist($order_product);
  249.             $this->em->flush();
  250.             endif;
  251.         }
  252.         if ('0' == $Result['result']['ErrorManager']['ErrorNumber']['@content']) {
  253.             $txtLogMessage '';
  254.             if (is_array($Result['result']['ListOfOperations']['Operation'])) {
  255.                 if (isset($Result['result']['ListOfOperations']['Operation']['OperationID'])) {
  256.                     $oResult $Result['result']['ListOfOperations'];
  257.                 } else {
  258.                     $oResult $Result['result']['ListOfOperations']['Operation'];
  259.                 }
  260.                 $safetypayProxy = new SafetyPayProxy();
  261.                 $nCounter 0;
  262.                 $opStatus 0;
  263.                 foreach ($oResult as $k => $v) {
  264.                     $merchantOrderID $v['MerchantSalesID'];
  265.                     if (isset($v['OperationActivities']['OperationActivity'])) {
  266.                         $oActivities $v['OperationActivities']['OperationActivity'];
  267.                     } else {
  268.                         $oActivities $v['OperationActivities'];
  269.                     }
  270.                     if (isset($oActivities['CreationDateTime'])) {
  271.                         $opStatus $oActivities['Status']['StatusCode'];
  272.                     } else {
  273.                         foreach ($oActivities as $key => $va) {
  274.                             $opStatus $va['Status']['StatusCode'];
  275.                         }
  276.                     }
  277.                     $toconfirm['ConfirmOperation'][] = [
  278.                         'CreationDateTime' => $v['CreationDateTime'],
  279.                         'OperationID' => $v['OperationID'],
  280.                         'MerchantSalesID' => $v['MerchantSalesID'],
  281.                         'MerchantOrderID' => $merchantOrderID,
  282.                         'OperationStatus' => $opStatus,
  283.                     ];
  284.                     $ConfirmTransactions[] = $v['OperationID'].' - ('.$v['MerchantSalesID'].')';
  285.                     ++$nCounter;
  286.                 }
  287.                 $nCounter count($toconfirm['ConfirmOperation']);
  288.                 $ResultOperation $safetypayProxy->ConfirmNewOperationActivity($toconfirm$parameters);
  289.                 $state $ResultOperation['Request']['urn:OperationActivityNotifiedRequest']['urn:ListOfOperationsActivityNotified']['urn1:ConfirmOperation']['urn1:OperationStatus'];
  290.                 switch ($state) {
  291.                     case 100:
  292.                         $msg 'Transaction Expired';
  293.                         // no break
  294.                     case 102:
  295.                         $msg 'Purchase Complete';
  296.                         break;
  297.                     case 104:
  298.                         $msg 'Notification Confirmed to merchant';
  299.                         break;
  300.                     case 105:
  301.                         $msg 'Payment Issued to merchant';
  302.                         break;
  303.                     case 106:
  304.                         $msg 'Transfer Requested to Merchant';
  305.                         break;
  306.                     case 107:
  307.                         $msg 'Transfer Confirmed to Merchant';
  308.                         break;
  309.                 }
  310.                 foreach ($MerchantSalesID as $key => $MerchantSales) {
  311.                     $order explode('+'$MerchantSalesID[$key]);
  312.                     $order_id explode('PN'$order[0]);
  313.                     $publicKey $this->aviaturMd5->aviaturRandomKey();
  314.                     $order_product $this->em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->findOneById($order_id[1]);
  315.                     if (null != $order_product):
  316.                         $decodedRequest json_decode($this->aviaturMd5->aviaturDecode($order_product->getPayrequest(), $order_product->getPublicKey()), true);
  317.                     $decodedResponse json_decode($this->aviaturMd5->aviaturDecode($order_product->getPayresponse(), $order_product->getPublicKey()), true);
  318.                     $decodedRequest['notificationRequest'] = $ResultOperation['Request'];
  319.                     $decodedResponse['notificationResponse'] = $ResultOperation['Response'];
  320.                     ////// Status Request \\\\\\\
  321.                     $decodedRequest['dataTransf']['x_response_code'] = $state;
  322.                     $decodedRequest['dataTransf']['x_response_reason_text'] = $msg;
  323.                     ////// Status Response \\\\\\\
  324.                     $decodedResponse['dataTransf']['x_response_code'] = $state;
  325.                     $decodedResponse['dataTransf']['x_response_reason_text'] = $msg;
  326.                     $safetyRequest $this->aviaturMd5->AviaturEncode(json_encode($decodedRequest), $publicKey);
  327.                     $safetyResponse $this->aviaturMd5->AviaturEncode(json_encode($decodedResponse), $publicKey);
  328.                     $order_product->setPublicKey($publicKey);
  329.                     $order_product->setPayRequest($safetyRequest);
  330.                     $order_product->setPayResponse($safetyResponse);
  331.                     $this->em->persist($order_product);
  332.                     $this->em->flush();
  333.                     endif;
  334.                 }
  335.                 if ('0' == $ResultOperation['result']['ErrorManager']['ErrorNumber']['@content']) {
  336.                     $txtLogMessage 'Operation (Merchant Reference No) Confirmed: '.implode(', '$ConfirmTransactions);
  337.                 } else {
  338.                     if (is_array($ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'])) {
  339.                         $txtLogMessage 'Error: '
  340.                                 .current($ResultOperation['result']['ErrorManager']['ErrorNumber']['@content']).' - '
  341.                                 .current($ResultOperation['result']['ErrorManager']['Description']['@content']);
  342.                     } else {
  343.                         $txtLogMessage 'Error: '
  344.                                 .$ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'].' - '
  345.                                 .$ResultOperation['result']['ErrorManager']['Description']['@content'];
  346.                     }
  347.                 }
  348.                 if (== $nCounter) {
  349.                     $txtLogMessage 'No registrations processed.';
  350.                 } elseif ((!= $nCounter) && (strrpos($txtLogMessage'Error:') > 1)) {
  351.                     $txtLogMessage = (string) $nCounter.' proceso(s) No confirmado. <br /><br />'.$txtLogMessage;
  352.                 } else {
  353.                     $txtLogMessage = (string) $nCounter.' proceso(s) confirmado. <br /><br />'.$txtLogMessage;
  354.                 }
  355.             } else {
  356.                 $txtLogMessage .= 'No hay Transacciones Canceladas';
  357.             }
  358.         } else {
  359.             echo 'Error in Aplication Pay Method (GetNewOperationActivity): Invalid Credentials!<br>';
  360.             echo 'Error Number: '.$Result['result']['ErrorManager']['ErrorNumber']['@content']
  361.             .'<br>Severity: '.$Result['result']['ErrorManager']['Severity']['@content']
  362.             .'<br>Description: '.$Result['result']['ErrorManager']['Description']['@content'];
  363.         }
  364.         $payError $Result['result']['ErrorManager']['ErrorNumber']['@content'];
  365.         $notifyError $ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'];
  366.         return $SafetyResult = ['txtLogMessage' => $txtLogMessage'payError' => $payError'notifyError' => $notifyError];
  367.     }
  368.     public function safetyNotify($merchant_id)
  369.     {
  370.         $toconfirm = [];
  371.         $ConfirmTransactions = [];
  372.         $parameters = [
  373.             'ApiKey' => $this->siteCode,
  374.             'SignatureKey' => $this->tranKey,
  375.             'Environment' => $this->Environment,
  376.             'Protocol' => 'https',
  377.             'port_ssl' => 443,
  378.             'RequestDateTime' => $this->getDateIso8601(time()),
  379.         ];
  380.         $safetypayProxy = new SafetyPayProxy();
  381.         $Result $safetypayProxy->GetNewOperationActivity($parameters);
  382.         $MerchantSalesID $Result['result']['ListOfOperations']['Operation']['MerchantSalesID'];
  383.         $MerchantSalesID explode('+'$MerchantSalesID);
  384.         foreach ($MerchantSalesID as $key => $MerchantSales) {
  385.             $order explode('+'$MerchantSalesID[$key]);
  386.             $order_id explode('PN'$order[0]);
  387.             $publicKey $this->aviaturMd5->aviaturRandomKey();
  388.             $order_product $this->em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->findOneById($order_id[1]);
  389.             if (null != $order_product):
  390.                 $horaActual date('Y-m-d H:i:s');
  391.             $UpdatingDate $order_product->getUpdatingDate();
  392.             $fecha2 = (new \DateTime($UpdatingDate->format('Y-m-d H:i:s')));
  393.             $fecha1 = (new \DateTime($horaActual));
  394.             $fecha $fecha1->diff($fecha2);
  395.             if (== $fecha->h) {
  396.                 if ($fecha->12) {
  397.                     $nuevafecha strtotime('+10 minute'strtotime($fecha2->format('Y-m-d H:i:s')));
  398.                     $fecha11 date('Y-m-d H:i:s'$nuevafecha);
  399.                     $order_product->setUpdatingdate(new \DateTime($fecha11));
  400.                 }
  401.             }
  402.             $this->em->persist($order_product);
  403.             $this->em->flush();
  404.             endif;
  405.         }
  406.         if ('0' == $Result['result']['ErrorManager']['ErrorNumber']['@content']) {
  407.             $confirmation 'ok';
  408.             $txtLogMessage '';
  409.             if (is_array($Result['result']['ListOfOperations']['Operation'])) {
  410.                 if (isset($Result['result']['ListOfOperations']['Operation']['OperationID'])) {
  411.                     $oResult $Result['result']['ListOfOperations'];
  412.                 } else {
  413.                     $oResult $Result['result']['ListOfOperations']['Operation'];
  414.                 }
  415.                 $safetypayProxy = new SafetyPayProxy();
  416.                 $nCounter 0;
  417.                 $opStatus 0;
  418.                 foreach ($oResult as $k => $v) {
  419.                     $merchantOrderID $v['MerchantSalesID'];
  420.                     if (isset($v['OperationActivities']['OperationActivity'])) {
  421.                         $oActivities $v['OperationActivities']['OperationActivity'];
  422.                     } else {
  423.                         $oActivities $v['OperationActivities'];
  424.                     }
  425.                     if (isset($oActivities['CreationDateTime'])) {
  426.                         $opStatus $oActivities['Status']['StatusCode'];
  427.                     } else {
  428.                         foreach ($oActivities as $key => $va) {
  429.                             $opStatus $va['Status']['StatusCode'];
  430.                         }
  431.                     }
  432.                     $toconfirm['ConfirmOperation'][] = [
  433.                         'CreationDateTime' => $v['CreationDateTime'],
  434.                         'OperationID' => $v['OperationID'],
  435.                         'MerchantSalesID' => $v['MerchantSalesID'],
  436.                         'MerchantOrderID' => $merchantOrderID,
  437.                         'OperationStatus' => $opStatus,
  438.                     ];
  439.                     $ConfirmTransactions[] = $v['OperationID'].' - ('.$v['MerchantSalesID'].')';
  440.                     ++$nCounter;
  441.                 }
  442.                 $nCounter count($toconfirm['ConfirmOperation']);
  443.                 $ResultOperation $safetypayProxy->ConfirmNewOperationActivity($toconfirm$parameters);
  444.                 if ('0' == $ResultOperation['result']['ErrorManager']['ErrorNumber']['@content']) {
  445.                     $txtLogMessage 'Operation (Merchant Reference No) Confirmed: '.implode(', '$ConfirmTransactions);
  446.                 } else {
  447.                     if (is_array($ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'])) {
  448.                         $txtLogMessage 'Error: '
  449.                                 .current($ResultOperation['result']['ErrorManager']['ErrorNumber']['@content']).' - '
  450.                                 .current($ResultOperation['result']['ErrorManager']['Description']['@content']);
  451.                     } else {
  452.                         $txtLogMessage 'Error: '
  453.                                 .$ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'].' - '
  454.                                 .$ResultOperation['result']['ErrorManager']['Description']['@content'];
  455.                     }
  456.                 }
  457.                 if (== $nCounter) {
  458.                     $txtLogMessage 'No registrations processed.';
  459.                 } elseif ((!= $nCounter) && (strrpos($txtLogMessage'Error:') > 1)) {
  460.                     $txtLogMessage = (string) $nCounter.' proceso(s) No confirmado. <br /><br />'.$txtLogMessage;
  461.                 } else {
  462.                     $txtLogMessage = (string) $nCounter.' proceso(s) confirmado. <br /><br />'.$txtLogMessage;
  463.                 }
  464.             } else {
  465.                 $txtLogMessage .= 'No hay Transacciones Canceladas';
  466.             }
  467.         } else {
  468.             $confirmation 'error';
  469.             echo 'Error in Aplication Pay Method (GetNewOperationActivity): Invalid Credentials!<br>';
  470.             echo 'Error Number: '.$Result['result']['ErrorManager']['ErrorNumber']['@content']
  471.             .'<br>Severity: '.$Result['result']['ErrorManager']['Severity']['@content']
  472.             .'<br>Description: '.$Result['result']['ErrorManager']['Description']['@content'];
  473.         }
  474.         return $confirmation;
  475.     }
  476.     public function getDateIso8601($int_date)
  477.     {
  478.         $date_mod date('Y-m-d\TH:i:s'$int_date);
  479.         $pre_timezone date('O'$int_date);
  480.         $time_zone substr($pre_timezone03).':'.substr($pre_timezone32);
  481.         $pos strpos($time_zone'-');
  482.         if (PHP_VERSION >= '4.0') {
  483.             if (false === $pos) {
  484.                 // nothing
  485.             } elseif (!= $pos) {
  486.                 $date_mod $time_zone;
  487.             } elseif (is_string($pos) && !$pos) {
  488.                 // nothing
  489.             } elseif (!= $pos) {
  490.                 $date_mod $time_zone;
  491.             }
  492.         }
  493.         return $date_mod;
  494.     }
  495.     public function getRealIP()
  496.     {
  497.         if ('' != @$_SERVER['HTTP_X_FORWARDED_FOR']) {
  498.             $client_ip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : ((!empty($_ENV['REMOTE_ADDR'])) ? $_ENV['REMOTE_ADDR'] : 'unknown');
  499.             $entries preg_split('/[, ]/'$_SERVER['HTTP_X_FORWARDED_FOR']);
  500.             reset($entries);
  501.             while ([, $entry] = each($entries)) {
  502.                 $entry trim($entry);
  503.                 if (preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/"$entry$ip_list)) {
  504.                     $private_ip = [
  505.                         '/^0\./',
  506.                         '/^127\.0\.0\.1/',
  507.                         '/^192\.168\..*/',
  508.                         '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/',
  509.                         '/^10\..*/', ];
  510.                     $found_ip preg_replace($private_ip$client_ip$ip_list[1]);
  511.                     if ($client_ip != $found_ip) {
  512.                         $client_ip $found_ip;
  513.                         break;
  514.                     }
  515.                 }
  516.             }
  517.         } else {
  518.             $client_ip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : ((!empty($_ENV['REMOTE_ADDR'])) ? $_ENV['REMOTE_ADDR'] : 'unknown');
  519.         }
  520.         return $client_ip;
  521.     }
  522.     /**
  523.      * Valida que la moneda que se recibe por url sea una moneda activa
  524.      * 
  525.      * @param string $currencyUrl
  526.      * @return bool
  527.      */
  528.     public function validationCurrencyInUrl(string $currencyInUrl) {
  529.         //Consulta la lista de monedas activas y guarda las monedas activas
  530.         $CurrencyList $this->em->getRepository(\Aviatur\TrmBundle\Entity\AvailabilityCurrency::class)->findAll();
  531.         //Filtra por las monedas activas
  532.         $isActiveCurrency array_map(function($currency) {
  533.             return $currency->getIata();
  534.         }, array_filter($CurrencyList, function($currency) {
  535.             return $currency->getIsActive();
  536.         }));
  537.         
  538.         //Retorna un boolean si la moneda esta activa o no
  539.         return in_array($currencyInUrl$isActiveCurrency);
  540.     }
  541. }