<?php
// psra guiarse
//https://flecharoja.com/blog/2018-03/mensaje-receptor/

date_default_timezone_set('America/Costa_Rica');

require ('../../conexion.php');		//Controla las credenciales para BD
require ('fe_consultasbd.php');	//Realizas las consultas a BD para la optencion de datos

  $fecha_actual=  date('Y-m-d') ;
  $fecha_actualizacion =  $parametros['fec_actualizacion'];
 if ($fecha_actual >= $fecha_actualizacion ){     /////////////////////////////// version 4.4 //////////////////////////////////////////


function formatoFecha(){
	$fecha = new DateTime();		
	return $fecha->format('c');
 }
 $datos=[];
//setear valores de get o post segun se llame el script
if(isset($_GET['datos']) || isset($_POST['datos'])){
	$datos = (isset($_GET['datos'])) ? $_GET['datos'] : $_POST['datos'];
}else{



			function cerosAlFrente($string){
			return str_pad($string,12,'0',STR_PAD_LEFT);
		}

		$datos = [	
		//Clave del documento al que vamos a DAR RESPUESTA
		'Clave' => $mensajes['cdgclavecomp'],
	//	'NumeroCedulaEmisor' =>  cerosAlFrente($mensajes['numcedemi']),
		'NumeroCedulaEmisor' =>  $mensajes['numcedemi'],   // se cambia en la version 4.4
		//Fecha del MENSAJE no del 
		'FechaEmisionDoc' =>formatoFecha(),	
		'Mensaje' => $mensajes['cdgmen'],	 //1= aceptado 2= Aceptado parcialmente, 3 = rechazado
		'DetalleMensaje' => $mensajes['detmen'], //max 80 pos, opc
		];
		
		if($mensajes['monimp'] != ""){
			$datos['MontoTotalImpuesto'] = $mensajes['monimp'];
			 //array_push($data, ['cat' => 'wagon']);
			 //condicional = obligatorio si hay algun dalle que trae impuestos
		}
		$datos['CodigoActividad']           = $web_0000['cdgact']; 
		$datos['TotalFactura']              = $mensajes['totcomp'];
		//$datos['NumeroCedulaReceptor']      = cerosAlFrente($mensajes['numcedrec']);
		$datos['NumeroCedulaReceptor']      =$mensajes['numcedrec'];     // se cambia en la version 4.4
		$datos['NumeroConsecutivoReceptor'] = $mensajes['numcompmen'];



}


$tiporespuesta= substr( $mensajes['numcompmen'],-12,-10);

require ('Firmadorcr.php');
 
 $encabezado = '
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.4/mensajeReceptor   https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.4/mensajeReceptor_V4.4.xsd" 
 xmlns="https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.4/mensajeReceptor"';
 
//se sigue el metodo aplicado en fe.php
	

$xml_data = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><MensajeReceptor '.$encabezado.'></MensajeReceptor>');
$firmador = new Firmadocr();
$firmador->array_to_xml($datos,$xml_data);
$dom = new DOMDocument("1.0");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml_data->asXML());
$result  = $dom->saveXML();
file_put_contents("nuevoMensaje.xml", $result);


/*************************************
		COMPROBANTE CON FIRMA
*************************************/
$xmlSinFirmar = 'nuevoMensaje.xml';
$xmlFirmado = 'crt/'.$mensajes['numcompmen'].'.xml';
//$xmlFirmado = $numeroConce.'.xml';
			



		

$firmador->firmar(
	$parametros['certificado'],     //uri del cert.p12
	$parametros['claveCertificado'],//clave para el cert.p12
	$xmlSinFirmar,					//URI XML sin fimar
	$xmlFirmado,					//URI donde va caer el xmlFirmardo
	$tiporespuesta 
); //IMP: Parametros de tipo doc



$xmlFirmado = file_get_contents($xmlFirmado);


