180 lines
5.1 KiB
PHP
Executable File
180 lines
5.1 KiB
PHP
Executable File
<?php
|
|
|
|
$empresa->AuthUser();
|
|
|
|
$rfcId = 1;
|
|
$empresaId = $_SESSION['empresaId'];
|
|
|
|
$ruta_dir = DOC_ROOT.'/empresas/'.$empresaId.'/certificados/'.$rfcId;
|
|
|
|
if($_POST['accion'] == 'guardar_certificado'){
|
|
|
|
$continuar = true;
|
|
|
|
//Checamos si existe el directorio
|
|
if(!is_dir($ruta_dir)){
|
|
|
|
//Sino existe creamos el directorio
|
|
if(!mkdir($ruta_dir, 0755, true)){
|
|
$errMsg = 'Hubo un error al actualizar el certificado. No se pudo crear el directorio.';
|
|
$smarty->assign('errMsg', $errMsg);
|
|
$continuar = false;
|
|
}//else
|
|
|
|
}//if
|
|
|
|
if($continuar){
|
|
|
|
//Certificado .key
|
|
$no_certificado = $_POST['certificado'];
|
|
$pass = $_POST['pass_llave'];
|
|
$generar_sello = true;
|
|
|
|
if(empty($pass)){
|
|
$smarty->assign('errPass', 'Ingrese la contrasena de la llave privada.');
|
|
$generar_sello = false;
|
|
}//if
|
|
|
|
$tmp_archivo = $_FILES['file_certificado']['tmp_name'];
|
|
$nombre_archivo = $_FILES['file_certificado']['name'];
|
|
$file = pathinfo($nombre_archivo);
|
|
$ext = $file['extension'];
|
|
$ruta_destino = $ruta_dir.'/'.$nombre_archivo;
|
|
|
|
if(strlen($file['filename']) != 20){
|
|
$smarty->assign('errCertificado', 'Nombre del certificado invalido. Debe tener 20 caracteres.');
|
|
$generar_sello = false;
|
|
@unlink($ruta_destino);
|
|
}elseif($ext != 'cer'){
|
|
$smarty->assign('errCertificado', 'Certificado invalido. Debe ser extension .cer');
|
|
$generar_sello = false;
|
|
@unlink($ruta_destino);
|
|
}else{
|
|
if(!move_uploaded_file($tmp_archivo, $ruta_destino)){
|
|
$errMsg = 'Hubo un error al actualizar el certificado. No se pudo guardar el certificado.';
|
|
$smarty->assign('errMsg', $errMsg);
|
|
$generar_sello = false;
|
|
}//if
|
|
}//else
|
|
|
|
//Llave privada .cer
|
|
$tmp_archivo2 = $_FILES['file_llave']['tmp_name'];
|
|
$nombre_archivo2 = $_FILES['file_llave']['name'];
|
|
$file2 = pathinfo($nombre_archivo2);
|
|
$ext2 = $file2['extension'];
|
|
$ruta_destino2 = $ruta_dir.'/'.$nombre_archivo2;
|
|
|
|
if($ext2 != 'key'){
|
|
$smarty->assign('errLlave', 'Llave privada invalida. Debe ser extension .key');
|
|
@unlink($ruta_destino);
|
|
@unlink($ruta_destino2);
|
|
$generar_sello = false;
|
|
}else{
|
|
if(!move_uploaded_file($tmp_archivo2, $ruta_destino2)){
|
|
$errMsg = 'Hubo un error al actualizar el certificado. No se pudo guardar la llave privada.';
|
|
$smarty->assign('errMsg', $errMsg);
|
|
$generar_sello = false;
|
|
}//if
|
|
}//else
|
|
|
|
if($generar_sello){
|
|
|
|
$cadenaOriginal = 'abcdefghijklmnopqrstuvwxyz';
|
|
$md5 = md5($cadenaOriginal);
|
|
$certificado = $nombre_archivo2;
|
|
$llave = $nombre_archivo;
|
|
|
|
//Borramos los archivos del certificado anterior
|
|
|
|
if(is_dir($ruta_dir)){
|
|
if($gd = opendir($ruta_dir)){
|
|
while($archivo = readdir($gd)){
|
|
$info = pathinfo($ruta_dir.'/'.$archivo);
|
|
$archivoActual = $info['basename'];
|
|
if($archivoActual != $certificado && $archivoActual != $llave){
|
|
@unlink($ruta_dir.'/'.$archivoActual);
|
|
}//if
|
|
}//while
|
|
closedir($gd);
|
|
}//if
|
|
}//if
|
|
|
|
$comprobante->GenerarSelloGral($cadenaOriginal, $md5, $certificado, $llave, $pass, $rfcId);
|
|
|
|
//Checamos si se genero el archivo
|
|
$status = '';
|
|
$ruta_verified = $ruta_dir.'/verified.txt';
|
|
|
|
if(file_exists($ruta_verified))
|
|
$status = file_get_contents($ruta_verified);
|
|
|
|
if(trim($status) == 'Verified OK'){
|
|
|
|
//guardamos el password
|
|
$myFile = $ruta_dir."/password.txt";
|
|
$fh = fopen($myFile, 'w');
|
|
$stringData = $pass;
|
|
fwrite($fh, $stringData);
|
|
|
|
$smarty->assign('cmpMsg', 'El certificado fue actualizado correctamente.');
|
|
}else{
|
|
$errMsg = 'Error al actualizar el certificado. Los datos no coinciden.';
|
|
$smarty->assign('errMsg', $errMsg);
|
|
|
|
//Borramos los archivos
|
|
if(is_dir($ruta_dir)){
|
|
if($gd = opendir($ruta_dir)){
|
|
while($archivo = readdir($gd)){
|
|
@unlink($ruta_dir.'/'.$archivo);
|
|
}//while
|
|
closedir($gd);
|
|
}//if
|
|
}//if
|
|
|
|
}//else
|
|
|
|
}else{
|
|
|
|
@unlink($ruta_destino);
|
|
@unlink($ruta_destino2);
|
|
|
|
}//else
|
|
|
|
}//if
|
|
|
|
}//if Guardar Certificado
|
|
|
|
$rfc->setEmpresaId($empresaId);
|
|
$rfc->setRfcId($rfcId);
|
|
$certNuevo = $rfc->GetCertificadoByRfc();
|
|
|
|
if($certNuevo == '')
|
|
|
|
$nom_certificado = 'No hay certificados.';
|
|
|
|
else{
|
|
|
|
$sqlQuery = 'UPDATE serie SET noCertificado = "'.$certNuevo.'" WHERE noCertificado = "'.$certAnterior.'"';
|
|
$folios->Util()->DBSelect($_SESSION["empresaId"])->setQuery($sqlQuery);
|
|
$folios->Util()->DBSelect($_SESSION["empresaId"])->UpdateData();
|
|
|
|
$existe_certificado = true;
|
|
$nom_certificado = $certNuevo;
|
|
|
|
}//else
|
|
|
|
|
|
//Expiration Date
|
|
if($existe_certificado){
|
|
|
|
$expire = exec('openssl x509 -noout -in '.$ruta_dir.'/'.$nom_certificado.'.cer.pem -dates');
|
|
$exp = explode('=',$expire);
|
|
$fecha_expiracion = $exp[1];
|
|
$fecha_exp = date('d-m-Y g:i:s a',strtotime($fecha_expiracion));
|
|
|
|
}//if
|
|
|
|
$smarty->assign('fecha_expiracion', $fecha_exp);
|
|
$smarty->assign('nom_certificado', $nom_certificado);
|
|
|
|
?>
|