src/Services/WebServiceTPV.php line 42

  1. <?php
  2. namespace App\Services;
  3. use App\Entity\TransaccionLinea;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Psr\Log\LoggerInterface;
  6. use Symfony\Component\HttpKernel\KernelInterface;
  7. use App\Entity\Carro;
  8. require_once('NTLMStream.php');
  9. ini_set("soap.wsdl_cache_enabled"0);
  10. if(!defined('USERPWD')){
  11. //     define('USERPWD', 'web:3ur0ch4ng3');
  12.     define('USERPWD','web:RpvGer43,567W12@@');
  13. }
  14. class WebServiceTPV
  15. {
  16.     /**
  17.      * @var EntityManager
  18.      */
  19.     private $em;
  20.     /**
  21.      * @var string $env, Environment(prod|dev)
  22.      */
  23.     private $env;
  24.     
  25.     private $ClienteSoap;
  26.     /**
  27.      * Contructor del WsFuncionesTPV
  28.      * @param EntityManager $em Entity manager
  29.      * @param Monolog $logger Registra todas las operaciones que realicemos
  30.      */
  31.     public function __construct(EntityManagerInterface $emLoggerInterface $webservicesLogger,  KernelInterface $kernel)
  32.     {
  33.     
  34.          try{
  35.           $this->em=$em;
  36.           $this->env=$kernel->getEnvironment();
  37.           stream_wrapper_unregister('http');
  38.           stream_wrapper_register('http'NTLMStream::class)/* or die("Failed to register protocol")*/;
  39.           $this->logger=$webservicesLogger;
  40. //           $baseURL= 'http://getems.ddns.net:7067/DynamicsNAVTPV/WS/TPV%20Eurochange/Codeunit/WsFuncionesTPV';
  41.           $baseURL'http://142.132.143.176:7047/DynamicsNAV/WS/TPV%20Eurochange/Codeunit/WsFuncionesTPV';
  42.           $this->ClienteSoap = new NTLMSoapClient($baseURL,array("trace"=>1));
  43.           
  44.         }catch (\SoapFault $fault){
  45.             if($this->ClienteSoap) {
  46.                 $this->logger->critical('[DINAMIC][EXCEPTION][1/3][CONECTAR WSTPV] ' $this->ClienteSoap->__getLastRequest() . PHP_EOL);
  47.                 $this->logger->critical('[DINAMIC][EXCEPTION][2/3][CONECTAR WSTPV] Respuesta del servidor: ' $this->ClienteSoap->__getLastResponse());
  48.                 $this->logger->critical('[DINAMIC][EXCEPCION][3/3][CONECTAR WSTPV] ' $fault->getMessage() . ' ' $fault->getCode() . ' ' $fault->getTraceAsString());
  49.             }
  50.            return false;
  51.         }
  52.     }
  53.     /**
  54.      * Crea una venta en el TPV sin cerrarla. Se usa tanto para obtener el precio total
  55.      * de la transacción como crear una venta y cerrarla
  56.      * @param Carro $carro Entidad carro
  57.      * @param mixed $linea Hibridación de linea de carro (preventa) o de linea de transacción (venta completada=
  58.      * @param User $usuario Usuario web
  59.      * @param string $formaPago 'TPV'|'TRANSACCION'
  60.      * @return mixed|bool Devuelve el número de transacción del ERP o false en casso de que falle
  61.      * @throws \SoapFault Exception del ERP (Cliente caducado, limite sobrepasado, etc...)
  62.      */
  63.     public function CrearVenta($carro,$linea,$usuario,$formaPago,$gastosEnvio){
  64.         $xml=new \stdClass;
  65.         $xml->Venta=new \stdClass;
  66.         $xml->Venta->CodCliente=$usuario->getErpId();
  67.         $xml->Venta->FormaPago=$formaPago;
  68.         $xml->Venta->CodPromocion '';
  69.         //SI hay gastos de envío se lo indicamos al ERP
  70.         $xml->Venta->IncluyeGastosEnvio = ($gastosEnvio)? truefalse;
  71.         if($gastosEnvio)
  72.           $xml->Venta->ImporteGastosEnvio=$gastosEnvio;
  73.         else
  74.           $xml->Venta->ImporteGastosEnvio=false;
  75.         $xml->Venta->DivisaRecibida='EUR-BILLETE';
  76.         //Si le pasamos un carro (Pre-persist)
  77.         if(get_class($carro)=='App\Entity\Carro'){
  78.             $xml->Venta->DivisaEntrega=$linea->getDivisaFinal()->getTitle();
  79.             $xml->Venta->Cantidad=$linea->getCantidadFinal();
  80.         }
  81.         //Si es una transaccion (Ventas reales que serán cerradas después)
  82.         else{
  83.             $xml->Venta->DivisaEntrega=$linea->getDivisaDestino()->getTitle();
  84.             $xml->Venta->Cantidad=$linea->getCantidad();
  85.         }
  86.         //echo json_encode($xml);
  87.         //Valor fijo de la operación
  88.         $xml->Venta->TipoOperacion=0;
  89.         $args = array(
  90.             'wSImportVenta' => $xml,
  91.             'wSExportEstadoVenta'=> '',
  92.         );
  93.         try{
  94.            if($this->env=='dev')
  95.            {
  96.                $returnArray['erpCode']=substr(md5(uniqid(rand(), true)),0,5);
  97.                $returnArray['importe']=rand(100,200);
  98.                $this->logger->info('[DINAMIC][INFO][1/2][CREAR VENTA] [DEV][OK]');
  99.                $this->logger->info('[DINAMIC][INFO][2/2][CREAR VENTA] [DEV][OK]');
  100.                return $returnArray;
  101.            }
  102.            $response=(array) $this->ClienteSoap->CrearVentaVenta($args);
  103.            if(isset($response['wSExportEstadoVenta']->EstadoVenta->NoTicket))
  104.            {
  105.                 $returnArray['erpCode']=$response['wSExportEstadoVenta']->EstadoVenta->NoTicket;
  106.                 $returnArray['importe']=str_replace(',','',$response['wSExportEstadoVenta']->EstadoVenta->Importe);
  107.                 $this->logger->info('[DINAMIC][INFO][1/2][CREAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  108.                 $this->logger->info('[DINAMIC][INFO][2/2][CREAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  109.                 return ($returnArray);
  110.            }
  111.            $this->logger->error('[DINAMIC][ERROR][1/2][CREAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  112.            $this->logger->error('[DINAMIC][ERROR][2/2][CREAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  113.            return false;
  114.         }catch (\SoapFault $fault){
  115.            $this->logger->critical('[DINAMIC][EXCEPTION][1/3][CREAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  116.            $this->logger->critical('[DINAMIC][EXCEPTION][2/3][CREAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  117.            $this->logger->critical('[DINAMIC][EXCEPCION][3/3][CREAR VENTA] '.$fault->getMessage().' '.$fault->getCode().' '.$fault->getTraceAsString());
  118.            throw $fault;
  119.         }
  120.     }
  121.     /**
  122.      * Crea una venta en el TPV sin cerrarla. Se usa tanto para obtener el precio total
  123.      * de la transacción como crear una venta y cerrarla
  124.      * @param Carro $carro Entidad carro
  125.      * @param mixed $linea Hibridación de linea de carro (preventa) o de linea de transacción (venta completada=
  126.      * @param User $usuario Usuario web
  127.      * @param Cupon $cupon  Cupones
  128.      * @param string $formaPago 'TPV'|'TRANSACCION'
  129.      * @return mixed|bool Devuelve el número de transacción del ERP o false en casso de que falle
  130.      * @throws \SoapFault Exception del ERP (Cliente caducado, limite sobrepasado, etc...)
  131.      */
  132.     public function CrearVentaV2($carro,$linea,$usuario,$formaPago,$gastosEnvio$cupon$tipoPromo){
  133.         $xml=new \stdClass;
  134.         $xml->Venta=new \stdClass;
  135.         $xml->Venta->CodCliente=$usuario->getErpId();
  136.         $xml->Venta->FormaPago=$formaPago;
  137.         if ($tipoPromo == Carro::TIPO_PROMO_DIVISA) {
  138.             $xml->Venta->CodTarifa $cupon;
  139.             $xml->Venta->MotivoCambioTarifa "WEB";
  140.             $xml->Venta->CodPromocion '';
  141.         }
  142.         elseif ($tipoPromo == Carro::TIPO_PROMO_CUPON) {
  143.             $xml->Venta->CodTarifa 'NORMAL';
  144.             $xml->Venta->MotivoCambioTarifa 'WEB';
  145.             $xml->Venta->CodPromocion $cupon;
  146.         }
  147.         //SI hay gastos de envío se lo indicamos al ERP
  148.         $xml->Venta->IncluyeGastosEnvio = ($gastosEnvio)? truefalse;
  149.         if($gastosEnvio)
  150.           $xml->Venta->ImporteGastosEnvio=$gastosEnvio;
  151.         else
  152.           $xml->Venta->ImporteGastosEnvio=false;
  153.         $xml->Venta->DivisaRecibida='EUR-BILLETE';
  154.         //Si le pasamos un carro (Pre-persist)
  155.         if(get_class($carro)=='App\Entity\Carro'){
  156.             $xml->Venta->DivisaEntrega=$linea->getDivisaFinal()->getTitle();
  157.             $xml->Venta->Cantidad=$linea->getCantidadFinal();
  158.         }
  159.         //Si es una transaccion (Ventas reales que serán cerradas después)
  160.         else{
  161.             $xml->Venta->DivisaEntrega=$linea->getDivisaDestino()->getTitle();
  162.             $xml->Venta->Cantidad=$linea->getCantidad();
  163.         }
  164.         //echo json_encode($xml);
  165.         //Valor fijo de la operación
  166.         $xml->Venta->TipoOperacion=0;
  167.         $args = array(
  168.             'wSImportVenta' => $xml,
  169.             'wSExportEstadoVenta'=> '',
  170.         );
  171.         try{
  172.            if($this->env=='dev')
  173.            {
  174.                $returnArray['erpCode']=substr(md5(uniqid(rand(), true)),0,5);
  175.                $returnArray['importe']=rand(100,200);
  176.                $this->logger->info('[DINAMIC][INFO][1/2][CREAR VENTA2] [DEV][OK] cupon:'.$cupon);
  177.                $this->logger->info('[DINAMIC][INFO][2/2][CREAR VENTA2] [DEV][OK] cupón:'.$cupon);
  178.                return $returnArray;
  179.            }
  180.            $response=(array) $this->ClienteSoap->CrearVentaVentaV2($args);
  181.            if(isset($response['wSExportEstadoVenta']->EstadoVenta->NoTicket))
  182.            {
  183.                 $returnArray['erpCode']=$response['wSExportEstadoVenta']->EstadoVenta->NoTicket;
  184.                 $returnArray['importe']=str_replace(',','',$response['wSExportEstadoVenta']->EstadoVenta->Importe);
  185.                 $returnArray['DescuentoTicket']=str_replace(',','',$response['wSExportEstadoVenta']->EstadoVenta->DescuentoTicket);
  186.                 $this->logger->info('[DINAMIC][INFO][1/2][CREAR VENTA2] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  187.                 $this->logger->info('[DINAMIC][INFO][2/2][CREAR VENTA2] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  188.                 return ($returnArray);
  189.            }
  190.            $this->logger->error('[DINAMIC][ERROR][1/2][CREAR VENTA2] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  191.            $this->logger->error('[DINAMIC][ERROR][2/2][CREAR VENTA2] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  192.            return false;
  193.         }catch (\SoapFault $fault){
  194.            $this->logger->critical('[DINAMIC][EXCEPTION][1/3][CREAR VENTA2] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  195.            $this->logger->critical('[DINAMIC][EXCEPTION][2/3][CREAR VENTA2] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  196.            $this->logger->critical('[DINAMIC][EXCEPCION][3/3][CREAR VENTA2] '.$fault->getMessage().' '.$fault->getCode().' '.$fault->getTraceAsString());
  197.            throw $fault;
  198.         }
  199.     }
  200.     /**
  201.      * Borra una venta del TPV, se usa para borra las ventas creadas con la intención
  202.      * de obtener el precio final
  203.      * @param string $erpCode Código ERP de la transaccion a borrar
  204.      * @return bool Estado de la operación
  205.      */
  206.     public function BorrarVenta($erpCode){
  207.         $args = array(
  208.             'numDocumento' => $erpCode,
  209.         );
  210.         try{
  211.             if($this->env=='dev'){
  212.                 return true;
  213.             }
  214.             $this->ClienteSoap->BorrarVenta($args);
  215.             $this->logger->info('[DINAMIC][INFO][1/2][BORRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  216.             $this->logger->info('[DINAMIC][INFO][2/2][BORRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  217.             return true;
  218.         }catch(\SoapFault $fault){
  219.             $this->logger->critical('[DINAMIC][EXCEPTION][1/3][BORRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  220.             $this->logger->critical('[DINAMIC][EXCEPTION][2/3][BORRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  221.             $this->logger->critical('[DINAMIC][EXCEPCION][3/3][BORRAR VENTA] '.$fault->getMessage().' '.$fault->getCode().' '.$fault->getTraceAsString());
  222.             return false;
  223.         }
  224.     }
  225.     /**
  226.      * Cierra las ventas en el ERP
  227.      * @param TransaccionLinea $transaccionlinea linea de la opera
  228.      * @return mixed|bool Código de la venta cerrada o false en caso de que falle
  229.      */
  230.     public function RegistrarVenta($transaccionlinea){
  231.         $args = array(
  232.             'numDoc' => $transaccionlinea->getErpCode(),
  233.             'wSExportEstadoVenta'=> '',
  234.         );
  235.         
  236. //         dump($this->ClienteSoap);die();
  237.         try{
  238.             if($this->env=='dev'){
  239.                 $returnArray['erpCode']=substr(md5(uniqid(rand(), true)),0,5);
  240.             }
  241.            $respuesta$this->ClienteSoap->RegistrarVenta($args);
  242. //            dump($respuesta);die();
  243.            if($respuesta->wSExportEstadoVenta->EstadoVenta->NoTicket){
  244.                 $this->logger->info('[DINAMIC][INFO][1/2][REGISTRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  245.                 $this->logger->info('[DINAMIC][INFO][2/2][REGISTRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  246.                 return ($respuesta->wSExportEstadoVenta->EstadoVenta->NoTicket);
  247.            }
  248.            else {
  249.                 $this->logger->info('[DINAMIC][ERROR][1/2][REGISTRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  250.                 $this->logger->info('[DINAMIC][ERROR][2/2][REGISTRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  251.            }
  252.            return false;
  253.         }catch (\SoapFault $fault){
  254.             $this->logger->critical('[DINAMIC][EXCEPTION][1/3][REGISTRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
  255.             $this->logger->critical('[DINAMIC][EXCEPTION][2/3][REGISTRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
  256.             $this->logger->critical('[DINAMIC][EXCEPCION][3/3][REGISTRAR VENTA] '.$fault->getMessage().' '.$fault->getCode().' '.$fault->getTraceAsString());
  257.            return false;
  258.         }
  259.     }
  260. }