/***************************************	
		PREPARACION
***************************************/	
	$ahora = strtotime(date('Y-m-d H:i:s'));	
	$bdHora = $resultadoToken['refresh_token_limit'];
		
	if((int)$ahora < (int)($bdHora)){		
		$eltoken = $resultadoToken['access_token'];		
	}else{
		$eltoken = $resultadoToken['access_token'];				
	}
	
	$mensaje ='{
     "clave": "'.$mensajes['cdgclavecomp'].'",
	  "fecha": "'.$mensajes['feccomp'].'", 
	  "emisor": {
		"tipoIdentificacion": "'.$web_0000['TIPCEDEMP'].'",
		"numeroIdentificacion": "'.$web_0000['CEDJUR'].'"
	  },';
	 
		$mensaje .='
		  "receptor": {
			"tipoIdentificacion": "'.$mensajes['cedtipemi'].'",
			"numeroIdentificacion": "'.$mensajes['numcedemi'].'"
		  },
		  "consecutivoReceptor": "'.$mensajes['numcompmen'].'",
		  "comprobanteXml": "'.base64_encode($xmlFirmado).'"
		}'; 

 
	$header = array(
		'Authorization: bearer '.$eltoken,//NOTA: Token
		'Content-Type: application/json'
	);
	
	$curl = curl_init($parametros['uriRecepcion']);
	curl_setopt($curl, CURLOPT_HEADER, true);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
	curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
	curl_setopt($curl, CURLOPT_POSTFIELDS, $mensaje);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

	$respuesta = curl_exec($curl);
	$status = curl_getinfo($curl,CURLINFO_HTTP_CODE);
	curl_close($curl);
	
	$headers = array();
	
	$data = explode("\n",$respuesta);
		
	$mensaje = '';
	$urlConsultarEstadoMensaje = '';
	foreach($data as $key => $currentkey ){
		$pos = strpos($currentkey,'X-Error-Cause');		
		if ($pos !== false) {	
			$mensaje = utf8_encode($data[$key]);
		}
		
		$pos = strpos($currentkey,'Location');		
		if ($pos !== false) {	
			$urlConsultarEstadoMensaje = utf8_encode($data[$key]);
			$urlConsultarEstadoMensaje = str_replace('Location: ','',trim($urlConsultarEstadoMensaje)); //elimina la palabra "Location "
		}
	}
	
	if($status == 202)		
		$mensaje = 'Mensaje entregado correctamente('.$status.')';
	else
		$mensaje ='No se ha entregado de forma correcta('.$status.')';		
	
	echo $idFactura =$_GET['f'] ;
	$actualizarEstadoComp = "
	UPDATE mensaje_receptor 
	SET 
		urlConsultarEstadoMensaje = '$urlConsultarEstadoMensaje',
		estadoComprobanteIntegracion = $status,
		mensajeHacienda = '$mensaje'
	
	WHERE codmen = $idFactura";
	
	if ($mysqli->query($actualizarEstadoComp) === TRUE) {
		echo "enviado correctamente";
	} else {
		echo "Error updating record: " . $mysqli->error;
		echo '<br>'.$actualizarEstadoComp;
		
	}
	$mysqli->close();


		/***************************************	
		Proceso de consulta de estado del comprobantes
		***************************************/	

		require('fe_estado.php'); /**/
		

 }else{        ///////////////////////////////////////////// version 4.2 //////////////////////////////////////////

	
	// psra guiarse
//https://flecharoja.com/blog/2018-03/mensaje-receptor/



function formatoFecha(){
	$fecha = new DateTime();		
	return $fecha->format('c');
 }
 $datos=[];
//setear valores de get o post segun se llame el script
if(isset($_GET['datos']) || isset($_POST['datos'])){
	$datos = (isset($_GET['datos'])) ? $_GET['datos'] : $_POST['datos'];
}else{



			function cerosAlFrente($string){
			return str_pad($string,12,'0',STR_PAD_LEFT);
		}

		$datos = [	
		//Clave del documento al que vamos a DAR RESPUESTA
		'Clave' => $mensajes['cdgclavecomp'],
		'NumeroCedulaEmisor' =>  cerosAlFrente($mensajes['numcedemi']),
		//Fecha del MENSAJE no del 
		'FechaEmisionDoc' =>formatoFecha(),	
		'Mensaje' => $mensajes['cdgmen'],	 //1= aceptado 2= Aceptado parcialmente, 3 = rechazado
		'DetalleMensaje' => $mensajes['detmen'], //max 80 pos, opc
		];
		
		if($mensajes['monimp'] != ""){
			$datos['MontoTotalImpuesto'] = $mensajes['monimp'];
			 //array_push($data, ['cat' => 'wagon']);
			 //condicional = obligatorio si hay algun dalle que trae impuestos
		}
		
		$datos['TotalFactura']              = $mensajes['totcomp'];
		$datos['NumeroCedulaReceptor']      = cerosAlFrente($mensajes['numcedrec']);
		$datos['NumeroConsecutivoReceptor'] = $mensajes['numcompmen'];



}


$tiporespuesta= substr( $mensajes['numcompmen'],-12,-10);

require ('Firmadorcr.php');
 
 $encabezado = '
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2/mensajeReceptor https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.2/mensajeReceptor_V4.2.xsd" 
 xmlns="https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2/mensajeReceptor"';
 
//se sigue el metodo aplicado en fe.php
	

$xml_data = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><MensajeReceptor '.$encabezado.'></MensajeReceptor>');
$firmador = new Firmadocr();
$firmador->array_to_xml($datos,$xml_data);
$dom = new DOMDocument("1.0");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml_data->asXML());
$result  = $dom->saveXML();
file_put_contents("nuevoMensaje.xml", $result);


