Recibir notificaciones de pagos de tus clientes
Puedes configurar un servicio web propio para recibir notificaciones automáticas cuando tus clientes realicen pagos en la plataforma de LibreDTE.
¿Cómo funciona?
Cuando se registra un pago, LibreDTE realiza una solicitud HTTP POST a la URL que definas. El cuerpo de la solicitud contiene un JSON con los datos del pago.
Ejemplo de URL de tu servicio:
https://example.com/api/pagos/notificar
Ejemplo de payload recibido:
{
"emisor": 76192083,
"codigo": "aWRfcGFnbwo=",
"receptor": 11222333,
"fecha": "2020-04-01",
"pagado": "2020-04-21",
"medio": "webpay",
"datos": null
}
Campos incluidos
Campo | Descripción |
---|---|
emisor |
RUT del emisor del cobro (sin dígito verificador) |
codigo |
Código único del cobro (útil para validación posterior) |
receptor |
RUT del receptor del cobro (sin DV) |
fecha |
Fecha de emisión del cobro |
pagado |
Fecha en que se realizó el pago |
medio |
Medio de pago utilizado (ej. webpay ) |
datos |
Información adicional del medio de pago (opcional) |
Validación del cobro
Siempre debes validar el pago consultando directamente a LibreDTE usando el código del cobro. Esto garantiza que la notificación sea auténtica y evita errores o fraudes.
Ejemplo práctico
El siguiente código incluye cómo recibir el JSON, procesarlo y consultar a LibreDTE para verificar el estado del cobro.
/**
* Ejemplo básico de servicio web para recibir una notificación de pago
* desde LibreDTE.
*/
// Se utiliza el API Client de LibreDTE, instalar dependencia con:
// composer require libredte/libredte-api-client
use libredte\api_client\ApiClient;
use libredte\api_client\ApiException;
// Configuración de autenticación.
$emisor = 76192083; // RUT sin puntos ni DV.
$hash = ''; // Se obtiene en el perfil del usuario.
$user = ''; // Lo defines al configurar el webhook en LibreDTE.
$pass = ''; // Lo defines al configurar el webhook en LibreDTE.
// Verificar si la consulta tiene las credenciales válidas.
if (!auth_check($user, $pass)) {
throw new ApiException(
'Usuario no autenticado o credenciales incorrectas.'
);
}
// Recibir datos del servicio web y extraer EnvioDTE o EnvioBOLETA.
$payload = json_decode(file_get_contents('php://input'), true);
if (!$payload) {
throw new ApiException('No se recibieron datos del cobro.');
}
// Verificar que el cobro efectivamente esté pagado.
$libredte = new ApiClient($hash);
$resource = sprintf(
'/pagos/cobros/info/%s/%d',
$payload['codigo'] ?? throw new ApiException(
'No se recibió el código del cobro que fue pagado.'
),
$emisor
);
$response = $libredte->get($resource);
if (($response['status']['code'] ?? null) !== 200) {
throw new ApiException((sprintf(
'Error al realizar la consulta del cobro: %s',
$response['body']
));
}
$cobro = (object) $response['body'];
// Revisar si el cobro está pagado realmente. Esto asegura que está
// pagado, ya que se consultó a LibreDTE previamente por el estado.
if ($cobro->pagado) {
cobro_pagado($cobro);
}
// Función que verifica las credenciales utilizando HTTP Auth Basic.
function auth_check(string $user, string $pass): bool
{
// Error si no se definen las credenciales en la configuración.
if (empty($user) || empty($pass)) {
return false;
}
// Obtener cabecera de HTTP Auth Basic.
$headers = apache_request_headers();
if (empty($headers['Authorization'])) {
return false;
}
// Validar credenciales.
[$basic, $Authorization] = explode(' ', $headers['Authorization']);
[$u, $p] = explode(':', base64_decode($Authorization));
$status = $u === $user && $p === $pass;
return $status;
}
// Función para hacer lo que se requiera con el cobro pagado.
function cobro_pagado(object $cobro): mixed
{
print_r($cobro);
}
Puedes usar este sistema para automatizar acciones como activar servicios, enviar correos o generar documentos tras el pago.