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); ?>