Introducción

¿Cómo se puede realizar la Facturación Electrónica?

1) Comprobantes en línea.
2) Web services de negocio.

¿Qué es un Web Service de Negocio y quienes pueden utilizarlo?

Ente Externo (EE) Persona o empresa que desee utilizar Web Service de Negocio.

Cliente de Ente Externo (CEE) Cliente de Webservice. Habitualmente un software que se conecta a al Web Service de Negocio.

Webservice de Negocio de la AFIP (WSN) Herramienta utilizada para el intercambio de información entre AFIP y los EE en forma directa sin intervención de operadores.
Existen muchos WSN, un ejemplo es el Web Service de Facturación Electrónica (WSFE)

AFIP proporciona dos entornos para uso del WSN: 1) Testing u homologación, y 2) Producción

Certificados Digitales

Para acceder a los WSN se necesita un Certificado Digital o Certificado Electrónico.
Para definir un Certificado Digital se necesita un CSR.
Para definir un CSR se necesita una PK y un DN.

Distinguished Name (DN)

Un DN, sirve como identificación única de una entidad.
A continuación se define un DN utilizando los siguientes datos:

  1. Nombre de la empresa = Supersistemas SRL
  2. Cuit de la empresa o del programador = 20-12345678-9
  3. Nombre de la aplicación = Supersistema Negriazul
  4. País = Argentina
DN = "/C=AR/O=Supersistemas SRL/CN=Supersistema Negriazul/serialNumber=CUIT 20123456789"
Definir Solicitud de Certificado Digital (Certificate Signing Request – CSR)

Tanto para el ambiente de testing u homologación como para el ambiente de producción, necesitamos un CSR; utilizar un CSR diferente para cada ambiente.

Para generar el CSR se utiliza el sistema RSA y librerías OpenSSL
RSA Sistema criptográfico de clave pública
OpenSSL Proyecto de software libre que implementa protocolos de seguridad y criptografía.

En forma sintética, el procedimiento de generación de CSR es:

1) Generar una clave privada (será llamada también firma electrónica) utilizando RSA, de longitud 2048 bits, utilizando el algoritmo sha1

2) Generar CSR utilizando la clave privada del paso 1 y el DN.

Ejemplo: Terminal linux o windows (forma que enseñan en AFIP)

openssl genrsa -out pk.key 2048 #generar clave privada y almacenarla en archivo pk

openssl req -new -key pk.key -subj "/C=AR/O=Supersistemas SRL/CN=Supersistema Negriazul/serialNumber=CUIT 20123456789" -out csr.crt
 #generar CSR y almacenarlo en el archivo csr.crt
Extensión “.crt” y backup de los archivos generados

Conviene almacenar los CSR y posteriormente los certificados con extensión “.crt”, el SO proporciona una interfaz amigable para visualizar este tipo de extensión. Se podrá visualizar entre otras cosas el DN del CSR y del certificado digital.

Hacer backup de los archivos generados y de la clave privada, porque serán vueltos a utilizar!!!

Generar Certificados en el Ambiente de Homologación (Testing)

Introducción

Para definir un Certificado Digital en el ambiente de homologación, se dispone de una servicio AFIP denominado “WSASS – Autogestión Certificados Homologación”.

Sea R el representante de la empresa E, en homologación se trabaja con los datos de R, el DN debe definirse con el CUIT de R.

Activar servicio WSASS
  1. Configurar el navegador para permitir ventanas emergentes en el sitio de AFIP
  2. Ingresar al sitio de www.afip.gob.ar autenticándose con clave fiscal (mínimo nivel 2)
  3. Ingresar a “Administrador de Relaciones de Clave Fiscal”. Actuar en representación de sí mismo.
  4. Seleccionar opción “Adherir Servicio”
  5. Buscar servicio: Servicios interactivos -> WSASS – Autogestión Certificados Homologación
  6. Cerrar la sesión y acceder nuevamente, ya tendremos habilitado el servicio.
  7. En caso de no visualizar el servicio en la lista, debe aceptar la relación utilizando el servicio “Aceptación de Designación”.
