Webhook


Un webhook es una forma de automatizar la comunicación entre dos aplicaciones o servicios mediante la entrega automática de datos de una aplicación a otra cuando ocurre un evento específico. Los webhooks son como "notificaciones automáticas" que envía una aplicación a otra en tiempo real.


Argumento Tipo Descripción
identificador
requerido
string ID primario (Primary Key) de la factura en el sistema o aplicación que consume la API
error string Mensaje de error del timbrado que solo se enviará cuando haya ocurrido un error, cuando esto ocurra los campos de uuid, xml y pdf no seran enviados.
uuid string Hash unico proporcionado por SAT para dar valides a la factura.
url_xml string Url con que el se accede al archivo xml.
url_pdf string Url con que el se accede al archivo pdf.
status string Estado con el que se guarda una factura al ser timbrada.
success string Mensaje de éxito del timbrado. Este solo se manda en caso de que no exista error.

A continuación se muestra un ejemplo de una api que funciona como webhook, dicha api se crea con el método post que recibirá un Request del tipo Illuminate. En dicho request se podrán encontrar los parámetros enviados desde la facturación. En el código encontramos funciones de ejemplo que solo son representativas con la finalidad de sugerir acciones que pueden ser de interés tal es el caso de sendMail, tenga en cuenta que si su sistema no cuenta con notificación vía email esta función se debe de omitir, en caso de si tener, debe remplazar el ejemplo por su función propia o bien colocar los pasos necesarios para realizar esta tarea. El return response es indispensable sea tal cual se muestra en el ejemplo, un success ok en formato json.


    <?php
    
namespace App\Http\Controllers;

    use 
Illuminate\Http\Request;
    use 
App\Factura;

    class 
FacturasController extends Controller{
        ...

        public function 
timbrada(Request $request){

            
$factura Factura::find($request->identificador);

            if(
$request->error){
                
$factura->msg $request->error;
                
$factura->save();
            }

            if(
$request->success){
                
$factura->uuid $request->uuid;
                
$factura->xml_archivo $request->url_xml;
                
$factura->pdf_archivo $request->url_pdf;
                
$factura->status_factura Factura::STATUS_TIMBRADA;
                
$factura->msg null;
                
$factura->save();

                
$this->__sendEmail($factura); // Función opcional, la elaboración de la misma dependerá de cada sistema.
            
}

            return 
response()->json(["success" => "OK"]); // Retorno de repuesta success para indicar que la funcion se ejecutó con exito.
        }
    }
    
?>