A veces, es mejor aprender a saber lo que no hay que hacer, y así de cierta forma se aprende a como hacer las cosas.
He creado este hilo para que todos vayamos exponiendo nuestras cagadas en producción, cual era el fallo y como se solucionó, a modo de anécdota.
Empiezo yo:
Hace poco (no mas de dos semanas) uno de los clientes principales de mi empresa, hizo una liquidación (tengo que decir que era la primera) de los ingresos. Cuando vio que los ingresos estaban muy por debajo de lo que la aplicación mostraba en el reporte de ventas empezó el panic attack. La aplicación lleva en producción alrededor de dos meses aproximadamente.
De pronto suena el teléfono, nos cuenta el problema y empezamos a ver que desde el panel del TPV hay pagos que ni siquiera existen en la aplicación, pagos de 1$, 0.2$ y cosas así.
A partir de aquí empieza lo bueno, nuestra integración del TPV (como casi todos los TPVs) necesita el valor de la cantidad a cobrar de forma entera y en formato cadena de texto, es decir, si vamos a cobrar 20$ al TPV le tiene que llegar un cobro de 2000.
Los valores de la BD (MySQL) vienen en formato NUMERIC de 2 decimales, y PHP los coge tal cual, y amigos y señores, si de la base de datos nos viene un valor de 20.00 PHP lo deja como 20, nuestra función lo pasa a string para pasarselo al TPV y al TPV llega un 20 como un castillo, es decir, 0.2 tienen que ser cobrados.
Usando la función number_format() de PHP solucionamos el problema, pero de nuevo y a los dos días, el cliente vuelve a llamar porque siguen apareciendo pagos extraños, nada mas y nada menos que los pagos mayores de 999$ todos están mal. Ya que nosotros estábamos haciendo un number_format a el punto, se nos había olvidado que cuando tenemos cantidades mayores de 1000, tenemos una puta coma que también debemos de formatear.
Al final, un pufo de unos 30 mil aproximadamente se ha cobrado este fallo, que se han tenido que recaudar gracias a la abogada y a los clientes que se habían aprovechado de este bug.