Definición del Certificado Digital (este paso es muy fácil, se entiende mejor directamente jugando con el WSASS)

Para obtener el certificado, distinguimos dos casos según si el DN ya fue dado de alta (DN existente) o si aún no existe. Según sea el caso, se debe completar alguno de los formularios on line:

Introducción -> Acceso a formulario para obtener el certificado por primera vez: Si nunca se generó un certificado, se debe seleccionar esta opción. Se solicitará un nombre simbólico para identificar al DN que puede ser por ejemplo el nombre de la empresa.
Para saber si se generó un certificado previamente o no, acceder a la opción siguiente, si existe un DN en el select HTML, significa que ya se generó un certificado previamente.

Introducción -> Formulario para obtener otro certificado adicional (para un DN existente):Si ya generó un certificado, se debe seleccionar esta opción. Se deberá seleccionar el DN existente que será identificado con un alias.

Una vez completo el formulario se definirá un string con el certificado digital que deberá copiarse y almacenarse con extensión “.crt”. Por ejemplo “cert.crt”.

Gestión de acceso a servicios (este paso es muy fácil, se entiende mejor directamente jugando con el WSASS)

Una vez generado el DN y obtenido el certificado, se puede solicitar autorización de acceso a los servicios de AFIP:

Crear autorización de Servicio -> En el formulario completar:

* Alias del DN del CSR (se selecciona a través de un select html)
* CUIT representado (cuit de R)
* CUIT de quien genera la autorización (cuit de R)
* Servicio: wsfe - facturación electrónica

