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.
}
}
?>