src/Services/WebServiceTPV.php line 42
- <?php
- namespace App\Services;
- use App\Entity\TransaccionLinea;
- use Doctrine\ORM\EntityManagerInterface;
- use Psr\Log\LoggerInterface;
- use Symfony\Component\HttpKernel\KernelInterface;
- use App\Entity\Carro;
- require_once('NTLMStream.php');
- ini_set("soap.wsdl_cache_enabled", 0);
- if(!defined('USERPWD')){
- // define('USERPWD', 'web:3ur0ch4ng3');
- define('USERPWD','web:RpvGer43,567W12@@');
- }
- class WebServiceTPV
- {
- /**
- * @var EntityManager
- */
- private $em;
- /**
- * @var string $env, Environment(prod|dev)
- */
- private $env;
- private $ClienteSoap;
- /**
- * Contructor del WsFuncionesTPV
- * @param EntityManager $em Entity manager
- * @param Monolog $logger Registra todas las operaciones que realicemos
- */
- public function __construct(EntityManagerInterface $em, LoggerInterface $webservicesLogger, KernelInterface $kernel)
- {
- try{
- $this->em=$em;
- $this->env=$kernel->getEnvironment();
- stream_wrapper_unregister('http');
- stream_wrapper_register('http', NTLMStream::class)/* or die("Failed to register protocol")*/;
- $this->logger=$webservicesLogger;
- // $baseURL= 'http://getems.ddns.net:7067/DynamicsNAVTPV/WS/TPV%20Eurochange/Codeunit/WsFuncionesTPV';
- $baseURL= 'http://142.132.143.176:7047/DynamicsNAV/WS/TPV%20Eurochange/Codeunit/WsFuncionesTPV';
- $this->ClienteSoap = new NTLMSoapClient($baseURL,array("trace"=>1));
- }catch (\SoapFault $fault){
- if($this->ClienteSoap) {
- $this->logger->critical('[DINAMIC][EXCEPTION][1/3][CONECTAR WSTPV] ' . $this->ClienteSoap->__getLastRequest() . PHP_EOL);
- $this->logger->critical('[DINAMIC][EXCEPTION][2/3][CONECTAR WSTPV] Respuesta del servidor: ' . $this->ClienteSoap->__getLastResponse());
- $this->logger->critical('[DINAMIC][EXCEPCION][3/3][CONECTAR WSTPV] ' . $fault->getMessage() . ' ' . $fault->getCode() . ' ' . $fault->getTraceAsString());
- }
- return false;
- }
- }
- /**
- * Crea una venta en el TPV sin cerrarla. Se usa tanto para obtener el precio total
- * de la transacción como crear una venta y cerrarla
- * @param Carro $carro Entidad carro
- * @param mixed $linea Hibridación de linea de carro (preventa) o de linea de transacción (venta completada=
- * @param User $usuario Usuario web
- * @param string $formaPago 'TPV'|'TRANSACCION'
- * @return mixed|bool Devuelve el número de transacción del ERP o false en casso de que falle
- * @throws \SoapFault Exception del ERP (Cliente caducado, limite sobrepasado, etc...)
- */
- public function CrearVenta($carro,$linea,$usuario,$formaPago,$gastosEnvio){
- $xml=new \stdClass;
- $xml->Venta=new \stdClass;
- $xml->Venta->CodCliente=$usuario->getErpId();
- $xml->Venta->FormaPago=$formaPago;
- $xml->Venta->CodPromocion = '';
- //SI hay gastos de envío se lo indicamos al ERP
- $xml->Venta->IncluyeGastosEnvio = ($gastosEnvio)? true: false;
- if($gastosEnvio)
- $xml->Venta->ImporteGastosEnvio=$gastosEnvio;
- else
- $xml->Venta->ImporteGastosEnvio=false;
- $xml->Venta->DivisaRecibida='EUR-BILLETE';
- //Si le pasamos un carro (Pre-persist)
- if(get_class($carro)=='App\Entity\Carro'){
- $xml->Venta->DivisaEntrega=$linea->getDivisaFinal()->getTitle();
- $xml->Venta->Cantidad=$linea->getCantidadFinal();
- }
- //Si es una transaccion (Ventas reales que serán cerradas después)
- else{
- $xml->Venta->DivisaEntrega=$linea->getDivisaDestino()->getTitle();
- $xml->Venta->Cantidad=$linea->getCantidad();
- }
- //echo json_encode($xml);
- //Valor fijo de la operación
- $xml->Venta->TipoOperacion=0;
- $args = array(
- 'wSImportVenta' => $xml,
- 'wSExportEstadoVenta'=> '',
- );
- try{
- if($this->env=='dev')
- {
- $returnArray['erpCode']=substr(md5(uniqid(rand(), true)),0,5);
- $returnArray['importe']=rand(100,200);
- $this->logger->info('[DINAMIC][INFO][1/2][CREAR VENTA] [DEV][OK]');
- $this->logger->info('[DINAMIC][INFO][2/2][CREAR VENTA] [DEV][OK]');
- return $returnArray;
- }
- $response=(array) $this->ClienteSoap->CrearVentaVenta($args);
- if(isset($response['wSExportEstadoVenta']->EstadoVenta->NoTicket))
- {
- $returnArray['erpCode']=$response['wSExportEstadoVenta']->EstadoVenta->NoTicket;
- $returnArray['importe']=str_replace(',','',$response['wSExportEstadoVenta']->EstadoVenta->Importe);
- $this->logger->info('[DINAMIC][INFO][1/2][CREAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->info('[DINAMIC][INFO][2/2][CREAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- return ($returnArray);
- }
- $this->logger->error('[DINAMIC][ERROR][1/2][CREAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->error('[DINAMIC][ERROR][2/2][CREAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- return false;
- }catch (\SoapFault $fault){
- $this->logger->critical('[DINAMIC][EXCEPTION][1/3][CREAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->critical('[DINAMIC][EXCEPTION][2/3][CREAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- $this->logger->critical('[DINAMIC][EXCEPCION][3/3][CREAR VENTA] '.$fault->getMessage().' '.$fault->getCode().' '.$fault->getTraceAsString());
- throw $fault;
- }
- }
- /**
- * Crea una venta en el TPV sin cerrarla. Se usa tanto para obtener el precio total
- * de la transacción como crear una venta y cerrarla
- * @param Carro $carro Entidad carro
- * @param mixed $linea Hibridación de linea de carro (preventa) o de linea de transacción (venta completada=
- * @param User $usuario Usuario web
- * @param Cupon $cupon Cupones
- * @param string $formaPago 'TPV'|'TRANSACCION'
- * @return mixed|bool Devuelve el número de transacción del ERP o false en casso de que falle
- * @throws \SoapFault Exception del ERP (Cliente caducado, limite sobrepasado, etc...)
- */
- public function CrearVentaV2($carro,$linea,$usuario,$formaPago,$gastosEnvio, $cupon, $tipoPromo){
- $xml=new \stdClass;
- $xml->Venta=new \stdClass;
- $xml->Venta->CodCliente=$usuario->getErpId();
- $xml->Venta->FormaPago=$formaPago;
- if ($tipoPromo == Carro::TIPO_PROMO_DIVISA) {
- $xml->Venta->CodTarifa = $cupon;
- $xml->Venta->MotivoCambioTarifa = "WEB";
- $xml->Venta->CodPromocion = '';
- }
- elseif ($tipoPromo == Carro::TIPO_PROMO_CUPON) {
- $xml->Venta->CodTarifa = 'NORMAL';
- $xml->Venta->MotivoCambioTarifa = 'WEB';
- $xml->Venta->CodPromocion = $cupon;
- }
- //SI hay gastos de envío se lo indicamos al ERP
- $xml->Venta->IncluyeGastosEnvio = ($gastosEnvio)? true: false;
- if($gastosEnvio)
- $xml->Venta->ImporteGastosEnvio=$gastosEnvio;
- else
- $xml->Venta->ImporteGastosEnvio=false;
- $xml->Venta->DivisaRecibida='EUR-BILLETE';
- //Si le pasamos un carro (Pre-persist)
- if(get_class($carro)=='App\Entity\Carro'){
- $xml->Venta->DivisaEntrega=$linea->getDivisaFinal()->getTitle();
- $xml->Venta->Cantidad=$linea->getCantidadFinal();
- }
- //Si es una transaccion (Ventas reales que serán cerradas después)
- else{
- $xml->Venta->DivisaEntrega=$linea->getDivisaDestino()->getTitle();
- $xml->Venta->Cantidad=$linea->getCantidad();
- }
- //echo json_encode($xml);
- //Valor fijo de la operación
- $xml->Venta->TipoOperacion=0;
- $args = array(
- 'wSImportVenta' => $xml,
- 'wSExportEstadoVenta'=> '',
- );
- try{
- if($this->env=='dev')
- {
- $returnArray['erpCode']=substr(md5(uniqid(rand(), true)),0,5);
- $returnArray['importe']=rand(100,200);
- $this->logger->info('[DINAMIC][INFO][1/2][CREAR VENTA2] [DEV][OK] cupon:'.$cupon);
- $this->logger->info('[DINAMIC][INFO][2/2][CREAR VENTA2] [DEV][OK] cupón:'.$cupon);
- return $returnArray;
- }
- $response=(array) $this->ClienteSoap->CrearVentaVentaV2($args);
- if(isset($response['wSExportEstadoVenta']->EstadoVenta->NoTicket))
- {
- $returnArray['erpCode']=$response['wSExportEstadoVenta']->EstadoVenta->NoTicket;
- $returnArray['importe']=str_replace(',','',$response['wSExportEstadoVenta']->EstadoVenta->Importe);
- $returnArray['DescuentoTicket']=str_replace(',','',$response['wSExportEstadoVenta']->EstadoVenta->DescuentoTicket);
- $this->logger->info('[DINAMIC][INFO][1/2][CREAR VENTA2] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->info('[DINAMIC][INFO][2/2][CREAR VENTA2] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- return ($returnArray);
- }
- $this->logger->error('[DINAMIC][ERROR][1/2][CREAR VENTA2] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->error('[DINAMIC][ERROR][2/2][CREAR VENTA2] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- return false;
- }catch (\SoapFault $fault){
- $this->logger->critical('[DINAMIC][EXCEPTION][1/3][CREAR VENTA2] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->critical('[DINAMIC][EXCEPTION][2/3][CREAR VENTA2] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- $this->logger->critical('[DINAMIC][EXCEPCION][3/3][CREAR VENTA2] '.$fault->getMessage().' '.$fault->getCode().' '.$fault->getTraceAsString());
- throw $fault;
- }
- }
- /**
- * Borra una venta del TPV, se usa para borra las ventas creadas con la intención
- * de obtener el precio final
- * @param string $erpCode Código ERP de la transaccion a borrar
- * @return bool Estado de la operación
- */
- public function BorrarVenta($erpCode){
- $args = array(
- 'numDocumento' => $erpCode,
- );
- try{
- if($this->env=='dev'){
- return true;
- }
- $this->ClienteSoap->BorrarVenta($args);
- $this->logger->info('[DINAMIC][INFO][1/2][BORRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->info('[DINAMIC][INFO][2/2][BORRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- return true;
- }catch(\SoapFault $fault){
- $this->logger->critical('[DINAMIC][EXCEPTION][1/3][BORRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->critical('[DINAMIC][EXCEPTION][2/3][BORRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- $this->logger->critical('[DINAMIC][EXCEPCION][3/3][BORRAR VENTA] '.$fault->getMessage().' '.$fault->getCode().' '.$fault->getTraceAsString());
- return false;
- }
- }
- /**
- * Cierra las ventas en el ERP
- * @param TransaccionLinea $transaccionlinea linea de la opera
- * @return mixed|bool Código de la venta cerrada o false en caso de que falle
- */
- public function RegistrarVenta($transaccionlinea){
- $args = array(
- 'numDoc' => $transaccionlinea->getErpCode(),
- 'wSExportEstadoVenta'=> '',
- );
- // dump($this->ClienteSoap);die();
- try{
- if($this->env=='dev'){
- $returnArray['erpCode']=substr(md5(uniqid(rand(), true)),0,5);
- }
- $respuesta= $this->ClienteSoap->RegistrarVenta($args);
- // dump($respuesta);die();
- if($respuesta->wSExportEstadoVenta->EstadoVenta->NoTicket){
- $this->logger->info('[DINAMIC][INFO][1/2][REGISTRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->info('[DINAMIC][INFO][2/2][REGISTRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- return ($respuesta->wSExportEstadoVenta->EstadoVenta->NoTicket);
- }
- else {
- $this->logger->info('[DINAMIC][ERROR][1/2][REGISTRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->info('[DINAMIC][ERROR][2/2][REGISTRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- }
- return false;
- }catch (\SoapFault $fault){
- $this->logger->critical('[DINAMIC][EXCEPTION][1/3][REGISTRAR VENTA] '.$this->ClienteSoap->__getLastRequest().PHP_EOL."\t con los argumentos: ".json_encode($args));
- $this->logger->critical('[DINAMIC][EXCEPTION][2/3][REGISTRAR VENTA] Respuesta del servidor: '.$this->ClienteSoap->__getLastResponse());
- $this->logger->critical('[DINAMIC][EXCEPCION][3/3][REGISTRAR VENTA] '.$fault->getMessage().' '.$fault->getCode().' '.$fault->getTraceAsString());
- return false;
- }
- }
- }