Una vez creado, se muestra la siguiente leyenda:

 
OK. Autorización fue creada (CUITCOMPUTADOR=20123456789, ALIASCOMPUTADOR=miempresa, CUITREPRESENTADO=20123456789, SERVICIO=ws://wsfe, CUITAUTORIZANTE=20123456789).

Se denomina Computador Fiscal al certificado digital delegado a un determinado servicio.

Una vez completo este ultimo pasó, tendremos los siguientes archivos: cert.crt y pk.key, los cuales serán utilizados para acceder al WSFE

Generar Certificado Digital (Producción)

Introducción

Para definir un Certificado Digital en el ambiente de producción, se dispone de una servicio AFIP denominado “Administrador de Certificados Digitales”

Sea R el representante de la empresa E, en producción se trabaja con los datos de E, el DN debe definirse con el CUIT de E.

Activar servicio Administrador de Certificados Digitales
  1. Configurar el navegador para permitir ventanas emergentes en el sitio de AFIP
  2. Ingresar al sitio de www.afip.gob.ar autenticándose con clave fiscal (mínimo nivel 3)
  3. Ingresar a “Administrador de Relaciones de Clave Fiscal”. Actuar en representación de la empresa.
  4. Seleccionar opción “Adherir Servicio”
  5. Buscar servicio: Servicios interactivos -> Administración de Certificados Digitales
  6. Cerrar la sesión y acceder nuevamente, ya tendremos habilitado el servicio.
  7. En caso de no visualizar el servicio en la lista, debe aceptar la relación utilizando el servicio “Aceptación de Designación”.
Generación de Certificado digital
  1. Configurar el navegador para permitir ventanas emergentes en el sitio de AFIP.
  2. Ingresar al sitio de www.afip.gob.ar autenticándose con clave fiscal. (nivel 3)
  3. Acceso a “Administración de Certificados Digitales” (opcional: seleccionar la empresa representada, solo si se tiene más de una empresa delegada)
  4. Para solicitar un nuevo certificado digital, deberá presionar el botón “Agregar Alias”. Se proporciona un formulario donde se indica el CUIT de la empresa (que es la que solicita el certificado), un campo para completar el alias (que es un string que identifica al certificado) y un campo para subir el CSR. Como alias puede colocar el string que usted desee, por ejemplo “facturacion” o “wsfe”. Por cada host se debe definir un certificado.

Los certificados emitidos por AFIP tienen una vigencia de 2 años. Una vez vencido, deberá repetir el proceso utilizando el mismo alias pero con nuevos CSR y PK. Se sugiere verificar la fecha de vigencia del certificado emitido para planificar su renovación con
anticipación.

Generar Computador Fiscal: Asociar alias a WSN

Se denomina Computador Fiscal al certificado digital delegado a un determinado servicio.

  1. Configurar el navegador para permitir ventanas emergentes en el sitio de AFIP
  2. Ingresar al sitio de www.afip.gob.ar autenticándose con clave fiscal (nivel 3)
  3. Seleccionar el servicio “Administrador de Relaciones de Clave Fiscal”
  4. Seleccionar “Nueva Relación”
  5. Buscar y seleccionar el WSN deseado, por ejemplo “Facturación Electrónica”
  6. Buscar y seleccionar el representante: Debe seleccionar el nombre del alias que utilizó cuando generó el certificado digital
  7. CONFIRMAR
Punto de venta electrónico

Para facturar electrónicamente se debe definir un punto de venta electrónico

En testing u homologación no hace falta definir un punto de venta electrónico, se puede utilizar cualquier número que será aceptado.

En producción el punto de venta electrónico se da de alta a través del sitio de la AFIP ingresando con cuit y clave, accediendo al servicio de “Administración de puntos de venta y domicilios”.

El servicio debe ser adherido de forma similar a los anteriores, luego debe seguir los siguientes pasos:

Acceso al servicio “Administración de puntos de venta y domicilios”
Seleccionar empresa
Agregar:
* Numero (que no se encuentre definido)
* Nombre de fantasía (un string con el valor deseado por ejemplo “mi empresa wsfe”
* Sistema: RECE para aplicativo y webservices
* Domicilio: Domicilio correspondiente al host

Configuración del WebService de Facturación Electrónica de AFIP

Introducción

Para acceder a WSFE se necesitan, por cada HOST las siguientes constantes:
* Punto de venta //exclusivo de cada HOST
* Certificado //exclusivo de cada HOST
* Clave privada //exclusivo de cada HOST
* CUIL de la empresa
* WSDL del WSFE
* WSDL del WSAA
* Path al archivo del TRA
* Path al archivo del TA

Para acceder a WSFE se necesita un TOKEN y un SIGN
El TOKEN y el SIGN se extraen del TA
Ejemplo PHP
define("CUIT",  231234567890); //testing
//define("CUIT",  301234567890); //produccion

define("CERT" , $_SERVER["DOCUMENT_ROOT"] . "/" . PATH_SYS . "/lib/afip/config/test/cert.crt");     //certificado testing
//define("CERT" , $_SERVER["DOCUMENT_ROOT"] . "/" . PATH_SYS . "/lib/afip/config/prod/cert.crt");     //certificado produccion

define("PRIVATEKEY" , $_SERVER["DOCUMENT_ROOT"] . "/" . PATH_SYS . "/lib/afip/config/test/pk.key"); //clave privada testing
//define("PRIVATEKEY" , $_SERVER["DOCUMENT_ROOT"] . "/" . PATH_SYS . "/lib/afip/config/prod/pk.key"); //clave privada produccion
define("PASSPHRASE" , ""); //frase asociada a la clave privada

define("WSAA", "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?wsdl"); //wsdl wsaa testing
//define("WSAA", "https://wsaa.afip.gov.ar/ws/services/LoginCms?wsdl"); //wsdl wsaa prod

define("WSFE_WSDL", "https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL"); //wsdl wsfe testing
//define("WSFE_WSDL", "https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL"); //wsdl wsfe produccion

//***** INDENTIFICACION DE ARCHIVOS GENERADOS *****
define("WSFE_TRA", $_SERVER["DOCUMENT_ROOT"] . "/" . PATH_SYS . "/lib/afip/files/TRA_wsfe_test.xml"); //wsfe tra testing
//define("WSFE_TRA", $_SERVER["DOCUMENT_ROOT"] . "/" . PATH_SYS . "/lib/afip/files/TRA_wsfe.xml"); //wsfe tra produccion
define("WSFE_TA", $_SERVER["DOCUMENT_ROOT"] . "/" . PATH_SYS . "/lib/afip/files/TA_wsfe_test.xml"); //wsdl wsfe testing
//define("WSFE_TA", $_SERVER["DOCUMENT_ROOT"] . "/" . PATH_SYS . "/lib/afip/files/TA_wsfe.xml"); //wsdl wsfe produccion

//***** CONSTANTES DEL WSFE (FACTURACION ELECTRONICA) *****
define("WSFE_PUNTOVENTA", 4); //punto de venta RECE

Delegar servicio

Si tiene problemas para definir el ambiente de producción, puede delegar los servicios a un tercero:

Información Adicional

Sea R, E, T (tercero)
Acceso con R: Administrador de Relaciones de Clave Fiscal – Nueva Relación – Buscar servicios WSASS – Seleccionar Representante Cuit de T – Confirmar

Comprobantes en línea

Para los comprobantes en línea simplemente se debe acceder con clave fiscal en la web de la AFIP y acceder al servicio “Comprobantes en línea”. Los detalles se encuentran especificados en el siguiente enlace http://www.afip.gov.ar/genericos/guiaDeTramites/guia/documentos/PasoaPasoServiciosCF.pdf o en el documento acceso_comprobantes_linea_monotributistas.pdf.

Generar CSR a través de PHP
$config = array( 
    "digest_alg" => "sha1", 
    "private_key_bits" => 4096, 
    "private_key_type" => OPENSSL_KEYTYPE_RSA, 
); 
 
// Create the private and public key 
$res = openssl_pkey_new($config); 

// Extract the private key from $res to $privKey 
openssl_pkey_export($res, $privKey); 

$dn = array( 
    "countryName" => "AR", 
    "organizationName" => "Supersistemas SRL", 
    "commonName" => "Supersistema Negriazul", 
    "serialNumber" => "CUIT 20123456789" 
); 

// Generate a certificate signing request 
$csr = openssl_csr_new($dn, $privkey); 

openssl_csr_export($csr, $csrout) and var_dump($csrout); 

Comandos adicionales PHP interesantes
// You will usually want to create a self-signed certificate at this 
// point until your CA fulfills your request. 
// This creates a self-signed cert that is valid for 365 days 
$sscert = openssl_csr_sign($csr, null, $privkey, 365); 

// Now you will want to preserve your private key, CSR and self-signed 
// cert so that they can be installed into your web server, mail server 
// or mail client (depending on the intended use of the certificate). 
// This example shows how to get those things into variables, but you 
// can also store them directly into files. 
// Typically, you will send the CSR on to your CA who will then issue 
// you with the "real" certificate. 
openssl_csr_export($csr, $csrout) and var_dump($csrout); 
openssl_x509_export($sscert, $certout) and var_dump($certout); 
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout); 

// Show any errors that occurred here 
while (($e = openssl_error_string()) !== false) { 
    echo $e . "\n"; 
}
Detalle del DN
"countryName" (c) DEBE representar el país en el cual está constituida la Persona Jurídica, codificado según el estándar [ISO3166].
"stateOrProvinceName"
"localityName"
"organizationName" (o) DEBE coincidir con el nombre de la Persona Jurídica Pública o Privada.
"organizationalUnitName" (ou)
"commonName" (cn) DEBE corresponder al nombre del servicio o aplicación (ej. Sistema de Consulta) o al nombre de la unidad operativa responsable del servicio (ej. Gerencia de Compras)
"emailAddress"
"serialNumber" DEBE contener el número de identificación de la Persona Jurídica Pública o Privada, expresado como texto y respetando el siguiente formato y codificación: "CUIT numero_de_cuit" (ej: “CUIT 20123456780”)
Formato pkcs 12

Según la tecnología que elija utilizar para llevar a cabo el desarrollo puede llegar a necesitar el certificado en formato pkcs12 (certificado x509 + clave privada). Por ejemplo, con el cliente en .NET contribuido. Para generarlo debe ejecutar desde la línea de comando:

openssl pkcs12 -export -inkey privada -in certificado.crt -out alias.p12
Error windows “La contraseña de red especificada no es válida”

En algunos equipos Windows al invocar al WSAA para obtener su ticket de acceso puede llegar a obtener el siguiente mensaje de error: “La contraseña de red especificada no es válida”.

Este error tiene que ver con el problema de que Windows parece no entender que el pkcs#12 generado con openssl no tiene password. La solución es importar el certificado al repositorio de Windows (Control panel/Internet Options/Contents/Certificates). Luego volver a exportarlo (hasta la versión 7 de Internet Explorer no es obligatorio ponerle password). Tener en cuenta que debe tildar la opción “Marcar esta clave como exportable”.

Detalle de los certificados digitales

Los Certificados Digitales emitidos por la AFIP están basados en el estándar X.509v3

X.509 es un estándar para infraestructuras de claves públicas (Public Key Infrastructure o PKI). Los formatos de codificación más comunes utilizados en el estándar X.509 son DER (Distinguish Encoding Rules) o PEM (Privacy Enhanced Mail).

Opciones del WSASS
A continuación se listan las opciones provistas por el WSASS, todas ellas pueden ser accedidas a través del menú:
* Formulario para obtener el certificado por primera vez: https://wsass-homo.afip.gob.ar/wsass/portal/Autoservicio/crearcomputador.aspx
* Formulario para obtener otro certificado adicional (para un DN existente): https://wsass-homo.afip.gob.ar/wsass/portal/Autoservicio/crearcomputador.aspx
* Ver los certificados emitidos para una CUIT: https://wsass-homo.afip.gob.ar/wsass/portal/Autoservicio/certificadosdecuit.aspx 
* Formulario para eliminar un DN y su certificado: https://wsass-homo.afip.gob.ar/wsass/portal/Autoservicio/eliminarcomputador.aspx
* Ver el catálogo de servicios disponibles: https://wsass-homo.afip.gob.ar/wsass/portal/Autoservicio/servicios.aspx
* Formulario de autorización de acceso a servicio: https://wsass-homo.afip.gob.ar/wsass/portal/Autoservicio/crearautorizacion.aspx
* Ver autorizaciones a servicios: https://wsass-homo.afip.gob.ar/wsass/portal/Autoservicio/autorizacionesdecuit.aspx

Fuente

Enlaces

Página Principal
Paso a paso servicios
X.509 (wikipedia)
OpenSSL (wikipedia)
OpenSSL (oficial)
RSA (wikipedia)
PHP OPENSSL create private key
PHP OPENSSL create CSR

OpenSSL

Si tiene acceso a un servidor Unix/Linux, seguramente, ya lo tiene instalado. Si sólo tiene acceso a equipos Windows, puede bajar openSSL de:
http://www.slproweb.com/products/Win32OpenSSL.html
http://www.openssl.org

Contacto

Para consultas de programadores usando el Entorno de Testing: Enviar su consulta directamente desde la aplicación WSASS (Autoservicio de Acceso a WebServices en Homologación), menú: “Contáctenos”. Alternativamente enviar un correo electrónico a webservices-desa@afip.gob.ar
Para consultas del Entorno de Producción: Enviar un correo electrónico a sri@afip.gob.ar
En caso de tener otras dudas genéricas acerca de la información de este micrositio, comunicarse accediendo a www.afip.gob.ar/consultas