<?php
namespace Aviatur\PaymentBundle\Controller;
use Aviatur\GeneralBundle\Services\AviaturEncoder;
use Aviatur\PaymentBundle\Models\SafetyPayProxy;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\RouterInterface;
class SafetypayController
{
public $url;
public $port_ssl;
public $operation;
public $conf = [];
public $wsdl;
public $ignore_level = 0;
public $em;
public $session;
public $aviaturMd5;
public $agency;
public $login;
public $tranKey;
public $siteCode;
public $currency;
public $endpoint;
public $Environment;
public function __construct(RequestStack $requestStack, ManagerRegistry $managerRegistry, SessionInterface $session, ParameterBagInterface $parameterBag, AviaturEncoder $aviatur_md5)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$request = $requestStack->getCurrentRequest();
$this->em = $managerRegistry->getManager();
$this->session = $session;
$this->aviaturMd5 = $aviatur_md5;
if (null != $request) {
$transactionId = $session->get($transactionIdSessionName);
if (preg_match('/flight/', $request->attributes->get('_route'))) {
$postData = json_decode($session->get($transactionId.'[flight][detail_data_flight]'), true);
} elseif (preg_match('/hotel/', $request->attributes->get('_route'))) {
$postData = json_decode($session->get($transactionId.'[hotel][detail_data_hotel]'), true);
}
$this->agency = $this->em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($this->session->get('agencyId'));
} else {
$this->agency = $this->em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find(1);
}
if (isset($postData)) {
$paymentMethod = $postData['PD']['type'];
} else {
$paymentMethod = 'safety';
}
$paymentMethod = $this->em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethod::class)->findOneByCode($paymentMethod);
$paymentMethodAgency = $this->em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findOneBy(['agency' => $this->agency, 'paymentMethod' => $paymentMethod]);
if (isset($paymentMethodAgency)){
$this->login = $paymentMethodAgency->getSitecode();
$this->tranKey = $paymentMethodAgency->getTrankey();
$this->siteCode = $paymentMethodAgency->getSitecode();
$this->currency = $paymentMethodAgency->getCurrency();
if (1 == $paymentMethodAgency->getIstest()) {
$this->endpoint = $paymentMethodAgency->getTestendpoint();
$this->Environment = 1; //For Sandbox (Test);
} else {
$this->endpoint = $paymentMethodAgency->getProductionendpoint();
$this->Environment = 0; //For Production
}
}
}
public function safetyAction(RouterInterface $router, ParameterBagInterface $parameterBag, \Swift_Mailer $mailer, $parametMerchant, $array)
{
$emailNotification = $parameterBag->get('email_notification');
$emissionData = null;
$response = null;
$tokenUrl = [];
$channel = null;
if ('Alojamiento' == $parametMerchant['dataTrans']['x_type_description']):
//Url Hoteles
$transactionOk = $router->generate('aviatur_hotel_payment_safety_ok_return_url_secure', [], true);
$transactionError = $router->generate('aviatur_hotel_payment_safety_error_return_url_secure', [], true);
elseif ('Tiquete Aereo' == $parametMerchant['dataTrans']['x_type_description']):
//Url Vuelos
$transactionOk = $router->generate('aviatur_flight_payment_safety_ok_return_url_secure', [], true);
$transactionError = $router->generate('aviatur_flight_payment_safety_error_return_url_secure', [], true);
elseif ('Helicopteros' == $parametMerchant['dataTrans']['x_type_description']):
//Url Vuelos
$transactionOk = $router->generate('aviatur_helicopter_payment_safety_ok_return_url_secure', [], true);
$transactionError = $router->generate('aviatur_helicopter_payment_safety_error_return_url_secure', [], true);
elseif ('assist' == $parametMerchant['dataTrans']['x_type_description']):
//Url Vuelos
$transactionOk = $router->generate('aviatur_insurance_payment_safety_ok_return_url_secure', [], true);
$transactionError = $router->generate('aviatur_insurance_payment_safety_error_return_url_secure', [], true);
elseif ('package' == $parametMerchant['dataTrans']['x_type_description']):
//Url Vuelos
$transactionOk = $router->generate('aviatur_package_payment_safety_ok_return_url_secure', [], true);
$transactionError = $router->generate('aviatur_package_payment_safety_error_return_url_secure', [], true);
elseif ('cruise' == $parametMerchant['dataTrans']['x_type_description']):
//Url Cruceros
$transactionOk = $router->generate('aviatur_cruise_payment_safety_ok_return_url_secure', [], true);
$transactionError = $router->generate('aviatur_cruise_payment_safety_error_return_url_secure', [], true);
endif;
$MerchantSalesID = $parametMerchant['MerchantSalesID'];
$Amount = $parametMerchant['Amount'];
if ('safety' == $array['x_payment_data']):
$ProductID = 1;
$ExpirationTime = 30; elseif ('baloto' == $array['x_payment_data']):
$ProductID = 2;
$ExpirationTime = 300;
endif;
$parameters = [
'Username' => $this->siteCode,
'ApiKey' => $this->siteCode,
'SignatureKey' => $this->tranKey,
'RequestDateTime' => $this->getDateIso8601(time()),
'CurrencyID' => $this->currency,
'Amount' => round((float) strip_tags($Amount), 2),
'MerchantSalesID' => $MerchantSalesID,
'Language' => 'ES',
'TrackingCode' => '',
'ExpirationTime' => $ExpirationTime,
'FilterBy' => '',
'TransactionOkURL' => $transactionOk,
'TransactionErrorURL' => $transactionError,
'TransactionExpirationTime' => $ExpirationTime,
'CustomMerchantName' => '',
'ShopperEmail' => '',
'ProductID' => $ProductID,
'SubMerchantID' => '',
'ResponseFormat' => 'XML',
'Protocol' => 'https',
'Environment' => $this->Environment,
'port_ssl' => 443,
];
$parametMerchant['dataTrans']['dirIp'] = $this->getRealIP();
$parametMerchant['dataTrans']['x_response_code'] = '';
$parametMerchant['dataTrans']['x_response_reason_text'] = '';
$safetypayProxy = new SafetyPayProxy();
$Result = $safetypayProxy->CreateExpressToken($parameters);
$MerchantSalesID = explode('+', $MerchantSalesID);
foreach ($MerchantSalesID as $key => $MerchantSales) {
$order = explode('+', $MerchantSalesID[$key]);
$order_id = explode('PN', $order[0]);
$publicKey = $this->aviaturMd5->aviaturRandomKey();
$requestArray = ['tokenRequest' => $Result['Request'], 'payRequest' => '', 'notificationRequest' => '', 'dataTransf' => $parametMerchant['dataTrans']];
$responseArray = ['tokenResponse' => $Result['Response'], 'payResponse' => '', 'notificationResponse' => ''];
$responseArray['dataTransf']['x_response_code'] = '';
$responseArray['dataTransf']['x_response_reason_text'] = '';
$requestArray['dataTransf']['x_operationId'] = 'SafetyPay';
if (isset($array['x_cant_passenger'])) {
$responseArray['x_cant_passenger'] = $array['x_cant_passenger'];
$responseArray['product_type'] = $array['product_type'];
}
$encodeRequest = json_encode($requestArray);
$encodeResponse = json_encode($responseArray);
$safetyRequest = $this->aviaturMd5->AviaturEncode($encodeRequest, $publicKey);
$safetyResponse = $this->aviaturMd5->AviaturEncode($encodeResponse, $publicKey);
$order_product = $this->em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->findOneById($order_id[1]);
$order_product->setEmissiondata($array['xmlCreateOrder']);
$order_product->setPayRequest($safetyRequest);
$order_product->setPayResponse($safetyResponse);
$order_product->setPublicKey($publicKey);
$order_product->setStatus('pending');
$order = $this->em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($order_product->getOrder()->getId());
$order->setStatus('pending');
$this->em->persist($order);
$this->em->persist($order_product);
}
$this->em->flush();
$emissionData->x_booking = $array['x_booking'];
$emissionData->x_first_name = $array['x_first_name'];
$emissionData->x_last_name = $array['x_last_name'];
$emissionData->x_doc_num = $array['x_doc_num'];
$emissionData->x_reference = $array['x_reference'];
$emissionData->x_description = $array['x_description'];
$emissionData->x_total_amount = $array['x_total_amount'];
$emissionData->x_email = $array['x_email'];
$emissionData->x_address = $array['x_address'];
$emissionData->x_phone = $array['x_phone'];
$emissionData->x_type_description = $array['x_type_description'];
$emissionData->x_resultSafetyPay = $Result;
$mailInfo = print_r($emissionData, true).'<br>'.print_r($response, true);
$message = (new \Swift_Message())
->setContentType('text/html')
->setFrom($this->session->get('emailNoReply'))
->setTo('soportepagoelectronico@aviatur.com.co', 'soptepagelectronic@aviatur.com')
->setBcc($emailNotification)
->setSubject('Creación Transacción SafetyPay'.$emissionData->x_reference)
->setBody($mailInfo);
$mailer->send($message);
if ('0' == $Result['result']['ErrorManager']['ErrorNumber']['@content']):
$tokenUrl['url'] = $Result['result']['ShopperRedirectURL'].$channel;
$tokenUrl['html'] = '<a href="'.$Result['result']['ShopperRedirectURL'].$channel.'"target="_new">'
.'<img src="images/safetypay_logo.jpg" border="0" alt="SafetyPay Inc." /></a>';
return $Response = ['response' => $tokenUrl['url'], 'status' => 'ok']; else:
if (is_array($Result['result']['ErrorManager']['ErrorNumber']['@content'])):
$tokenUrl = '<span style="color:red;">Error: '
.current($Result['result']['ErrorManager']['ErrorNumber']['@content']).': '
.current($Result['result']['ErrorManager']['Description']['@content']).'. Severity: '
.current($Result['result']['ErrorManager']['Severity']['@content']).'.</span>'; else:
$tokenUrl = '<span style="color:red;">Error '
.$Result['result']['ErrorManager']['ErrorNumber']['@content'].': '
.$Result['result']['ErrorManager']['Description']['@content'].'. Severity: '
.$Result['result']['ErrorManager']['Severity']['@content'].'.</span>';
endif;
return $Response = ['response' => $tokenUrl, 'status' => 'error'];
endif;
}
public function safetyok()
{
$toconfirm = [];
$ConfirmTransactions = [];
$ResultOperation = [];
$parameters = [
'ApiKey' => $this->siteCode,
'SignatureKey' => $this->tranKey,
'Environment' => $this->Environment,
'Protocol' => 'https',
'port_ssl' => 443,
'RequestDateTime' => $this->getDateIso8601(time()),
];
$safetypayProxy = new SafetyPayProxy();
$Result = $safetypayProxy->GetNewOperationActivity($parameters);
$MerchantSalesID = $Result['result']['ListOfOperations']['Operation']['MerchantSalesID'];
$MerchantSalesID = explode('+', $MerchantSalesID);
foreach ($MerchantSalesID as $key => $MerchantSales) {
$order = explode('+', $MerchantSalesID[$key]);
$order_id = explode('PN', $order[0]);
$publicKey = $this->aviaturMd5->aviaturRandomKey();
$order_product = $this->em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->findOneById($order_id[1]);
if (null != $order_product):
$decodedRequest = json_decode($this->aviaturMd5->aviaturDecode($order_product->getPayrequest(), $order_product->getPublicKey()), true);
$decodedResponse = json_decode($this->aviaturMd5->aviaturDecode($order_product->getPayresponse(), $order_product->getPublicKey()), true);
$decodedRequest['payRequest'] = $Result['Request'];
$decodedRequest['dataTransf']['x_operationId'] = $Result['result']['ListOfOperations']['Operation']['OperationID'];
$decodedResponse['payResponse'] = $Result['Response'];
$safetyRequest = $this->aviaturMd5->AviaturEncode(json_encode($decodedRequest), $publicKey);
$safetyResponse = $this->aviaturMd5->AviaturEncode(json_encode($decodedResponse), $publicKey);
$order_product->setPayRequest($safetyRequest);
$order_product->setPayResponse($safetyResponse);
$order_product->setPublicKey($publicKey);
$order_product->setStatus('approved');
$order = $this->em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($order_product->getOrder()->getId());
$order->setStatus('approved');
$this->em->persist($order);
$this->em->persist($order_product);
$this->em->flush();
endif;
}
if ('0' == $Result['result']['ErrorManager']['ErrorNumber']['@content']) {
$txtLogMessage = '';
if (is_array($Result['result']['ListOfOperations']['Operation'])) {
if (isset($Result['result']['ListOfOperations']['Operation']['OperationID'])) {
$oResult = $Result['result']['ListOfOperations'];
} else {
$oResult = $Result['result']['ListOfOperations']['Operation'];
}
$safetypayProxy = new SafetyPayProxy();
$nCounter = 0;
$opStatus = 0;
foreach ($oResult as $k => $v) {
$merchantOrderID = $v['MerchantSalesID'];
if (isset($v['OperationActivities']['OperationActivity'])) {
$oActivities = $v['OperationActivities']['OperationActivity'];
} else {
$oActivities = $v['OperationActivities'];
}
if (isset($oActivities['CreationDateTime'])) {
$opStatus = $oActivities['Status']['StatusCode'];
} else {
foreach ($oActivities as $key => $va) {
$opStatus = $va['Status']['StatusCode'];
}
}
$toconfirm['ConfirmOperation'][] = [
'CreationDateTime' => $v['CreationDateTime'],
'OperationID' => $v['OperationID'],
'MerchantSalesID' => $v['MerchantSalesID'],
'MerchantOrderID' => $merchantOrderID,
'OperationStatus' => $opStatus,
];
$ConfirmTransactions[] = $v['OperationID'].' - ('.$v['MerchantSalesID'].')';
++$nCounter;
}
$nCounter = count($toconfirm['ConfirmOperation']);
$ResultOperation = $safetypayProxy->ConfirmNewOperationActivity($toconfirm, $parameters);
$state = $ResultOperation['Request']['urn:OperationActivityNotifiedRequest']['urn:ListOfOperationsActivityNotified']['urn1:ConfirmOperation']['urn1:OperationStatus'];
switch ($state) {
case 100:
$msg = 'Transaction Expired';
// no break
case 102:
$msg = 'Purchase Complete';
break;
case 104:
$msg = 'Notification Confirmed to merchant';
break;
case 105:
$msg = 'Payment Issued to merchant';
break;
case 106:
$msg = 'Transfer Requested to Merchant';
break;
case 107:
$msg = 'Transfer Confirmed to Merchant';
break;
}
foreach ($MerchantSalesID as $key => $MerchantSales) {
$order = explode('+', $MerchantSalesID[$key]);
$order_id = explode('PN', $order[0]);
$publicKey = $this->aviaturMd5->aviaturRandomKey();
$order_product = $this->em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->findOneById($order_id[1]);
if (null != $order_product):
$decodedRequest = json_decode($this->aviaturMd5->aviaturDecode($order_product->getPayrequest(), $order_product->getPublicKey()), true);
$decodedResponse = json_decode($this->aviaturMd5->aviaturDecode($order_product->getPayresponse(), $order_product->getPublicKey()), true);
$decodedRequest['notificationRequest'] = $ResultOperation['Request'];
$decodedResponse['notificationResponse'] = $ResultOperation['Response'];
////// Status Request \\\\\\\
$decodedRequest['dataTransf']['x_response_code'] = $state;
$decodedRequest['dataTransf']['x_response_reason_text'] = $msg;
////// Status Response \\\\\\\
$decodedResponse['dataTransf']['x_response_code'] = $state;
$decodedResponse['dataTransf']['x_response_reason_text'] = $msg;
$safetyRequest = $this->aviaturMd5->AviaturEncode(json_encode($decodedRequest), $publicKey);
$safetyResponse = $this->aviaturMd5->AviaturEncode(json_encode($decodedResponse), $publicKey);
$order_product->setPublicKey($publicKey);
$order_product->setPayRequest($safetyRequest);
$order_product->setPayResponse($safetyResponse);
$this->em->persist($order_product);
$this->em->flush();
endif;
}
if ('0' == $ResultOperation['result']['ErrorManager']['ErrorNumber']['@content']) {
$txtLogMessage = 'Operation (Merchant Reference No) Confirmed: '.implode(', ', $ConfirmTransactions);
} else {
if (is_array($ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'])) {
$txtLogMessage = 'Error: '
.current($ResultOperation['result']['ErrorManager']['ErrorNumber']['@content']).' - '
.current($ResultOperation['result']['ErrorManager']['Description']['@content']);
} else {
$txtLogMessage = 'Error: '
.$ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'].' - '
.$ResultOperation['result']['ErrorManager']['Description']['@content'];
}
}
if (0 == $nCounter) {
$txtLogMessage = 'No registrations processed.';
} elseif ((0 != $nCounter) && (strrpos($txtLogMessage, 'Error:') > 1)) {
$txtLogMessage = (string) $nCounter.' proceso(s) No confirmado. <br /><br />'.$txtLogMessage;
} else {
$txtLogMessage = (string) $nCounter.' proceso(s) confirmado. <br /><br />'.$txtLogMessage;
}
} else {
$txtLogMessage .= 'No hay Transacciones Canceladas';
}
} else {
echo 'Error in Aplication Pay Method (GetNewOperationActivity): Invalid Credentials!<br>';
echo 'Error Number: '.$Result['result']['ErrorManager']['ErrorNumber']['@content']
.'<br>Severity: '.$Result['result']['ErrorManager']['Severity']['@content']
.'<br>Description: '.$Result['result']['ErrorManager']['Description']['@content'];
}
$payError = $Result['result']['ErrorManager']['ErrorNumber']['@content'];
$notifyError = $ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'];
return $SafetyResult = ['txtLogMessage' => $txtLogMessage, 'payError' => $payError, 'notifyError' => $notifyError];
}
public function safetyNotify($merchant_id)
{
$toconfirm = [];
$ConfirmTransactions = [];
$parameters = [
'ApiKey' => $this->siteCode,
'SignatureKey' => $this->tranKey,
'Environment' => $this->Environment,
'Protocol' => 'https',
'port_ssl' => 443,
'RequestDateTime' => $this->getDateIso8601(time()),
];
$safetypayProxy = new SafetyPayProxy();
$Result = $safetypayProxy->GetNewOperationActivity($parameters);
$MerchantSalesID = $Result['result']['ListOfOperations']['Operation']['MerchantSalesID'];
$MerchantSalesID = explode('+', $MerchantSalesID);
foreach ($MerchantSalesID as $key => $MerchantSales) {
$order = explode('+', $MerchantSalesID[$key]);
$order_id = explode('PN', $order[0]);
$publicKey = $this->aviaturMd5->aviaturRandomKey();
$order_product = $this->em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->findOneById($order_id[1]);
if (null != $order_product):
$horaActual = date('Y-m-d H:i:s');
$UpdatingDate = $order_product->getUpdatingDate();
$fecha2 = (new \DateTime($UpdatingDate->format('Y-m-d H:i:s')));
$fecha1 = (new \DateTime($horaActual));
$fecha = $fecha1->diff($fecha2);
if (0 == $fecha->h) {
if ($fecha->i < 12) {
$nuevafecha = strtotime('+10 minute', strtotime($fecha2->format('Y-m-d H:i:s')));
$fecha11 = date('Y-m-d H:i:s', $nuevafecha);
$order_product->setUpdatingdate(new \DateTime($fecha11));
}
}
$this->em->persist($order_product);
$this->em->flush();
endif;
}
if ('0' == $Result['result']['ErrorManager']['ErrorNumber']['@content']) {
$confirmation = 'ok';
$txtLogMessage = '';
if (is_array($Result['result']['ListOfOperations']['Operation'])) {
if (isset($Result['result']['ListOfOperations']['Operation']['OperationID'])) {
$oResult = $Result['result']['ListOfOperations'];
} else {
$oResult = $Result['result']['ListOfOperations']['Operation'];
}
$safetypayProxy = new SafetyPayProxy();
$nCounter = 0;
$opStatus = 0;
foreach ($oResult as $k => $v) {
$merchantOrderID = $v['MerchantSalesID'];
if (isset($v['OperationActivities']['OperationActivity'])) {
$oActivities = $v['OperationActivities']['OperationActivity'];
} else {
$oActivities = $v['OperationActivities'];
}
if (isset($oActivities['CreationDateTime'])) {
$opStatus = $oActivities['Status']['StatusCode'];
} else {
foreach ($oActivities as $key => $va) {
$opStatus = $va['Status']['StatusCode'];
}
}
$toconfirm['ConfirmOperation'][] = [
'CreationDateTime' => $v['CreationDateTime'],
'OperationID' => $v['OperationID'],
'MerchantSalesID' => $v['MerchantSalesID'],
'MerchantOrderID' => $merchantOrderID,
'OperationStatus' => $opStatus,
];
$ConfirmTransactions[] = $v['OperationID'].' - ('.$v['MerchantSalesID'].')';
++$nCounter;
}
$nCounter = count($toconfirm['ConfirmOperation']);
$ResultOperation = $safetypayProxy->ConfirmNewOperationActivity($toconfirm, $parameters);
if ('0' == $ResultOperation['result']['ErrorManager']['ErrorNumber']['@content']) {
$txtLogMessage = 'Operation (Merchant Reference No) Confirmed: '.implode(', ', $ConfirmTransactions);
} else {
if (is_array($ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'])) {
$txtLogMessage = 'Error: '
.current($ResultOperation['result']['ErrorManager']['ErrorNumber']['@content']).' - '
.current($ResultOperation['result']['ErrorManager']['Description']['@content']);
} else {
$txtLogMessage = 'Error: '
.$ResultOperation['result']['ErrorManager']['ErrorNumber']['@content'].' - '
.$ResultOperation['result']['ErrorManager']['Description']['@content'];
}
}
if (0 == $nCounter) {
$txtLogMessage = 'No registrations processed.';
} elseif ((0 != $nCounter) && (strrpos($txtLogMessage, 'Error:') > 1)) {
$txtLogMessage = (string) $nCounter.' proceso(s) No confirmado. <br /><br />'.$txtLogMessage;
} else {
$txtLogMessage = (string) $nCounter.' proceso(s) confirmado. <br /><br />'.$txtLogMessage;
}
} else {
$txtLogMessage .= 'No hay Transacciones Canceladas';
}
} else {
$confirmation = 'error';
echo 'Error in Aplication Pay Method (GetNewOperationActivity): Invalid Credentials!<br>';
echo 'Error Number: '.$Result['result']['ErrorManager']['ErrorNumber']['@content']
.'<br>Severity: '.$Result['result']['ErrorManager']['Severity']['@content']
.'<br>Description: '.$Result['result']['ErrorManager']['Description']['@content'];
}
return $confirmation;
}
public function getDateIso8601($int_date)
{
$date_mod = date('Y-m-d\TH:i:s', $int_date);
$pre_timezone = date('O', $int_date);
$time_zone = substr($pre_timezone, 0, 3).':'.substr($pre_timezone, 3, 2);
$pos = strpos($time_zone, '-');
if (PHP_VERSION >= '4.0') {
if (false === $pos) {
// nothing
} elseif (0 != $pos) {
$date_mod = $time_zone;
} elseif (is_string($pos) && !$pos) {
// nothing
} elseif (0 != $pos) {
$date_mod = $time_zone;
}
}
return $date_mod;
}
public function getRealIP()
{
if ('' != @$_SERVER['HTTP_X_FORWARDED_FOR']) {
$client_ip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : ((!empty($_ENV['REMOTE_ADDR'])) ? $_ENV['REMOTE_ADDR'] : 'unknown');
$entries = preg_split('/[, ]/', $_SERVER['HTTP_X_FORWARDED_FOR']);
reset($entries);
while ([, $entry] = each($entries)) {
$entry = trim($entry);
if (preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list)) {
$private_ip = [
'/^0\./',
'/^127\.0\.0\.1/',
'/^192\.168\..*/',
'/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/',
'/^10\..*/', ];
$found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
if ($client_ip != $found_ip) {
$client_ip = $found_ip;
break;
}
}
}
} else {
$client_ip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : ((!empty($_ENV['REMOTE_ADDR'])) ? $_ENV['REMOTE_ADDR'] : 'unknown');
}
return $client_ip;
}
/**
* Valida que la moneda que se recibe por url sea una moneda activa
*
* @param string $currencyUrl
* @return bool
*/
public function validationCurrencyInUrl(string $currencyInUrl) {
//Consulta la lista de monedas activas y guarda las monedas activas
$CurrencyList = $this->em->getRepository(\Aviatur\TrmBundle\Entity\AvailabilityCurrency::class)->findAll();
//Filtra por las monedas activas
$isActiveCurrency = array_map(function($currency) {
return $currency->getIata();
}, array_filter($CurrencyList, function($currency) {
return $currency->getIsActive();
}));
//Retorna un boolean si la moneda esta activa o no
return in_array($currencyInUrl, $isActiveCurrency);
}
}