/*************************************
		COMPROBANTE CON FIRMA
*************************************/
$xmlSinFirmar = 'nuevoMensaje.xml';
$xmlFirmado = 'crt/'.$mensajes['numcompmen'].'.xml';
//$xmlFirmado = $numeroConce.'.xml';
			



		

$firmador->firmar(
	$parametros['certificado'],     //uri del cert.p12
	$parametros['claveCertificado'],//clave para el cert.p12
	$xmlSinFirmar,					//URI XML sin fimar
	$xmlFirmado,					//URI donde va caer el xmlFirmardo
	$tiporespuesta 
); //IMP: Parametros de tipo doc



$xmlFirmado = file_get_contents($xmlFirmado);


/***************************************	
		PREPARACION
***************************************/	
	$ahora = strtotime(date('Y-m-d H:i:s'));	
	$bdHora = $resultadoToken['refresh_token_limit'];
		
	if((int)$ahora < (int)($bdHora)){		
		$eltoken = $resultadoToken['access_token'];		
	}else{
		require('../token.php');		
	}
	
	$mensaje ='{
     "clave": "'.$mensajes['cdgclavecomp'].'",
	  "fecha": "'.$mensajes['feccomp'].'", 
	  "emisor": {
		"tipoIdentificacion": "'.$web_0000['TIPCEDEMP'].'",
		"numeroIdentificacion": "'.$web_0000['CEDJUR'].'"
	  },';
	 
		$mensaje .='
		  "receptor": {
			"tipoIdentificacion": "'.$mensajes['cedtipemi'].'",
			"numeroIdentificacion": "'.$mensajes['numcedemi'].'"
		  },
		  "consecutivoReceptor": "'.$mensajes['numcompmen'].'",
		  "comprobanteXml": "'.base64_encode($xmlFirmado).'"
		}'; 

 
	$header = array(
		'Authorization: bearer '.$eltoken,//NOTA: Token
		'Content-Type: application/json'
	);
	
	$curl = curl_init($parametros['uriRecepcion']);
	curl_setopt($curl, CURLOPT_HEADER, true);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
	curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
	curl_setopt($curl, CURLOPT_POSTFIELDS, $mensaje);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

	$respuesta = curl_exec($curl);
	$status = curl_getinfo($curl,CURLINFO_HTTP_CODE);
	curl_close($curl);
	
	$headers = array();
	
	$data = explode("\n",$respuesta);
		
	$mensaje = '';
	$urlConsultarEstadoMensaje = '';
	foreach($data as $key => $currentkey ){
		$pos = strpos($currentkey,'X-Error-Cause');		
		if ($pos !== false) {	
			$mensaje = utf8_encode($data[$key]);
		}
		
		$pos = strpos($currentkey,'Location');		
		if ($pos !== false) {	
			$urlConsultarEstadoMensaje = utf8_encode($data[$key]);
			$urlConsultarEstadoMensaje = str_replace('Location: ','',trim($urlConsultarEstadoMensaje)); //elimina la palabra "Location "
		}
	}
	
	if($status == 202)		
		$mensaje = 'Mensaje entregado correctamente('.$status.')';
	else
		$mensaje ='No se ha entregado de forma correcta('.$status.')';		
	
	echo $idFactura =$_GET['f'] ;
	$actualizarEstadoComp = "
	UPDATE mensaje_receptor 
	SET 
		urlConsultarEstadoMensaje = '$urlConsultarEstadoMensaje',
		estadoComprobanteIntegracion = $status,
		mensajeHacienda = '$mensaje'
	
	WHERE codmen = $idFactura";
	
	if ($mysqli->query($actualizarEstadoComp) === TRUE) {
		echo "enviado correctamente";
	} else {
		echo "Error updating record: " . $mysqli->error;
		echo '<br>'.$actualizarEstadoComp;
		
	}
	$mysqli->close();


		/***************************************	
		Proceso de consulta de estado del comprobantes
		***************************************/	

		require('fe_estado.php'); /**/
		



		
	
	 }	