facturas

 Para el timbrado de facturas electrónicas (CFDI 4.0) en México, necesitas comunicarte con un Proveedor Autorizado de Certificación (PAC) autorizado por el SAT. La mayoría de los PACs ofrecen servicios basados en SOAP o REST API para recibir el XML de la factura, validarlo y timbrarlo (es decir, agregar el sello digital del SAT).

Aquí te detallo cómo puedes realizar este proceso utilizando PHP.

Pasos para Timbrar Facturas CFDI 4.0

  1. Preparar el XML del CFDI:

    • Genera el XML del CFDI conforme a la especificación del SAT.
    • Asegúrate de que el XML esté firmado digitalmente con el certificado y la clave privada del emisor.
  2. Comunicarte con el PAC:

    • Dependiendo del PAC que elijas, podrías usar un servicio SOAP o REST API.
    • Consulta la documentación del PAC para obtener detalles específicos sobre cómo consumir sus servicios.

Ejemplo de Consumo de Servicio SOAP con PHP

A continuación, te muestro un ejemplo de cómo podrías enviar tu XML a un PAC utilizando SOAP en PHP.

Paso 1: Generar y Firmar el XML del CFDI

Este paso no lo detallaré aquí, ya que puede ser complejo y depende de tu implementación específica. Asegúrate de que el XML esté conforme a la especificación del CFDI 4.0 y firmado digitalmente.

Paso 2: Consumir el Servicio SOAP del PAC

Supongamos que tienes un archivo factura.xml que contiene el CFDI 4.0 firmado y quieres enviarlo a un PAC que utiliza SOAP.

  1. Configura el Cliente SOAP:

    • Utiliza la extensión SOAP de PHP para comunicarte con el servicio del PAC.
  2. Envía el XML para Timbrado:

    • Envía el XML utilizando una llamada SOAP al servicio del PAC.

Aquí tienes un ejemplo de cómo podrías hacerlo:

<?php

// Ruta al archivo XML

$xmlFile = 'path/to/factura.xml';


// Cargar el contenido del XML

$xmlContent = file_get_contents($xmlFile);


// URL del servicio SOAP del PAC

$soapUrl = 'https://pac.example.com/soap?wsdl'; // Cambia esta URL a la del PAC que estés utilizando


// Configurar el cliente SOAP

$client = new SoapClient($soapUrl, array('trace' => 1));


// Configurar los parámetros de la solicitud

$params = array(

    'xml' => base64_encode($xmlContent) // Algunos PACs requieren que el XML se envíe en base64

);


try {

    // Llamar al método de timbrado del servicio SOAP

    $response = $client->timbrarCFDI($params); // Cambia 'timbrarCFDI' al nombre del método adecuado del PAC


    // Procesar la respuesta

    if ($response->status == 'success') {

        // Guardar el XML timbrado

        file_put_contents('path/to/factura_timbrada.xml', base64_decode($response->xmlTimbrado));

        echo "Factura timbrada exitosamente.";

    } else {

        echo "Error al timbrar la factura: " . $response->message;

    }

} catch (SoapFault $fault) {

    echo "Error SOAP: " . $fault->getMessage();

}

?>

Ejemplo de Consumo de Servicio REST API con PHP

Si el PAC proporciona un servicio REST API, puedes utilizar cURL para enviar el XML.

Paso 1: Generar y Firmar el XML del CFDI

De nuevo, asegúrate de que el XML esté conforme a la especificación del CFDI 4.0 y firmado digitalmente.

Paso 2: Consumir el Servicio REST API del PAC

Aquí tienes un ejemplo de cómo podrías hacerlo:

<?php

// Ruta al archivo XML

$xmlFile = 'path/to/factura.xml';


// Cargar el contenido del XML

$xmlContent = file_get_contents($xmlFile);


// URL del servicio REST API del PAC

$apiUrl = 'https://pac.example.com/api/timbrar'; // Cambia esta URL a la del PAC que estés utilizando


// Inicializar cURL

$ch = curl_init($apiUrl);


// Configurar las opciones de cURL

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));

curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlContent);


// Ejecutar la solicitud

$response = curl_exec($ch);


// Verificar si hubo un error

if (curl_errno($ch)) {

    echo 'Error en cURL: ' . curl_error($ch);

} else {

    // Procesar la respuesta

    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($httpCode == 200) {

        // Suponiendo que la respuesta es el XML timbrado

        file_put_contents('path/to/factura_timbrada.xml', $response);

        echo "Factura timbrada exitosamente.";

    } else {

        echo "Error al timbrar la factura. Código HTTP: " . $httpCode . " Respuesta: " . $response;

    }

}


// Cerrar cURL

curl_close($ch);

?>

Consideraciones Adicionales

  • Certificados y Claves: Asegúrate de que tus certificados y claves estén correctamente configurados y sean válidos.
  • Validación: Algunos PACs pueden realizar validaciones adicionales en el XML antes de timbrarlo. Asegúrate de que tu XML cumpla con todas las especificaciones del SAT.
  • Documentación del PAC: Consulta la documentación específica del PAC que utilices para obtener detalles precisos sobre cómo consumir sus servicios.

Con estos ejemplos y pasos, deberías estar en camino para implementar el timbrado de facturas CFDI 4.0 utilizando PHP. Si tienes más preguntas o necesitas más detalles, no dudes en preguntar.




Comentarios

Entradas populares de este blog

API Web Crypto,

React Events

firmas digitales integradas en PDFs