Comunicaci贸n con FACe

Facturae-PHP permite establecer comunicaci贸n directa sin salir de la librer铆a con los servicios web de FACe para, entre otros, remitir facturas electr贸nicas a la administraci贸n p煤blica.

Prerequisitos

Para poder usar los servicios web de FACe debes dar de alta el certificado expedido por la FNMT para tu persona f铆sica en esta p谩gina web.

Una vez rellenados los datos de la empresa podr谩s empezar a usar FACe Web Services y deber谩s firmar toda comunicaci贸n al servicio con la clave privada asociada al certificado que has dado de alta (esta parte la hace Facturae-PHP autom谩ticamente, solo hay que indicarle la ruta del banco de certificados).


Cliente de FACe

El uso de FACe desde Facturae-PHP es extremadamente sencillo:

use josemmo\Facturae\Face\FaceClient;

$face = new FaceClient("clave_publica.pem", "clave_privada.pem", "passphrase");

Al igual que al firmar una factura electr贸nica, puedes usar un solo archivo .pfx en vez de un par .pem:

$face = new FaceClient("certificado.pfx", null, "passphrase");

NOTA

Para m谩s informaci贸n sobre qu茅 otros valores pueden tomar los par谩metros del constructor, consulta la documentaci贸n de firma electr贸nica.

Por defecto, FaceClient se comunica con el entorno de producci贸n de FACe. Para usar el entorno de pruebas (staging) puedes utilizar el siguiente m茅todo:

$face->setProduction(false);

Todas las llamadas a FACe desde FaceClient devuelven un objeto SimpleXMLElement. Consulta el manual de PHP para m谩s informaci贸n.


Cliente personalizado

Algunas administraciones p煤blicas optan por desplegar su propio FACe en vez de utilizar el punto central de recepci贸n de facturas a nivel nacional. Para estos casos, Facturae-PHP dispone de la clase CustomFaceClient que permite especificar la URL del servicio con el que nos queremos comunicar.

Un ejemplo de este caso de uso es el PGEFe de la Diputaci贸n Foral de Gipuzkoa, que dispone de su web service donde implementa el WSDL de FACe:

$endpointUrl = "https://w390w.gipuzkoa.net/WAS/HACI/HFAServiciosProveedoresWEB/services/FacturaSSPPWebServiceProxyPort";
$face = new CustomFaceClient($endpointUrl, "certificado.pfx", null, "passphrase");

Listado de m茅todos

A continuaci贸n se incluyen los m茅todos de FaceClient para llamar al servicio web FACe junto a una vista previa en JSON de la respuesta que devuelven.

$face->getStatus()

Devuelve el listado de estados que puede tener una factura.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "estados": {
        "estado": [
            {
                "nombre": "Registrada",
                "codigo": "1200",
                "descripcion": "La factura ha sido registrada en el registro electr贸nico REC"
            },
            {
                "nombre": "Contabilizada la obligaci贸n reconocida",
                "codigo": "2400",
                "descripcion": "Contabilizada la obligaci贸n reconocida"
            },
            [...]
        ]
    }
}

$face->getAdministrations()

Devuelve el listado de administraciones de primer nivel registradas en la plataforma.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "administraciones": {
        "administracion": [
            {
                "codigo": "E00003301",
                "nombre": "Ministerio De Defensa"
            },
            {
                "codigo": "A01002820",
                "nombre": "Junta De Andaluc铆a"
            },
            [...]
        ]
    }
}

$face->getAdministrations(false)

Devuelve el listado completo de todas las administraciones registradas en la plataforma.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "administraciones": {
        "administracion": [
            {
                "codigo": "L01069038",
                "nombre": "Ayuntamiento De Guadiana Del Caudillo"
            },
            {
                "codigo": "L07080004",
                "nombre": "脿rea Metropolitana De Barcelona"
            },
            [...]
        ]
    }
}

$face->getUnits()

