src/Aviatur/PaymentBundle/Services/TokenizerService.php line 27

Open in your IDE?
  1. <?php
  2. namespace Aviatur\PaymentBundle\Services;
  3. use Aviatur\GeneralBundle\Entity\Parameter;
  4. use Aviatur\GeneralBundle\Services\AviaturLogSave;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. class TokenizerService
  7. {
  8.     private \Doctrine\Persistence\ManagerRegistry $managerRegistry;
  9.     private \Aviatur\GeneralBundle\Services\AviaturLogSave $aviaturLogSave;
  10.     private $env;
  11.     private $tokenizerService;
  12.     private $em;
  13.     public function __construct(ManagerRegistry $managerRegistryAviaturLogSave $aviaturLogSave$tokenizerService$env)
  14.     {
  15.         $this->managerRegistry $managerRegistry;
  16.         $this->aviaturLogSave $aviaturLogSave;
  17.         $this->env $env;
  18.         $this->tokenizerService $tokenizerService;
  19.         $this->tokenizerIsActive true;
  20.         $environment $this->env;
  21.         $this->em $this->managerRegistry->getManager();
  22.         $aviatur_service_token $this->em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('aviatur_service_token');
  23.         $this->retryService 0;
  24.         if (empty($aviatur_service_token) || !$this->tokenizerService) {
  25.             $this->serviceToken 0;
  26.         } else {
  27.             $this->serviceToken $aviatur_service_token->getValue();
  28.             $description $aviatur_service_token->getDescription();
  29.             $this->url json_decode($descriptiontrue)['endPoints'][$environment];
  30.             $this->parameters json_decode($descriptiontrue)['parameters'];
  31.         }
  32.     }
  33.     public function getToken($cardNumber)
  34.     {
  35.         if (!$this->serviceToken) {
  36.             return $cardNumber;
  37.         }
  38.         $data = ['card_number' => $cardNumber];
  39.         $token $this->TokenApi($this->url['authenticate'], $data'authenticate');
  40.         return (empty($token) || isset($token['error'])) ? $cardNumber $token;
  41.     }
  42.     private function TokenApi($url$data$method)
  43.     {
  44.         $headersArray null;
  45.         $postFields null;
  46.         $response null;
  47.         if ($this->retryService 1) {
  48.             $response['error'] = 'El servicio de token no responde';
  49.         } else {
  50.             $curl curl_init();
  51.             switch ($method) {
  52.                 case 'authenticate':
  53.                     $headersArray = ['Content-Type: application/x-www-form-urlencoded'];
  54.                     $postFields 'Username='.$this->parameters['username'].'&Password='.$this->parameters['password'].'';
  55.                     break;
  56.                 case 'TokenCard':
  57.                     $headersArray = [
  58.                         'Content-Type: application/json',
  59.                         'Authorization: Bearer '.$data['token'],
  60.                     ];
  61.                     $postFields json_encode($data);
  62.                     break;
  63.             }
  64.             curl_setopt($curlCURLOPT_URL$url);
  65.             curl_setopt($curlCURLOPT_HTTPHEADER$headersArray);
  66.             curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  67.             curl_setopt($curlCURLOPT_POSTFIELDS$postFields);
  68.             curl_setopt($curlCURLOPT_FAILONERRORtrue);
  69.             curl_setopt($curlCURLOPT_SSL_VERIFYHOSTfalse);
  70.             curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
  71.             $execute curl_exec($curl);
  72.             $response $execute;
  73.             if (curl_error($curl)) {
  74.                 $error_msg curl_error($curl);
  75.                 $response['error'] = $error_msg;
  76.                 ++$this->retryService;
  77.                 // Solo guardar logs de RQ y RS en caso de error
  78.                 $xmlRq $this->getXmlTokenizer($postFields$method'RQ');
  79.                 $xmlRs '<' .$method'TokenizerRS><body>' .$error_msg'</body></' .$method'TokenizerRS>';
  80.                 $this->aviaturLogSave->logSave($xmlRq$method 'Tokenizer''RQ');
  81.                 $this->aviaturLogSave->logSave($xmlRs$method 'Tokenizer''RS');
  82.             }
  83.             //$this->aviaturLogSave->logSave(print_r($response, true), 'Tokenizer', $method.'_RS');
  84.             switch ($method) {
  85.                 case 'authenticate':
  86.                     $dataToken = [
  87.                         'strSecHashVal' => $this->parameters['strSecHashVal'],
  88.                         'strMODULECDK_ext' => $this->parameters['strMODULECDK_ext'],
  89.                         'strFININSTCK' => $this->parameters['strFININSTCK'],
  90.                         'strUSERCODEK' => $this->parameters['strUSERCODEK'],
  91.                         'strUSRPASSW1' => $this->parameters['strUSRPASSW1'],
  92.                         'strTOKMOTCOD' => $this->parameters['strTOKMOTCOD'],
  93.                         'strUALTEXTVF' => $this->parameters['strUALTEXTVF'],
  94.                         'strCCARDNBRK_clr' => $data['card_number'],
  95.                         'strCCARDNBRK_cip' => '',
  96.                         'card_number' => $data['card_number'],
  97.                     ];
  98.                     $dataToken['token'] = str_replace('"'''$execute);
  99.                     $response $this->TokenApi($this->url['TokenCard'], $dataToken'TokenCard');
  100.                     break;
  101.                 case 'TokenCard':
  102.                     if (isset($response['error'])) {
  103.                         $response $this->TokenApi($this->url['authenticate'], $data'authenticate');
  104.                     } else {
  105.                         $response $this->json_validate($execute);
  106.                         if (isset($response['value'])) {
  107.                             $response $response['value'];
  108.                         } else {
  109.                             $response $data['card_number'];
  110.                         }
  111.                     }
  112.                     break;
  113.             }
  114.             curl_close($curl);
  115.         }
  116.         return $response;
  117.     }
  118.     public function getTokenBridge()
  119.     {
  120.         $aviatur_bridge_service_token $this->em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('aviatur_bridge_service_token');
  121.         $url $aviatur_bridge_service_token->getValue();
  122.         $data = [
  123.             'Username' => 'OpenTrip.COM',
  124.             'Password' => '0x5AF1EE58F7625C483336B868E3599FA794A63687',
  125.             'AppName' => 'PASARELA',
  126.         ];
  127. //        $data_string = json_encode($data);
  128.         $ch curl_init();
  129.         curl_setopt($chCURLOPT_URL$url);
  130.         curl_setopt($chCURLOPT_RETURNTRANSFER1);
  131.         curl_setopt($chCURLOPT_FOLLOWLOCATION1);
  132.         curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
  133.         curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
  134.         curl_setopt($chCURLOPT_HTTPHEADER, [
  135.                 'Content-Type: application/json',
  136.             ]);
  137.         curl_setopt($chCURLOPT_POSTtrue);
  138.         curl_setopt($chCURLOPT_POSTFIELDSjson_encode($data));
  139.         $response curl_exec($ch);
  140.         curl_close($ch);
  141. //        $response = file_get_contents($url, null, stream_context_create(array(
  142. //            'http' => array(
  143. //                'method' => 'POST',
  144. //                'header' => 'Content-Type: application/json' . "\r\n"
  145. //                . 'Content-Length: ' . strlen($data_string) . "\r\n",
  146. //                'content' => $data_string,
  147. //            ),
  148. //        )));
  149.         $this->aviaturLogSave->logSave(print_r($responsetrue), 'TokenBridge''info''');
  150.         return json_decode($responsetrue);
  151.     }
  152.     public function json_validate($string)
  153.     {
  154.         // decode the JSON data
  155.         $result json_decode($stringtrue);
  156.         // switch and check possible JSON errors
  157.         switch (json_last_error()) {
  158.             case JSON_ERROR_NONE:
  159.                 $error ''// JSON is valid // No error has occurred
  160.                 break;
  161.             case JSON_ERROR_DEPTH:
  162.                 $error 'The maximum stack depth has been exceeded.';
  163.                 break;
  164.             case JSON_ERROR_STATE_MISMATCH:
  165.                 $error 'Invalid or malformed JSON.';
  166.                 break;
  167.             case JSON_ERROR_CTRL_CHAR:
  168.                 $error 'Control character error, possibly incorrectly encoded.';
  169.                 break;
  170.             case JSON_ERROR_SYNTAX:
  171.                 $error 'Syntax error, malformed JSON.';
  172.                 break;
  173.             // PHP >= 5.3.3
  174.             case JSON_ERROR_UTF8:
  175.                 $error 'Malformed UTF-8 characters, possibly incorrectly encoded.';
  176.                 break;
  177.             // PHP >= 5.5.0
  178.             case JSON_ERROR_RECURSION:
  179.                 $error 'One or more recursive references in the value to be encoded.';
  180.                 break;
  181.             // PHP >= 5.5.0
  182.             case JSON_ERROR_INF_OR_NAN:
  183.                 $error 'One or more NAN or INF values in the value to be encoded.';
  184.                 break;
  185.             case JSON_ERROR_UNSUPPORTED_TYPE:
  186.                 $error 'A value of a type that cannot be encoded was given.';
  187.                 break;
  188.             default:
  189.                 $error 'Unknown JSON error occured.';
  190.                 break;
  191.         }
  192.         if ('' !== $error) {
  193.             $result['error'] = $error;
  194.         }
  195.         // everything is OK
  196.         return $result;
  197.     }
  198.     /**
  199.      * Genera XML dinámico para logs de tokenización de tarjeta.
  200.      *
  201.      * @param $info
  202.      * @param $method
  203.      * @param $prefix
  204.      * @return string
  205.      */
  206.     public function getXmlTokenizer($info$method$prefix): string
  207.     {
  208.         $xml "<{$method}Tokenizer{$prefix}><body>";
  209.         if ($method === 'authenticate') {
  210.             // Generar xml de forma dinamica
  211.             foreach (explode('&'$info) as $item) {
  212.                 [$key$value] = explode('='$item);
  213.                 $xml .= "<$key>$value</$key>";
  214.             }
  215.         } else {
  216.             foreach (json_decode($info) as $key => $value) {
  217.                 // Enmascarar numero de tarjeta
  218.                 if (in_array($key, ['strCCARDNBRK_clr''card_number'])) {
  219.                     $value '****' substr($value, -4);
  220.                 }
  221.                 $xml .= "<$key>$value</$key>";
  222.             }
  223.         }
  224.         return $xml "</body></{$method}Tokenizer{$prefix}>";
  225.     }
  226. }