Factura Electrónica Argentina en PHP
Acerca de la librería
# Neofactura
Web oficial para consultas o sugerencias: http://neofactura.neocomplexx.com/
Implementación simple para interactuar con WebService de AFIP y realizar Factura Electrónica Argentina en PHP.
Luego de emitir la factura, podés generar un pdf con nuestra segunda librería: https://github.com/neocomplexx/neopdf
Permite realizar Facturas, Notas de Crédito y Débito: A, B y C con webservice wsfev1.
Versión 1.1: Agrega Factura de exportación E con webservice wsfexv1
Versión 1.2: Agrega Consulta de personas (Padrón A5) con webservice WsSrPadronA5
Versión 1.3: Agrega Consulta de personas (Padrón A13) con webservice WsSrPadronA13
Pasos:
1. Clonar repositorio de github
2. Crear una carpeta dentro del mismo con el [cuit] de la persona autorizada en AFIP
3. Crear tres carpetas dentro de la anterior: ./[cuit]/wsfe , ./[cuit]/wsfex y ./[cuit]/ws_sr_padron_a5
4. Dentro de dichas carpetas crear dos carpetas más: ./[cuit]./[serviceName]/tmp y ./[cuit]./[serviceName]/token
5. Crear las carpetas "./key/homologacion" y "./key/produccion"
6. En ./key/homologacion y ./key/produccion colocar los certificados generados en afip junto con las claves privadas.
Test:
1. Editar el archivo test.php y modificar el valor de la variable $CUIT por el de la persona autorizada en AFIP.
2. Probar la libreria desde consola con "php test.php" -> Debería imprimir OK por cada web service.
3. Opcional: Podrás probar los distintos tipos de comprobante desde los ejemplos nombrados como testFacturaX.php
¿Más info? -> https://github.com/neocomplexx/neofactura/wiki
Última Versión Disponible
Download 1.3 - Show on Github
Description:Incorporamos consulta al Padrón A13 de personas que permite consultar por DNI
Últimas modificaciones
- Update README.md
- removemos datos
- Merge pull request #11 from aledc7/FCE Modificación de wdsl de homologación para test de Facturas de crédito …
- padronA13
- Modificación d wdsl de homologación para test de Facturas de crédito electrónico, modificacion de wsfev1 para el array de opcionales, se adjuntan dos test de FCE A 201 y Notas de credito 203
Clonar repositorio
- SSH URL
- Clone URL
79 Comments
¡Sean bienvenidos los comentarios!
Excelente librería
Muchas gracias Juan!
Hola estuve realizando algunas consultas con Mauro, por un error: “ERROR al generar la firma PKCS#7” me dice que el problema puede estar en la generación llave y me recomienda seguir los pasos detallados en https://github.com/neocomplexx/neofactura/wiki .
En el sitio indica que primero hay que generar una llave de homologación para luego generar la de producción, ¿ cual es la diferencia en la generación de dichas llaves ?. Por otro lado tengo una consulta respecto al CUIT, en mi caso el CUIT del responsable ante AFIP es el de una persona encargada y por otro lado está el CUIT de la persona jurídica que es la que emite las facturas. ¿ Hay que detallar ambos CUIT en algún lado ?
Gracias
Generé la llave en homologación y pude avanzar, ya no da el error. Da otro error: Comprobante rechazado: 10015 – El campo DocNro es invalido. cuando pruebo testFacturaA.php
El documento tenés que ingresarlo modificando el archivo testFacturaA.php. Hay comentarios que indican que campos hay que establecer para poder ejecutar el script correctamente.
Ok, gracias pude probar la generación de comprobantes en entorno de homologación. Ahora estoy viendo como generar certificado de producción en AFIP
Excelente, nos pone muy contentos que te sirva. Agradecemos compartir con otros colegas.
Hola, estoy generando en entorno de producción algunos comprobantes y tengo un problema Utilizando el concepto 2 (servicios) fijo fecha de comprobante futura. ej. genero hoy 22/04/2019 pero con fecha de comprobante 30/04/2019, y genera el comprobante con nro de CAE pero cuando quiero constatar el comprobante está registrado con fecha 22/04/2019 siendo que para el concepto 2 (servicios) permite establcer la fecha N-10 y N+10 siendo N la fecha de solicitud.
Podrían ayudarme con el tema ?
Gracias
Tengo entendido que fechas futuras no se puede, las pasadas puede que sí, siempre y cuando sea mayor a la del último comprobante generado. No hemos hechos pruebas en fechas diferentes a la actual, habría que leer la documentación o probar con el webservice de homologación. Si averiguamos algo más, te decimos.
Hola, consulta hay alguna forma de poder integrar la facturacion con woocommerce, para que se puedan facturar las compras echas por el sitio web???
Gracias
Hola Leandro,
Se puede integrar perfectamente con woocommerce, pero es algo que tendrás que implementar. La libraría te servirá como abstracción del webservice.
Hola, muy buen trabajo! Tendrias algún ejemplo de factura C? Desde ya muchas gracias!
Hola Guillermo, muchas gracias (Esperamos tu estrella en github). En el próximo commit estaremos subiendo el ejemplo de Factura C. Seguramente demore unos días. Saludos!
Guillermo, ya se encuentra en Github un nuevo release con el ejemplo de Factura C. Saludos!
Podrías decirme que parametros modificar para convertila en factura C .
Victoria, recién subimos en Github un nuevo release con el ejemplo de Factura C. Saludos!
A que se refiere con [serviceName]
Los serviceName son “wsfe” (Factura electrónica), “wsfex” (Factura electrónica de exportación) y “ws_sr_padron_a5” (Consulta al padrón de contribuyentes).
Buenos días, tendrían algún ejemplo de la impresión pdf?
Me tira un error la librería TCPDF.
GRacias
La impresión PDF es exactamente igual al formato de AFIP. ¿Te sigue dando el error? Si querés envialo por acá y vemos sí podemos ayudarte.
Muchas gracias por la respuesta. Si ya pude lograrlo.
Buenos días, tienen idea si funciona el tema de Recibos con la misma estructura que las de facturas A y B?
Saludos.
Sí, funciona perfectamente. Recibos es una funcionalidad nueva, con lo cual, agradecemos tus comentarios y aportes al respecto.
Buenos días, El tema del recibo me tira un error.
Respuesta con errores – FECAESolicitar 10016 – El numero o fecha del comprobante no se corresponde con el proximo a autorizar. Consultar metodo FECompUltimoAutorizado.
Estoy utilizando el método que allí comenta y siempre me devuelve el mismo.
Saludos.
Para ayudarte necesitamos que copies acá el request y response de la carpeta wsfe/tmp/ tanto de FECompUltimoAutorizado como de FECompUltimoAutorizado.
Buenas noches, nose que paso, no andaba eso y ahora revisando ya funcionó.
Hice lo que me pedías y revise lo que mandaba como voucher tocando allí ya hice que funcione.
Muchas gracias.
Buenas tardes, antes que hacerles la consulta quiero agradecerles por la modificación de las NC y ND E.
Tienen alguna prueba realizada para las Facturas de crédito (Código de comprobante 201 a 213)?
Muchas gracias.
Aún no hemos hecho pruebas con Facturas de crédito. Cualquier aporte es bienvenido!
Hola, lo estoy probando pero ya logré que me devuelva el Nº de comprobante, CAE y Vto en homologación. Te cuento lo que hice. Agregué opcionales en archivo wsfev1.php debajo de OTROS TIBUTOS
if (array_key_exists(“Opcionales”, $voucher) && count($voucher[“Opcionales”]) > 0) {
$comprobante->Opcionales = array();
foreach ($voucher[“Opcionales”] as $value) {
$opcional = new stdClass();
$opcional->Id = $value[“id”];
$opcional->Valor = $value[“valor”];
$comprobante->Opcionales[] = $opcional;
}
}
Dentro del archivo prueba.php agregué lo siguiente
$opcionales=Array();
$opcionales[0]=array(‘id’ => 2101,’valor’ => “2850590940090418135201”); //CBU
$regcomp[‘Opcionales’] = $opcionales;
Hay diferente tipos de datos opcionales, en este caso envié el CBU y un Nº de CBU
$opcionales[0]=array(‘id’ => 2102,’valor’ => “aliasctabanco”); //Alias
El CUIT de destino debe estar en la lista de grandes empresas y el importe debe superar el minimo. De todas formas estas alertas las infomra la AFIP.
Espero que te sirva. Saludos.
Hola, estoy teniendo problemas con Facturas de Credito MiPyME me da el siguiente error: Comprobante rechazado: 10162 – Si el comprobante es MiPyMEs (FCE) es obligatorio informar opcionales. Ver metodo FEParamGetTiposOpcional(). ¿ Alguien puede ayudarme ?
Muchas Gracias
Ariel, no hemos probado nunca Facturas de Crédito ya que es algo nuevo. Cualquier aporte es bienvenido!
Hola estimados, tengo un aporte para hacer, he realizado las modificaciones en “wsfev1” y he realizado los scripts de prueba para comprobantes FCE 201 y 203 .
Los tengo funcionando en producción, avisenme si puedo subir este código de alguna manera.
Saludos.
Podes hacer un pull request en github!
Hola estimados ya realicé el pull request!
espero esté todo en orden, ya que es mi primera vez. En caso de que haya algún error agradecería un feedback
Gracias y saludos
En breve lo revisaremos y anexamos al código
Hola Ariel, lo estoy probando pero ya logré que me devuelva el Nº de comprobante, CAE y Vto en homologación. Te cuento lo que hice. Agregué opcionales en archivo wsfev1.php debajo de OTROS TIBUTOS
if (array_key_exists(“Opcionales”, $voucher) && count($voucher[“Opcionales”]) > 0) {
$comprobante->Opcionales = array();
foreach ($voucher[“Opcionales”] as $value) {
$opcional = new stdClass();
$opcional->Id = $value[“id”];
$opcional->Valor = $value[“valor”];
$comprobante->Opcionales[] = $opcional;
}
}
Dentro del archivo prueba.php agregué lo siguiente
$opcionales=Array();
$opcionales[0]=array(‘id’ => 2101,’valor’ => “2850590940090418135201”); //CBU
$regcomp[‘Opcionales’] = $opcionales;
Hay diferente tipos de datos opcionales, en este caso envié el CBU y un Nº de CBU
$opcionales[0]=array(‘id’ => 2102,’valor’ => “aliasctabanco”); //Alias
El CUIT de destino debe estar en la lista de grandes empresas y el importe debe superar el minimo. De todas formas estas alertas las infomra la AFIP.
Espero que te sirva. Saludos.
Hola colega, gracias a tu comentario he logrado implementar facturas de crédito electronica (201) y Notas de crédito electrónica (203).
Quisiera saber cuál es la mejor forma de compartir dicho código con esta comunidad , para así hacer un aporte? Saludos
Yo no pude todavía generar Nota de Credito Electronica; estoy modificando los PHP pero no hay caso todavía. Alguna ayuda?
Matías, Nota de Crédito electrónica fue incorporada por pull request de otro usuario, particularmente no la hemos utilizado. El problema lo tenes con ese tipo de comprobante solamente no?
tengo este error
———-Script de prueba de AFIP WSFEV1———-
Warning: file_put_contents(C:\xampp\htdocs\neofactura-master/20219067012/wsfe/tmp/functions.txt): failed to open stream: No such file or directory in C:\xampp\htdocs\neofactura-master\wsafip.php on line 121
Warning: file_put_contents(C:\xampp\htdocs\neofactura-master/20219067012/wsfe/tmp/types.txt): failed to open stream: No such file or directory in C:\xampp\htdocs\neofactura-master\wsafip.php on line 122
Warning: SimpleXMLElement::asXML(C:\xampp\htdocs\neofactura-master/20219067012/wsfe/token/TRA.xml): failed to open stream: No such file or directory in C:\xampp\htdocs\neofactura-master\wsaa.php on line 91
Warning: openssl_pkcs7_sign(): error getting cert in C:\xampp\htdocs\neofactura-master\wsaa.php on line 108
Falló la ejecución: ERROR al generar la firma PKCS#7————–Ejecución WSFEV1 finalizada—————–
Adrian,
¿Has creado las carpetas que figuran en los pasos de github: https://github.com/neocomplexx/neofactura ? Si lo hiciste, entonces veo que tu problema puede ser porque estas corriendo el proyecto en windows y las ubicaciones tienen las barras invertidas, solo tenés que cambiarlas: “C:\xampp\htdocs\neofactura-master/20219067012/wsfe/tmp/types.txt” por “C:\xampp\htdocs\neofactura-master\20219067012\wsfe\tmp\types.txt”
$infilename = $this->base_dir . “/” . $this->cuit . ‘/’ . $this->service . “/token/TRA.xml”;
$outfilename = $this->base_dir . “/” . $this->cuit . ‘/’ . $this->service . “/TRA.tmp”;
hola supongo que te referis a estas barras cuando las cambio me da error
saludos muy amable por responder
el test.php me dio ok sin problemas
cuando pruebo testfacturac.php me da error
-Script de prueba de AFIP WSFEV1———-
Warning: openssl_pkcs7_sign(): error getting cert in C:\xampp\htdocs\neofactura-master\wsaa.php on line 101
Falló la ejecución: ERROR al generar la firma PKCS#7————–Ejecución WSFEV1 finalizada—————–
hola
me lo toma como comentario
Buenos días. Tengo una duda, cuando se emitan comprobantes en producción, el cliente va a poder ver las facturas como lo hace hoy sin un sistema de gestión? Me refiero a si desde la afip voy a poder ver las facturas emitidas.
Saludos
No se pueden ver desde AFIP, los comprobantes los podes consultar por el mismo webservice.
Estuve tratando de utilizar el método consultarComprobante luego de emitir un comprobante, y me trae los datos vacíos.
No hay problemas reportados con ese método. Si necesitas ayuda envíanos el Request y Response.
hola tengo problemas con las barras // para windos me da error
alguien que ayude gracias
Hola, realice los pasos para la implementacion y todo salio correcto, en modo produccion, recibo el CAE y Fecha Vencimiento CAE y el numero de comprobante. lo unico extraño es que al probar los datos en el validador online de afip, los comprobantes me salen invalidos. he verificado la funcion ultimocomprobanteautorizado y esta devielve corectamente los numeros entregados. podrias ayudarme con este problema?
Hola Leandro. A nosotros nos los verifica correctamente. ¿Estas ingresando acá: https://serviciosweb.afip.gob.ar/genericos/comprobantes/cae.aspx ?
A partir del 1/11/2019 hay que informar la fecha de pago para las factyras E de exportación. Para ello agregar una línea en el wsfexv1.php
$params->Cmp->Fecha_pago = $voucher[“fechaPago”];
despues de Opcionales. Además actualicé el archivo wsfexv1.wsdl
Espero que les sirva.
Saludos.
Buenas, estuve probando el fix de NC E y no me queda claro el “numeroComprobante” => 1, hay que saberlo e informarlo de antemano o este lo devuelve la AFIP como en los otros casos. Por que lo que devuelve es un 111, 112, etc de acuerdo si le cambio el Nº de comprobante. Gracias. Saludos.
Al igual que con los otros casos, debes informarle el siguiente numero de comprobante. Eso puedes hacerlo con esta funcion:
““
$ultimocomp = $afip->consultarUltimoComprobanteAutorizado(4,21);
““
y luego al último comprobante le sumas 1.
cualquier cosa si necesitas tengo un script de pruebas completo funcionanto. Saludos
Buenas, estoy probando las NC E y devuelve el CAE pero cuando hago la consulta de ese comprbante, no existe.
———-Script de prueba de AFIP WSFEXV1———- Array ( [cae] => 68463006176066 [fechaVencimientoCAE] => 20181113 ) Falló la ejecución: Respuesta con errores – FEXGetCMP1020 – Comprobante inexistente————–Ejecución WSFEV1 finalizada—————–
try {
$afip = new Wsfexv1($CUIT,$MODO);
$result = $afip->emitirComprobante($voucher);
print_r($result);
$result2 = $afip->consultarComprobante(3,21,1);
print_r($result2);
} catch (Exception $e) {
echo ‘Falló la ejecución: ‘ . $e->getMessage();
}
Si te ocurre en ambiente de homologación, es normal.
buenas tardes, tengo el siguiente error al ejecutar el testFacturaC.php:
———-Script de prueba de AFIP WSFEV1———-
Warning: openssl_pkcs7_sign(): error getting private key in /home/juanmatias81/public/SSF/default/app/libs/neofactura/wsaa.php on line 110
Falló la ejecución: ERROR al generar la firma PKCS#7————–Ejecución WSFEV1 finalizada—————-
ya cree los certificados, sin ningun problema, tanto los de homologacion como los de produccion…
no se que puede ser… en la carpeta CUIT/wsfe/token se crea el TRA.xml, no asi el TRA.tmp, no se si esto tendra algo que ver…..
gracias
Hola Juan lograste resolver el problema yo tengo el mismo no logro hacer funcionar aun el codigo para obtener un CAE realice todos los pasos que muestran en git y las recomendaciones de los comentarios estaria muy agradecido
Me pasa lo mismo, ejecuto test y funciona, pero al ejecutar testFacturaC.php me pasa lo mismo que a uds:
———-Script de prueba de AFIP WSFEV1———- Falló la ejecución: ERROR al generar la firma PKCS#7————–Ejecución WSFEV1 finalizada—————–
siento que hay algo que la gente de AFIP ha cambiado y que ahora es necesario actualizar en las librerías, porque descargué otro paquete de librerías y mis certs funcionan, pero me había gustado este..
Hola, para los que tienen problemas con la clave (me pasaba lo mismo) fijense primero que nada (si tienen el webserver en linux) los permisos de carpetas y archivos.
en mi caso no tenia permisos para crear el archivo tra.tmp, lo que devolvia el error generico.
logre generar el cae en homologacion con la factura c casi sin inconvenientes.
estoy investigando como generar las facturas para enviarle a los clientes.
entiendo que no puedo acceder a la afip y levantarla de ahi a mano, si uso el webservice para generar la factura propiamente dicha?? muchas gracias por la implementacion, esta excelente
Podes usar la librería “NeoPDF ” también de neo complexx, en la que podes generar el PDF con todos los datos correctos.
Te paso el link:
https://github.com/neocomplexx/neopdf
Saludos
Que tal gente! Primero que nada gracias por el tremendo servicio que prestan!
Tengo un problema hace horas con el:
Warning: openssl_pkcs7_sign(): error getting private key in …
Falló la ejecución: ERROR al generar la firma PKCS#7
No puedo pasar de ahí, estoy con xampp en linux, generé los crt y key varias veces y sigo sin poder pasar la firma,,, alguien que me ayude por favor? Muchas gracias de antemano
muy buena libreria, funciona todo perfecto, les hago una consulta, existe alguna funcion que permita consultar los datos de un CUIT, esto seria de gran utilidad al momento de validar los datos en el momento de la carga del cliente. es algo similar a lo que tiene AFIP en su sitio para comprobantes en linea. muchas gracias
Gracias! Para eso tenes que usar el servicio: wssrpadrona5.php
muchas gracias, eso requiere alguna habilitacion en afip?
Leandro, tenés que habilitarte los webservices que vas a utilizar y el administrador de claves de homologación para poder autenticarte.
Excelente!! Haces soporte ???
Para soporte personalizado, deberías ponerte en contacto en neocomplexx.com.
Hola, buenos días. Estoy intentando generar una NC-FCE-A y no puedo generarlo, tengo un error que me dice lo siguiente:
———-Script de prueba de AFIP WSFEV1———-
——————– NOTA DE CREDITO FCE A ——————-
Falló la ejecución: Comprobante rechazado: 10154 – PtoVta:2 – Tipo:201 – Nro:4 – OK- Comprobante electronico autorizado, NO rechazado por el Comprador.————–Ejecución WSFEV1 finalizada—————–
Pero no aclara cual es el error. Alguna idea?
Buenas ! muchas gracias por tu trabajo y la generosidad de compartirlo! a los que no nos damos maña aun para lograrlo es de gran ayuda. Te hago una consulta, al intentar consultar un DNI o CUIT me da cualquier cosa… direcciones con numeros distintos , nombres y apellidos cambiados, las bases de la AFIP devuelven informacion erronea o estoy usando mal la libreria ? (basicamente : $afip = new WsSrPadronA13($CUIT,$MODO); $result = $afip->getPersonaByDocumento(“XXXXXXXX”); ) gracias !!! saludos !
La consulta de personas te recomiendo probarla directamente en producción ya que no existe ningún tipo de riesgo por ser un GET.
Impecable ! si, en produccion envia los datos correctos. Muy rebuscada la afip para que la cosa funcione, por si le sirve a alguien hay que generar el certificado, crear la relacion para factura electronica Y la relacion para la consulta del padron por separado ! , estuve 3hs tratando de entender por que no funcionaba. Muchas gracias Neo !
De nada! que bueno que te sirva la librería! Si queres armar un instructivo de los pasos que tuviste que hacer podemos incluir acá en el blog. Le va a servir a mucha gente!
Si tengo el numero de CUIT del empresa emisora de la factura, numero de CUIT del cliente, tipo de comprobante, punto de venta y numero de factura. ¿Es posible chequear que todos los datos pertenecen a una misma factura?
Podes solicitar a AFIP con el número de factura que te envíe los datos y controlar con esa respuesta el resto de los campos.
Hola! muy buena la libreria te felicito, no pensaste hacer una version para NODEJS?
Excelente trabajo, todo funcionando. te hago una consulta. existe ejemplo de nota de credito A y B?. entiendo que se debe especificar el numero de comprobante. muchas gracias
Hola buen día, estoy intentando generar una NCE 203 (mipyme) y me arroja el siguiente error: Falló la ejecución: Comprobante rechazado: 10151 – Si el tipo de comprobante que esta autorizando es MiPyMEs (FCE) del tipo Debito o Credito, el campo CbtesAsoc.Cuit debe informarlo.
Verifico los parámetros y CbtesAsoc.Cuit tiene el valor correcto.
No se si pueden ayudarme con este tema que me tiene parado desde hace mucho tiempo.
Gracias
Buenas, el padrón A5 fue reemplazado por ws_sr_constancia_inscripcion
y dejó de funcionar para nuevos certificados.
A alguien más le pasó? Alguna pista?