Devuelve el listado completo de unidades (centros) registradas en la plataforma.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "relaciones": {
        "relacion": [
            {
                "organoGestor": {
                    "codigo": "EA0000118",
                    "nombre": "I.d. Instituto Social De Las Fuerzas Armadas"
                },
                "unidadTramitadora": {
                    "codigo": "EA0000118",
                    "nombre": "I.d. Instituto Social De Las Fuerzas Armadas"
                },
                "oficinaContable": {
                    "codigo": "EA0000118",
                    "nombre": "I.d. Instituto Social De Las Fuerzas Armadas"
                }
            },
            [...]
        ]
    }
}

$face->getUnits(:code)

Devuelve el listado de unidades asociadas al c贸digo de la administraci贸n proporcionada.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "relaciones": {
        "relacion": [
            {
                "organoGestor": {
                    "codigo": "LA0000751",
                    "nombre": "Pleno"
                },
                "unidadTramitadora": {
                    "codigo": "LA0007418",
                    "nombre": "Secretar铆a General Del Pleno"
                },
                "oficinaContable": {
                    "codigo": "LA0008533",
                    "nombre": "I.d. En Coordinaci贸n Alcald铆a, Portavoz, Cultura Y Deportes (i. D. En Coordinaci贸n Alcald铆a, Portavoz, Cultura Y Deportes)"
                }
            },
            [...]
        ]
    }
}

$face->getNifs()

Devuelve el listado completo de todos los NIFs registrados en la plataforma junto a informaci贸n relativa.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "nifs": {
        "info": [
            {
                "organoGestor": {
                    "codigo": "P00000009",
                    "nombre": "UNIDAD DIR PRUEBAS 9"
                },
                "nif": "00000000T"
            },
            {
                "organoGestor": {
                    "codigo": "E04970101",
                    "nombre": "Agencia Espa帽ola de Consumo, Seguridad Alimentaria y Nutricion"
                },
                "nif": "Q2801255G"
            },
            [...]
        ]
    }
}

$face->getNifs(:code)

Devuelve el listado de NIFs asociados al c贸digo de la administraci贸n proporcionada.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "nifs": {
        "info": [
            {
                "organoGestor": {
                    "codigo": "LA0000751",
                    "nombre": "Pleno"
                },
                "nif": "P2807900B"
            },
            {
                "organoGestor": {
                    "codigo": "LA0000756",
                    "nombre": "脕rea de Gobierno de Econom铆a, Hacienda y Administraci贸n P煤blica"
                },
                "nif": "P2807900B"
            },
            [...]
        ]
    }
}

$face->sendInvoice(:email, :invoice, [:attachments])

Env铆a una factura a FACe junto con unos adjuntos de forma opcional. Tanto la factura como los adjuntos deben ser una instancia v谩lida de FacturaeFile.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "factura": {
        "numeroRegistro": "201800012345",
        "organoGestor": "P00000010",
        "unidadTramitadora": "P00000010",
        "oficinaContable": "P00000010",
        "identificadorEmisor": "A00000000",
        "numeroFactura": "123",
        "serieFactura": "FAC201804",
        "fechaRecepcion": "2018-06-16 11:17:30"
    }
}

$face->getInvoices(:regId)

Devuelve los datos de una factura (si se proporciona un string con su n煤mero de registro) o varias (si se proporciona un array de n煤meros de registro).

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "factura": {
        "numeroRegistro": "201800012345",
        "tramitacion": {
            "codigo": "1200",
            "descripcion": "La factura ha sido registrada en el registro electr贸nico REC",
            "motivo": {}
        },
        "anulacion": {
            "codigo": "4100",
            "descripcion": "No solicitada anulaci贸n",
            "motivo": {}
        }
    }
}

$face->cancelInvoice(:regId, :reason)

Anula una factura previamente presentada a FACe al indicar su n煤mero de registro y el motivo de la anulaci贸n.

{
    "resultado": {
        "codigo": "0",
        "descripcion": "Correcto",
        "codigoSeguimiento": {}
    },
    "factura": {
        "numeroRegistro": "201800012345",
        "mensaje": "Anulaci贸n solicitada correctamente"
    }
}