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

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