Giter Site home page Giter Site logo

afipsdk / afip.php Goto Github PK

View Code? Open in Web Editor NEW
261.0 55.0 115.0 371 KB

Libreria para usar los Web Services de AFIP

Home Page: https://afipsdk.com/

License: MIT License

PHP 100.00%
afip webservice facturacion-electronica wsaa programacion php ejemplos ayuda soap cae

afip.php's Introduction

Packagist Contributors Closed issues


Logo

Afip.php

Librería para conectarse a los Web Services de AFIP
Explorar documentación »

Reportar un bug

Documentación

Explorar documentación

Acerca del proyecto

Con más de 75k descargas, desde el 2017 Afip SDK es la librería elegida por los desarrolladores para integrar sus plataformas con AFIP.

Esta librería fue creada con la intención de ayudar a los programadores a usar los Web Services de AFIP sin romperse la cabeza ni perder tiempo tratando de entender la complicada documentación que AFIP provee.

Contacto

Ivan - [email protected]

Link del proyecto: https://github.com/afipsdk/afip.php

Este software y sus desarrolladores no tienen ninguna relación con la AFIP.

afip.php's People

Contributors

afipsdk avatar alejandro-fiore avatar eesnaola avatar gonzaloalonsod avatar ivanalemunioz avatar jfromaniello avatar juan88 avatar lbonomo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

afip.php's Issues

Error al generar una factura, "(10016) El número o fecha del comprobante no se corresponde con el próximo a autorizar. Consultar metodo FECompUltimoAutorizado."

Buenas amigo, probe e instalé la libreria, con respecto a la consulta del padron funciona perfecto, tengo es inconvenientes con la factura Electronica (ElectronicaBilling) en especial con el método CreateVoucher, te detallo lo que hice:

//creé la variables para la conexion
$options = [
'CUIT' => XXXXXXXXX,
'res_folder' => '',
'ta_folder' => 'xmlgenerados',
'cert' => 'claves/XXXXXXXXX/cwcert.crt',
'key' => 'claves/XXXXXXXXX/cwkey.key',
'production' => false,
];

    $afip = new Afip($options);

    $last_voucher = $afip->ElectronicBilling->GetLastVoucher(1,6);

//este ultimo metodo funciona perfecto y me retorna el ultimo recibo.

//pruebo con los mismos datos de tu ejemplo:
$data = array(
'CantReg' => 1, // Cantidad de comprobantes a registrar
'PtoVta' => 1, // Punto de venta
'CbteTipo' => 6, // Tipo de comprobante (ver tipos disponibles)
'Concepto' => 1, // Concepto del Comprobante: (1)Productos, (2)Servicios, (3)Productos y Servicios
'DocTipo' => 99, // Tipo de documento del comprador (99 consumidor final, ver tipos disponibles)
'DocNro' => 0, // Número de documento del comprador (0 consumidor final)
'CbteDesde' => $last_voucher, // Número de comprobante o numero del primer comprobante en caso de ser mas de uno
'CbteHasta' => $last_voucher, // Número de comprobante o numero del último comprobante en caso de ser mas de uno
'CbteFch' => intval(date('Ymd')), // (Opcional) Fecha del comprobante (yyyymmdd) o fecha actual si es nulo
'ImpTotal' => 121, // Importe total del comprobante
'ImpTotConc' => 0, // Importe neto no gravado
'ImpNeto' => 100, // Importe neto gravado
'ImpOpEx' => 0, // Importe exento de IVA
'ImpIVA' => 21, //Importe total de IVA
'ImpTrib' => 0, //Importe total de tributos
'MonId' => 'PES', //Tipo de moneda usada en el comprobante (ver tipos disponibles)('PES' para pesos argentinos)
'MonCotiz' => 1, // Cotización de la moneda usada (1 para pesos argentinos)
'Iva' => array( // (Opcional) Alícuotas asociadas al comprobante
array(
'Id' => 5, // Id del tipo de IVA (5 para 21%)(ver tipos disponibles)
'BaseImp' => 100, // Base imponible
'Importe' => 21 // Importe
)
),
);

    $res = $afip->ElectronicBilling->CreateVoucher($data);
    //aqui es donde da el error:
        //"(10016) El número o fecha del comprobante no se corresponde con el próximo a autorizar. Consultar metodo FECompUltimoAutorizado."

Tengo algun error yo?

Gracias de antemano.

Consulta sobre la estructura del código

Estoy probando la librería, en particular la facturación electrónica, y veo que funciona muy bien.

Pero me surgen algunas dudas respecto de la forma en que está estructurado el código:

  • Las clases no tienen namespace, hay alguna razón por la que decidiste hacerlo de esta forma?
  • Veo que se usa include, en lugar de un autoloader. Si hay alguna razón para no usar un autoloader, al menos se podría usar include_once(), para evitar un error que se produce si se unsetean las properties de la clase.

Corrección al método CreateNextVoucher de la clase ElectronicBilling

Buenas noches, probé generar el siguiente recibo usando tu libreria usando:

$options = [
'CUIT' => XXXXXXXXXXX,
'res_folder' => 'ruta',
'ta_folder' => 'ruta/xmlgenerados',
'cert' => 'claves/XXXXXXXXXXX/cwcert.crt',
'key' => 'claves/XXXXXXXXXXX/cwkey.key',
'production' => false,
];

    $afip = new Afip($options);

    $data = array(
    	'CantReg' 	=> 1,  // Cantidad de comprobantes a registrar
    	'PtoVta' 	=> 1,  // Punto de venta
    	'CbteTipo' 	=> 6,  // Tipo de comprobante (ver tipos disponibles)
    	'Concepto' 	=> 1,  // Concepto del Comprobante: (1)Productos, (2)Servicios, (3)Productos y Servicios
    	'DocTipo' 	=> 99, // Tipo de documento del comprador (99 consumidor final, ver tipos disponibles)
    	'DocNro' 	=> 0,  // Número de documento del comprador (0 consumidor final)
    	'CbteDesde' => 1,  // Número de comprobante o numero del primer comprobante en caso de ser mas de uno
    	'CbteHasta' => 1,  // Número de comprobante o numero del último comprobante en caso de ser mas de uno
    	'CbteFch' 	=> intval(date('Ymd')), // (Opcional) Fecha del comprobante (yyyymmdd) o fecha actual si es nulo
    	'ImpTotal' 	=> 121, // Importe total del comprobante
    	'ImpTotConc' 	=> 0,   // Importe neto no gravado
    	'ImpNeto' 	=> 100, // Importe neto gravado
    	'ImpOpEx' 	=> 0,   // Importe exento de IVA
    	'ImpIVA' 	=> 21,  //Importe total de IVA
    	'ImpTrib' 	=> 0,   //Importe total de tributos
    	'MonId' 	=> 'PES', //Tipo de moneda usada en el comprobante (ver tipos disponibles)('PES' para pesos argentinos)
    	'MonCotiz' 	=> 1,     // Cotización de la moneda usada (1 para pesos argentinos)
    	'Iva' 		=> array( // (Opcional) Alícuotas asociadas al comprobante
    		array(
    			'Id' 		=> 5, // Id del tipo de IVA (5 para 21%)(ver tipos disponibles)
    			'BaseImp' 	=> 100, // Base imponible
    			'Importe' 	=> 21 // Importe
    		)
    	),
    );

    $res = $afip->ElectronicBilling->CreateNextVoucher($data);

//Da el siguiente error:
Class : ElectronicBilling lline: 134
message: "Cannot use object of type stdClass as array"

Esa linea tiene lo siguiente:
$res['voucher_number'] = $voucher_number;

Lo cambié a:
$res->voucher_number = $voucher_number;

Y funcionó perfecto, generó el CAE y los demás datos.

Espero sea de utilidad.

Saludos.

Facturas de Exportacion E . Cod 19 y 21

Hola estimados, antes que nada GRACIAS por esta librería! .

Quería consultarles si tiene implementado alguna librería para realizar facturas de Exportación tipo "E" (cód. 19) y Notas de crédito de Exportación (cód. 21).

Gracias de nuevo, y Saludos!!!

CreateVoucher fecha en formato no valido

Hola como estan? Estoy realizando unas pruebas con la librería, genero correctamente los certificados y demas, pero al generar el voucher me arroja el siguiente error:

Fatal error: Uncaught Exception: (10016) Campo CbteFch No corresponde a una fecha valida con formato YYYYMMDD in /Applications/MAMP/htdocs/fe-6/src/Afip_res/Class/ElectronicBilling.php:364 Stack trace: #0 /Applications/MAMP/htdocs/fe-6/src/Afip_res/Class/ElectronicBilling.php(308): ElectronicBilling->_CheckErrors('FECAESolicitar', Object(stdClass)) #1 /Applications/MAMP/htdocs/fe-6/src/Afip_res/Class/ElectronicBilling.php(92): ElectronicBilling->ExecuteRequest('FECAESolicitar', Array) #2 /Applications/MAMP/htdocs/fe-6/examples/CreateVoucher.php(69): ElectronicBilling->CreateVoucher(Array) #3 {main} thrown in /Applications/MAMP/htdocs/fe-6/src/Afip_res/Class/ElectronicBilling.php on line 364

Probe con los mismos certificados en un entorno con Windows y funciona perfecto. Pero en Mac OSx, me arroja error con el formato de fechas. Hice un print de la fecha que le paso al campo CbteFch y me arroja en el formato YYYYMMDD. Tambíen intente no pasarle el parametro CbteFch y tambien me arroja el mismo error. Alguna idea de cual puede ser el problema?

Los felicito por la libreria está increíble! En el futuro la migrare para Laravel y la compartiré.
Saludos y muchas gracias desde ya.

Computador no Autorizado, es necesario el pkcs12 en php?

Buenos Dias,
desarrolle la implementacion de FCE en php con xampp.

Funciono perfecto, en homologacion, en mi maquina y en la del cliente.
Pero cambie a produccion, ajustando los parametros necesarios.

hice todos los pasos segun el pdf de la Afip (WSAA.ObtenerCertificado.pdf)
Ahora bien, obtiene el TA, pero no puedo consumir ningun webservice ...
es solo por un tema de relaciones ? ( me estoy peleando con el contador) o es importante generar ese ultimo paso de generar el pkcs12 ?
Yo tenia entendido que no importa la maquina.

La aplicación corre en un windows 7/32bits...
A futuro correra en un hosting.

Gracias!
PD: Esto es mas una consulta que un issue!
PD 2: esta libreria ya deberia ser Version 1.0 !

openssl_pkcs7_sign(): error creating PKCS7 structure!

Hola veamos si alguien me puede ayudar con este problema. Generé un certificado digital para el entorno de producción tal como indica la documentación de AFIP pero estoy recibiendo el siguiente error:

Warning: openssl_pkcs7_sign(): error creating PKCS7 structure! in /var/www/tefacturo1/afip.php/src/Afip.php on line 207



Notice: Trying to get property 'token' of non-object in /var/www/tefacturo1/afip.php/src/Class/ElectronicBilling.php on line 332



Notice: Trying to get property 'sign' of non-object in /var/www/tefacturo1/afip.php/src/Class/ElectronicBilling.php on line 333



Fatal error: Uncaught Exception: (600) ValidacionDeToken: Parametro nulo o vacio (token) in /var/www/tefacturo1/afip.php/src/Class/ElectronicBilling.php:364
Stack trace:
#0 /var/www/tefacturo1/afip.php/src/Class/ElectronicBilling.php(308): ElectronicBilling->_CheckErrors('FECompUltimoAut...', Object(stdClass))
#1 /var/www/tefacturo1/afip.php/src/Class/ElectronicBilling.php(41): ElectronicBilling->ExecuteRequest('FECompUltimoAut...', Array)
#2 /var/www/tefacturo1/classes/afip_methods.php(6): ElectronicBilling->GetLastVoucher('2', '11')
#3 /var/www/tefacturo1/classes/afip_methods.php(20): Afip_methods->getLastVoucher(Object(Afip), '2', '11')
#4 /var/www/tefacturo1/controllers/registerVoucher.php(13): Afip_methods->numeroCbte(Object(Afip), 1, '2', '11')
#5 {main}
thrown in /var/www/tefacturo1/afip.php/src/Class/ElectronicBilling.php on line 364

He investigado un poco y dicen ser problema en el certificado, pero ya lo he vuelto a generar y en el Administrador de certificados digitales indica estado válido pero sigo teniendo el mismo problema.

Gracias y saludos!

lote

Hola! Primero que nada agradecer y felicitar por este excelente desarrollo! Hemos implementado facura electronica en otros proyectos, pero con este sdk es todo muy agil.

Como tiene que ser el array para solicitar CAE a dos o mas comprobantes utilizando CreateVoucher?
Tienen un ejemplo?
Muchisimas gracias!!!

Warning: SoapClient::__doRequest()

Hola estoy teniendo el siguiente error cuando quiero generar los comprobantes en homologacion es en la parte que solicita el ticket el problema, ayer funcionaba perfecto esta caido el servicio?

Warning: SoapClient::__doRequest(): SSL: Connection reset by peer in /home/.../Afip/Afip.php on line 229
SOAP Fault: HTTP Error Fetching http headers

La linea 229 es la siguiente: $results=$client->loginCms(array('in0'=>$CMS));

Si alguien me puede ayudar se lo agradeceria muchas gracias!!

Problema para realizar nota de Credito.

Hola gente, en este caso, vengo para consultar como realizan la nota de credito, ya que estoy intentando con el ejemplo y no me da.

me pueden ayudar?

gracias!

(10192) 1 - No es un comprobante

hace meses vengo generando facturas electronicas sin problema pero desde hace unos dias algunos cuits comenzaron a fallar, cuits que ya habian tenido facturas en el pasado

me da el siguiente error:

Exception in ElectronicBilling.php line 364:
(10192) 1 - No es un comprobante valido bajo el Regimen de la Ley n° 27.440

image

Este es un ejemplo de los arrays que rompe:
array:21 [▼
"CantReg" => 1
"PtoVta" => 3
"CbteTipo" => 11
"Concepto" => 2
"DocTipo" => 80
"DocNro" => 30683032227
"CbteDesde" => 1403
"CbteHasta" => 1403
"CbteFch" => 20190912
"ImpTotal" => "931569.10"
"ImpTotConc" => 0
"ImpNeto" => "931569.10"
"ImpOpEx" => 0
"ImpIVA" => 0
"ImpTrib" => 0
"FchServDesde" => "20080725"
"FchServHasta" => "30080725"
"FchVtoPago" => "20200505"
"MonId" => "PES"
"MonCotiz" => 1
0 => array:20 [▶]
]

Alguna ida de cual puede ser el problema?

Facturas de exportación - wsfexv1

Hola quería saber (ya que no lo encontré en los docs) si está implementado en el SDK la funcionalidad para trabajar con el servicio wsfexv1 para emisión de facturas de exportación, es decir, de tipo "E".

Gracias!

Error 10015

Hola Ivan, termine de probar los consumidores y cuando pase a factura A y B me saltaba el error "10015: El campo DocNro es inválido".

Lo solucione cambiando en en los wsfe1:

name="DocNro" type="s:long"
a
name="DocNro" type="s:string"

Lo dejo por si a alguno le sirve o para que le arregles.
Slds.
Gracias!

Consulta sobre IVA

Hola. Primero que nada le doy gracias a todos los contribuyentes de este proyecto.
Estoy implementando el SDK en una app web. Todo marchaba bien hasta que surgió la necesidad de discriminar los productos por el IVA, supongamos que tengo dos productos uno con iva de 21% y otro de 10.5% es posible registrar ambos productos en un mismo comprobante?.
Si omito el objeto iva arroja una excepción de que en los importes neto mayores a 0 es obligatorio el objeto iva. O cual sería la forma de poder hacer esto? si es que la hay.
Muchas Gracias!

Observaciones afip

Buenas noches, consulta.

Como puedo saber si afip observó el comprobante.? Ya que viendo la información del voucher ese campo no se encuentra.

Puede ser que esté figure solo cuando el comprobante tenga una observación.?

Saludos.

Error interno de base de datos

Me esta dando el siguiente error que no puedo resolver.

Fatal error: Uncaught Exception: (501) Error interno de base de datos: - Metodo FEParamGetTiposIvaTipo in C:\xampp\htdocs\AFIP\src\Class\ElectronicBilling.php:364 Stack trace: #0 C:\xampp\htdocs\AFIP\src\Class\ElectronicBilling.php(308): ElectronicBilling->_CheckErrors('FEParamGetTipos...', Object(stdClass)) #1 C:\xampp\htdocs\AFIP\src\Class\ElectronicBilling.php(221): ElectronicBilling->ExecuteRequest('FEParamGetTipos...') #2 C:\xampp\htdocs\AFIP\examples\propio.php(9): ElectronicBilling->GetAliquotTypes() #3 {main} thrown in C:\xampp\htdocs\AFIP\src\Class\ElectronicBilling.php on line 364

Consultar Datos Cliente

Hola! Es posible antes de facturar, hacer una consulta del cuit del cliente para saber si se le puede hacer factura A o no?
Gracias de antemano

"Use of undefined constant SOAP_1_2 - assumed 'SOAP_1_2' (this will throw an Error in a future version of PHP)"

Hola Ivan, estoy intentando utilizar el sdk en un proyecto con laravel, realice la instalacion via composer.
al momento de iniciar arroja la siguiente excepción.

"Use of undefined constant SOAP_1_2 - assumed 'SOAP_1_2' (this will throw an Error in a future version of PHP)"

la versión de php que utilizo es 7.2.3, lo estoy probando en un servidor local con windows 10.

el codigo que utilizo para iniciar la clase es :

$afip = new \Afip(array('CUIT'=>'xxxxxxxxxxx')); $server_status = $afip->ElectronicBilling->GetServerStatus();

sabrás cual es el problema?
saludos.

Soporte para CAEA Contingencia

Estoy implementando un sistema de facturación y note que hace falta un parámetro para el metodo FECAEARegInformativo cuando el punto de venta es de tipo CAEA Contingencia. Según el manual para el desarrollador de AFIP el parámetro CbteFchHsGen es obligatorio si el punto de venta es CONTINGENCIA CAEA (Código de error 1440)

En los archivos del repositorio no esta contemplado el parámetro CbteFchHsGen, para hacerlo funcionar tuve que editar los documentos WSDL y añadir el elemento XML manualmente.

SOAP Fault: HTTP Could not connect to host

Buenos dias ivanalemunioz tengo el siguiente problema al seguir todos los pasos. Ya busque en google pero no encontre solucion, puede ayudarme con esto? SOAP Fault: HTTP Could not connect to host

problema con PASSPHRASE

Al poner cada cosa en su lugar (archivos keys y toda la configuracion que lleva), me encuentro con este error:

openssl_pkcs7_sign(): error getting cert

mi servidor es local en windows 10, con soap activado y todo.

el error lo da exactamente aca: en la clase principal

//Signing TRA $STATUS = openssl_pkcs7_sign($this->TA_FOLDER."TRA-".$this->options['CUIT'].'-'.$service.".xml", $this->TA_FOLDER."TRA-".$this->options['CUIT'].'-'.$service.".tmp", "file://".$this->CERT, array("file://".$this->PRIVATEKEY, $this->PASSPHRASE), array(), !PKCS7_DETACHED );

seguro es algo del PASSPHRASE, yo lo tengo por defecto, no entiendo si tendria que pone rmi clave fiscal o que, dado que siguiendo los pasos de afip genere la privada y el cert y nunca me pidio password ni nada el cmd, y en la web de homologacion todo ok.

Consulta

Buenos días Ivan,
Antes que nada te comento que me parece genial tu aporte estoy hace un par de días tratando de comprender el funcionamiento del SOAP y como consumirlo con php, con tu aporte se me facilito bastante, quería consultarte si hay que tener de manera obligada para hacer el método testing contar con la crt y key?

Gracias.-

Web Service Constatar Comprobantes

Hola buenas tardes, tengo la intencion de implemetar el servicio de contar comporbantes, ya que en la apicacion que estoy desarrollando requiere constatar la validez de las facturas electroncas. Quisiera saber si hay alguien ya trabajando en eso. Gracias

A arreglar, long to string

Es comun que en la api para quien la utilice de error con el tema del cuit, cambiar long a string en el wsfe linea <s:element minOccurs="1" maxOccurs="1" name="Cuit" type="s:long"/>

afip.php/src/Class/ElectronicBilling.php

Linea 287:
public function FormatDate($date)
{
return date_format(DateTime::CreateFromFormat('Ymd', $date.''), 'Y-m-d');
}

Pasar de un string a un datetime y devuelta a string, creo que seria mejor devolver el valor original del web service como dice la documentacion:
CAEFchVto String(8)

Nombre incorrecto en CUIT

Buenas tardes. Estoy ejecutando este código

$taxpayer_details = $afip->RegisterScopeFive->GetTaxpayerDetails(20125778705);

Retorna bien los datos, pero el nombre del contribuyente está equivocado. De hecho, pasa con todos los CUITs que pongo. Otra cosa que sucede, es que cuando ingreso CUITs de personas fìsicas, devuelve null.

¿Qué puedo estar haciendo mal?

Muchas gracias

Manejo de errores

Hola, mi consulta es ¿como manejar los errores?. Supongamos que CreateVoucher() arroja un error por X motivo y quiero frenar la ejecución o poner una condición. Que arroja CreateVoucher() cuando no se pudo crear un comprobante?. Gracias

Problema para generar factura

Hola!

Acabo de generar un certificado y acabo de autorizarlo desde WSASS Autoservicio de Acceso a WebServices en AFIP.

La autorización la generé para wsfe - Facturación electrónica y me dijo
OK. Autorización fue creada [...]

En mi script tengo una carpeta includes y allí metí en la carpeta afip toda la aplicación descargada de Github.
Metí en el archivo key la key generada desde mi máquina y en el archivo cert el resultado que me tiró la aplicación de AFIP. No toqué los nombres originales de los archivos.

Mi problema es que no logro conectarme, ni generar nada y no entiendo porqué.

En mi script puse esto:

include $_SERVER['DOCUMENT_ROOT'].'/includes/afip/Afip.php';

$afip = new Afip(
	array(
		'CUIT' => "20123456789",
		'production' => FALSE
	)
);

$data = array(
	'CantReg' 	=> 1,  // Cantidad de comprobantes a registrar
	'PtoVta' 	=> 1,  // Punto de venta
	'CbteTipo' 	=> 6,  // Tipo de comprobante (ver tipos disponibles) 
	'Concepto' 	=> 1,  // Concepto del Comprobante: (1)Productos, (2)Servicios, (3)Productos y Servicios
	'DocTipo' 	=> 99, // Tipo de documento del comprador (99 consumidor final, ver tipos disponibles)
	'DocNro' 	=> 0,  // Número de documento del comprador (0 consumidor final)
	'CbteDesde' 	=> 1,  // Número de comprobante o numero del primer comprobante en caso de ser mas de uno
	'CbteHasta' 	=> 1,  // Número de comprobante o numero del último comprobante en caso de ser mas de uno
	'CbteFch' 	=> intval(date('Ymd')), // (Opcional) Fecha del comprobante (yyyymmdd) o fecha actual si es nulo
	'ImpTotal' 	=> 121, // Importe total del comprobante
	'ImpTotConc' 	=> 0,   // Importe neto no gravado
	'ImpNeto' 	=> 100, // Importe neto gravado
	'ImpOpEx' 	=> 0,   // Importe exento de IVA
	'ImpIVA' 	=> 21,  //Importe total de IVA
	'ImpTrib' 	=> 0,   //Importe total de tributos
	'MonId' 	=> 'PES', //Tipo de moneda usada en el comprobante (ver tipos disponibles)('PES' para pesos argentinos) 
	'MonCotiz' 	=> 1,     // Cotización de la moneda usada (1 para pesos argentinos)  
	'Iva' 		=> array( // (Opcional) Alícuotas asociadas al comprobante
		array(
			'Id' 		=> 5, // Id del tipo de IVA (5 para 21%)(ver tipos disponibles) 
			'BaseImp' 	=> 100, // Base imponible
			'Importe' 	=> 21 // Importe 
		)
	), 
);

$res = $afip->ElectronicBilling->CreateVoucher($data);

echo $res['CAE']; //CAE asignado el comprobante
echo $res['CAEFchVto']; //Fecha de vencimiento del CAE (yyyy-mm-dd)

No imprime nada, y el error log muestra:

[19-Sep-2019 18:13:55 UTC] PHP Fatal error: Uncaught Exception: Failed to open /home/public_html/includes/afip/Class/ElectronicBilling.php
in /home/public_html/includes/afip/Afip.php:249
Stack trace:
#0 /home/public_html/demo.php(45): Afip->__get('ElectronicBilli...')
#1 {main}
thrown in /home/public_html/includes/afip/Afip.php on line 249

En Afip.php la línea en cuestión que tira la excepción está aquí:

	public function __get($property)
	{
		if (in_array($property, $this->implemented_ws)) {
			if (isset($this->{$property})) {
				return $this->{$property};
			} else {
				$file = __DIR__.'/Class/'.$property.'.php';
				if (!file_exists($file)) 
					throw new Exception("Failed to open ".$file."\n", 1);

				include_once $file;

				return ($this->{$property} = new $property($this));
			}
		} else {
			return $this->{$property};
		}
	}
}

Es algo que me está faltando hacer o completar?

CÓMO GENERAR UNA SOLICITUD DE CERTIFICADO (CSR) (TEST MODE)

Para obtener el certificado CSR por primera vez para el modo de pruebas, hay que dar de alta al DN y realizar las pruebas en el servidor. Para esto hay que presentar una “solicitud de certificado” o “Certificate Signing Request” (CSR). El CSR se genera en su computadora, usando la herramienta OpenSSL (disponible para Windows, UNIX/Linux y MacOSX).

La mejor forma de obtenerlo en la primera movida, es con Linux o Mac.

Primero hay que generar una clave privada en formato PKCS10 con un mínimo de 2048 bits:

openssl genrsa -out MiClavePrivada 2048

Conserve el archivo de su clave privada en un lugar seguro.

Luego hay que generar el CSR propiamente dicho:

openssl req
-new
-key MiClavePrivada
-subj "/C=AR/O=subj_o/CN=subj_cn/serialNumber=CUIT subj_cuit"
-out MiPedidoCSR

Ejemplo (A)

Los campos se deben completar de la siguiente forma

MiClavePrivada por nombre del archivo elegido en el primer paso.

  1. subj_o por el nombre de su empresa
  2. subj_cn por el nombre de su sistema cliente
  3. subj_cuit por la CUIT (sólo los 11 dígitos, sin guiones) de la empresa o del programador (persona jurídica)

MiClavePrivada por el nombre del archivo de la clave privada generado antes
MiPedidoCSR por el nombre del archivo CSR que se va a crear
IMPORTANTE

Observar que en el serialNumber se escribe “CUIT” seguido de un espacio en blanco y a continuación los 11 dígitos de la CUIT sin separadores.

Esta linea quedaria asi:

openssl req -new -key MiClavePrivada -subj "/C=AR/O=subj_o/CN=subj_cn/serialNumber=CUIT subj_cuit" -out MiPedidoCSR

Notese que la linea esta de corrida y falta completar los datos. si se carga los datos como en el ejemplo (A) no funcionara.

Por ejemplo, para una empresa llamada EmpresaPrueba, un sistema TestSystem, la CUIT 20123456789, con el archivo MiClavePrivada generado en el punto anterior:

openssl req
-new
-key MiClavePrivada
-subj "/C=AR/O=EmpresaPrueba/CN=TestSystem/serialNumber=CUIT 20123456789"
-out MiPedidoCSR
Si no hay errores, el archivo ‘MiPedidoCSR’ será utilizado al momento de obtener el DN y el certificado. El aspecto de un archivo CSR es similar a lo siguiente:

-----BEGIN CERTIFICATE REQUEST-----
MIIClTCCAX0CAQAwUDELMAkGA1UEBhMCQVIxEjAQBgNVBAoTCVNPUE9SVEVXUzES
MBAGA1UEAxMJU09QT1JURVdTMRkwFwYDVQQFExBDVUlUIDIwMTkwMTc4MTU0MIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyu7TZTjKEdXEZPR4wIhFOw1S
...
QMNYAgJ/J2Zyy2JzxtsHzZDN1oM1SJbG9KyA5Rp02QZMMMsMWIIYKQLsoM5QAPQH
DWxkDa8dm7tBylM3u5+XT5G+w1xH4WjRHViAmUH2U+hTmaVAj7qSxsQzR/5HWoKX
cnMXsTGvi/5Y9q9kuOw6csm43z5XvxT4BBBKZn6FqWqSwUKxVuaJU8Q=
-----END CERTIFICATE REQUEST-----

No aparecio CUIT en lista de relaciones

Le desarrollé a un cliente el módulo de Factura Electrónica en PHP y en mi entorno de pruebas anda perfecto (PHP 5.6 y Soap 5.6) pero cuando lo migré al cliente que tiene PHP 5.3 primero me daba un error de SOAP (no tenía instalada la extensión), la instalé y ahora me da el error

Fatal error: Uncaught exception 'Exception' with message '(600) ValidacionDeToken: No aparecio CUIT en lista de relaciones

El cuit está bien y es el mismo del certificado, así que sospecho que es algo del PHP o del Soap, no tengo forma de actualizarlos porque forman parte de un Servidor (Clearos 5.2) que tiene el Cliente. Hay forma de evitar ese error?

Muchas gracias, excelente laburazo.

Impresion factura en PDF

Hola Ivan, excelente clase! Una consulta, conoces de alguna clase que genere el correspondiente archivo en PDF? Gracias!

Consulta Error 500

Hola, como estan?, les hago una consulta, tratando de implementar la API, siempre obtengo un error 500 y no me muestra nada mas. Evidentemente, estoy haciendo algo mal, pero no se que.
Que puedo probar?
Gracias

10016 - El número o fecha del comprobante no se corresponde con el próximo a autorizar. Consultar metodo FECompUltimoAutorizado.

Este error es uno de los más frecuentes, y suele aparecer en días en que los servidores de AFIP no funcionan correctamente. Básicamente lo que nos indica es que estamos queriendo autorizar un comprobante que no coincide con la numeración que lleva AFIP. Cabe recordar que debemos informar nuestros comprobantes en orden numérico, para cada tipo de comprobante, facturas A, facturas B, etc.

El error se muestra como este:

Fatal error: Uncaught Exception: (10016) El número o fecha del comprobante no se corresponde con el próximo a autorizar. Consultar metodo FECompUltimoAutorizado. in /Applications/XAMPP/xamppfiles/htdocs/AFIP/Class/ElectronicBilling.php:364 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/AFIP/Class/ElectronicBilling.php(308): ElectronicBilling->_CheckErrors('FECAESolicitar', Object(stdClass)) #1 /Applications/XAMPP/xamppfiles/htdocs/AFIP/Class/ElectronicBilling.php(92): ElectronicBilling->ExecuteRequest('FECAESolicitar', Array) #2 /Applications/XAMPP/xamppfiles/htdocs/AFIP/index.php(42): ElectronicBilling->CreateVoucher(Array) #3 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/AFIP/Class/ElectronicBilling.php on line 364

ruta de certificados

Buenas noches. existe la posibilidad de pasar la ruta completa de los certificados, y que esta no sea relativa a la carpeta afip_res?

estuve revisando el codigo, se que parte hay que cambiar, pero este cambio se revertirá con futuras actualizaciones?

aguardo comentarios, saludos.

Al SDK le falta una clase, la de SOAPCLIENT

Buenas, la verdad que muy bueno el trabajo que hicieron, pero intentando implemantarlo, me salta un fatalError:

Fatal error: Class 'SoapClient' not found in C:\xampp\htdocs\Trabajo\AFIP\ws\afip.php-master\src\Afip.php on line 223

revistando todos los archivos, no lo encuentro y creo que falta.... podran subirlo???
gracias

Errores en TA (Autorizaciones)

Donde te aparezca este error

Fatal error: Uncaught Exception: SOAP Fault: ns1:coe.alreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado in /Applications/XAMPP/xamppfiles/htdocs/AFIP/Afip.php:230 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/AFIP/Afip.php(171): Afip->CreateServiceTA('wsfe') #1 /Applications/XAMPP/xamppfiles/htdocs/AFIP/Class/ElectronicBilling.php(328): Afip->GetServiceTA('wsfe') #2 /Applications/XAMPP/xamppfiles/htdocs/AFIP/Class/ElectronicBilling.php(304): ElectronicBilling->GetWSInitialRequest('FEParamGetTipos...') #3 /Applications/XAMPP/xamppfiles/htdocs/AFIP/Class/ElectronicBilling.php(182): ElectronicBilling->ExecuteRequest('FEParamGetTipos...') #4 /Applications/XAMPP/xamppfiles/htdocs/AFIP/index.php(15): ElectronicBilling->GetVoucherTypes() #5 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/AFIP/Afip.php on line 230

Es porque en la carpeta AFIP_RES tenemos un archivo llamado "TA-XXXX-wsfe.xml" donde xxx es el CUIT, y esta mal grabado.

La Solucion es eliminar el archivo y reautorizar por AFIP.

Problema consultar comprobante

Hola Ivan hay un tema con el get del proximo comprobante. Me lanza el siguiente error
Fatal error: Uncaught Exception: (11002) El punto de venta no se encuentra habilitado a usar en el presente WS. Ver metodo FEParamGetPtosVenta

seguramente es una actualizacion de afip.

Directorio de cert y key fuera de la carpeta de API

Buenas! se que muchos usuarios ya preguntaron esto, pero la verdad es que en este caso lo estoy intentando ya que tengo el caso de un cliente con mas de una data fiscal. y este metodo me facilita unas cuestiones.
la idea es que tome los Cert & Key en este directorio ../../../files/private/afip/

El Codigo seria:
$afip = new Afip( array( 'CUIT' => $afipdb['cuit'], 'production' => true, 'res_folder' => '../../../files/private/afip/', 'key' => $afipdb['llave'], 'cert' => $afipdb['certificado'] ) );

Pero me da el siguiente error

Fatal error: Uncaught Exception: Failed to open ../../../files/private/afip/f27d03ca21ff28095a21ab7e29435041.cert in /home/xxx/public_html/ventas/core/source/afip.core/Afip.php:139 Stack trace: #0 /home/xxx/public_html/ventas/core/framework/notadeventa/post.afip.crearfactura.php(38): Afip->__construct(Array) #1 {main} thrown in /home/xxx/public_html/ventas/core/source/afip.core/Afip.php on line 139

Como puedo solucionarlo?

Como obtengo percepción de IIBB?

Hola buenas noches.
Gran proyecto y sumamente agradecido por tal.

Quisiera saber si a traves de este, puedo obtener aquel cliente que es agente de percepción y calcular el mismo.

Desde ya, gracias.

SQL con los ID de Comprobantes

Dejo para inyectar en Bases de dato un SQL con los nombres y ID que AFIP toma para poder identificar en el SDK el tipo de Comprobante

-- phpMyAdmin SQL Dump
-- version 4.8.3
-- https://www.phpmyadmin.net/
--
-- Servidor: localhost
-- Tiempo de generación: 01-10-2018 a las 04:39:59
-- Versión del servidor: 10.1.36-MariaDB
-- Versión de PHP: 7.2.10

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de datos: `afipdb`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `GetAliquotTypes`
--

CREATE TABLE `GetAliquotTypes` (
  `dbGetAliquotTypes` int(11) NOT NULL,
  `documento` text NOT NULL,
  `idafip` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcado de datos para la tabla `GetAliquotTypes`
--

INSERT INTO `GetAliquotTypes` (`dbGetAliquotTypes`, `documento`, `idafip`) VALUES
(1, '0%', ' 3'),
(2, '10.5%', ' 4'),
(3, '21%', ' 5'),
(4, '27%', ' 6'),
(5, '5%', ' 8'),
(6, '2.5%', ' 9');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `GetConceptTypes`
--

CREATE TABLE `GetConceptTypes` (
  `dbGetConceptTypes` int(11) NOT NULL,
  `tipo` text NOT NULL,
  `idafipconcept` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcado de datos para la tabla `GetConceptTypes`
--

INSERT INTO `GetConceptTypes` (`dbGetConceptTypes`, `tipo`, `idafipconcept`) VALUES
(1, 'Producto', ' 1'),
(2, 'Servicios', ' 2'),
(3, 'Productos y Servicios', ' 3');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `GetCurrenciesTypes`
--

CREATE TABLE `GetCurrenciesTypes` (
  `dbGetCurrenciesTypes` int(11) NOT NULL,
  `currenci` text NOT NULL,
  `idafip` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcado de datos para la tabla `GetCurrenciesTypes`
--

INSERT INTO `GetCurrenciesTypes` (`dbGetCurrenciesTypes`, `currenci`, `idafip`) VALUES
(1, 'Pesos Argentinos', ' PES'),
(2, 'Dólar Estadounidense', ' DOL'),
(3, 'Dólar Libre EEUU', ' 002'),
(4, 'Florines Holandeses', ' 007'),
(5, 'Pesos Mejicanos', ' 010'),
(6, 'Pesos Uruguayos', ' 011'),
(7, 'Coronas Danesas', ' 014'),
(8, 'Coronas Noruegas', ' 015'),
(9, 'Coronas Suecas', ' 016'),
(10, 'Dólar Canadiense', ' 018'),
(11, 'Yens', ' 019'),
(12, 'Libra Esterlina', ' 021'),
(13, 'Bolívar Venezolano', ' 023'),
(14, 'Corona Checa', ' 024'),
(15, 'Dinar Yugoslavo', ' 025'),
(16, 'Dólar Australiano', ' 026'),
(17, 'Dracma Griego', ' 027'),
(18, 'Florín (Antillas Holandesas)', ' 028'),
(19, 'Güaraní', ' 029'),
(20, 'Peso Boliviano', ' 031'),
(21, 'Peso Colombiano', ' 032'),
(22, 'Peso Chileno', ' 033'),
(23, 'Rand Sudafricano', ' 034'),
(24, 'Sucre Ecuatoriano', ' 036'),
(25, 'Dólar de Hong Kong', ' 051'),
(26, 'Dólar de Singapur', ' 052'),
(27, 'Dólar de Jamaica', ' 053'),
(28, 'Dólar de Taiwan', ' 054'),
(29, 'Quetzal Guatemalteco', ' 055'),
(30, 'Forint (Hungría)', ' 056'),
(31, 'Baht (Tailandia)', ' 057'),
(32, 'Dinar Kuwaiti', ' 059'),
(33, 'Real', ' 012'),
(34, 'Shekel (Israel)', ' 030'),
(35, 'Nuevo Sol Peruano', ' 035'),
(36, 'Euro', ' 060'),
(37, 'Lei Rumano', ' 040'),
(38, 'Peso Dominicano', ' 042'),
(39, 'Balboas Panameñas', ' 043'),
(40, 'Córdoba Nicaragüense', ' 044'),
(41, 'Dirham Marroquí', ' 045'),
(42, 'Libra Egipcia', ' 046'),
(43, 'Riyal Saudita', ' 047'),
(44, 'Zloty Polaco', ' 061'),
(45, 'Rupia Hindú', ' 062'),
(46, 'Lempira Hondureña', ' 063'),
(47, 'Yuan (Rep. Pop. China)', ' 064'),
(48, 'Franco Suizo', ' 009'),
(49, 'Derechos Especiales de Giro', ' 041'),
(50, 'Gramos de Oro Fino', ' 049');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `GetDocumentTypes`
--

CREATE TABLE `GetDocumentTypes` (
  `dbGetDocumentTypes` int(11) NOT NULL,
  `documento` text NOT NULL,
  `idafip` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcado de datos para la tabla `GetDocumentTypes`
--

INSERT INTO `GetDocumentTypes` (`dbGetDocumentTypes`, `documento`, `idafip`) VALUES
(1, 'CUIT', ' 80'),
(2, 'CUIL', ' 86'),
(3, 'CDI', ' 87'),
(4, 'LE', ' 89'),
(5, 'LC', ' 90'),
(6, 'CI Extranjera', ' 91'),
(7, 'en trámite', ' 92'),
(8, 'Acta Nacimiento', ' 93'),
(9, 'CI Bs. As. RNP', ' 95'),
(10, 'DNI', ' 96'),
(11, 'Pasaporte', ' 94'),
(12, 'CI Policía Federal', ' 0'),
(13, 'CI Buenos Aires', ' 1'),
(14, 'CI Catamarca', ' 2'),
(15, 'CI Córdoba', ' 3'),
(16, 'CI Corrientes', ' 4'),
(17, 'CI Entre Ríos', ' 5'),
(18, 'CI Jujuy', ' 6'),
(19, 'CI Mendoza', ' 7'),
(20, 'CI La Rioja', ' 8'),
(21, 'CI Salta', ' 9'),
(22, 'CI San Juan', ' 10'),
(23, 'CI San Luis', ' 11'),
(24, 'CI Santa Fe', ' 12'),
(25, 'CI Santiago del Estero', ' 13'),
(26, 'CI Tucumán', ' 14'),
(27, 'CI Chaco', ' 16'),
(28, 'CI Chubut', ' 17'),
(29, 'CI Formosa', ' 18'),
(30, 'CI Misiones', ' 19'),
(31, 'CI Neuquén', ' 20'),
(32, 'CI La Pampa', ' 21'),
(33, 'CI Río Negro', ' 22'),
(34, 'CI Santa Cruz', ' 23'),
(35, 'CI Tierra del Fuego', ' 24'),
(36, 'Doc. (Otro)', ' 99');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `GetOptionsTypes`
--

CREATE TABLE `GetOptionsTypes` (
  `dbGetOptionsTypes` int(11) NOT NULL,
  `options` text NOT NULL,
  `idafip` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcado de datos para la tabla `GetOptionsTypes`
--

INSERT INTO `GetOptionsTypes` (`dbGetOptionsTypes`, `options`, `idafip`) VALUES
(1, 'RG Empresas Promovidas - Indentificador de proyecto vinculado a Régimen de Promoción Industrial', ' 2'),
(2, 'RG Bienes Usados 3411 - Nombre y Apellido o Denominación del vendedor del bien usado.', ' 91'),
(3, 'RG Bienes Usados 3411 - Nacionalidad del vendedor del bien usado.', ' 92'),
(4, 'RG Bienes Usados 3411 - Domicilio del vendedor del bien usado.', ' 93'),
(5, 'RG 3668 Impuesto al Valor Agregado - Art.12 IVA Excepciones', ' 5'),
(6, 'RG 3668 Impuesto al Valor Agregado - Art.12 IVA Firmante Doc Tipo', ' 61'),
(7, 'RG 3668 Impuesto al Valor Agregado - Art.12 IVA Firmante Doc Nro', ' 62'),
(8, 'RG 3668 Impuesto al Valor Agregado - Art.12 IVA Carácter del Firmante', ' 7'),
(9, 'RG 3.368 Establecimientos de educación pública de gestión privada - Actividad Comprendida', ' 10'),
(10, 'RG 3.368 Establecimientos de educación pública de gestión privada - Tipo de Documento', ' 1011'),
(11, 'RG 3.368 Establecimientos de educación pública de gestión privada - Número de Documento', ' 1012'),
(12, 'RG 2.820 Operaciones económicas vinculadas con bienes inmuebles - Actividad Comprendida', ' 11'),
(13, 'RG 3.687 Locación temporaria de inmuebles con fines turísticos - Actividad Comprendida', ' 12'),
(14, 'RG 2.863 Representantes de Modelos', ' 13'),
(15, 'RG 2.863 Agencias de publicidad', ' 14'),
(16, 'RG 2.863 Personas físicas que desarrollen actividad de modelaje', ' 15');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `GetTaxTypes`
--

CREATE TABLE `GetTaxTypes` (
  `dbGetTaxTypes` int(11) NOT NULL,
  `tax` text NOT NULL,
  `idafip` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcado de datos para la tabla `GetTaxTypes`
--

INSERT INTO `GetTaxTypes` (`dbGetTaxTypes`, `tax`, `idafip`) VALUES
(1, 'Impuestos nacionales', ' 1'),
(2, 'Impuestos provinciales', ' 2'),
(3, 'Impuestos municipales', ' 3'),
(4, 'Impuestos Internos', ' 4'),
(5, 'Otro', ' 99'),
(6, 'IIBB', ' 5'),
(7, 'Percepción de IVA', ' 6'),
(8, 'Percepción de IIBB', ' 7'),
(9, 'Percepciones por Impuestos Municipales', ' 8'),
(10, 'Otras Percepciones', ' 9'),
(11, 'Percepción de IVA a no Categorizado', ' 13');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `GetVoucherTypes`
--

CREATE TABLE `GetVoucherTypes` (
  `dbGetVoucherTypes` int(11) NOT NULL,
  `comprobante` text NOT NULL,
  `idafip` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcado de datos para la tabla `GetVoucherTypes`
--

INSERT INTO `GetVoucherTypes` (`dbGetVoucherTypes`, `comprobante`, `idafip`) VALUES
(1, 'Factura A', 1),
(2, 'Nota de Débito A', 2),
(3, 'Nota de Crédito A', 3),
(4, 'Factura B', 6),
(5, 'Nota de Débito B', 7),
(6, 'Nota de Crédito B', 8),
(7, 'Recibos A', 4),
(8, 'Notas de Venta al contado A', 5),
(9, 'Recibos B', 9),
(10, 'Notas de Venta al contado B', 10),
(11, 'Liquidacion A', 63),
(12, 'Liquidacion B', 64),
(13, 'Cbtes. A del Anexo I, Apartado A,inc.f),R.G.Nro. 1415', 34),
(14, 'Cbtes. B del Anexo I,Apartado A,inc. f),R.G. Nro. 1415', 35),
(15, 'Otros comprobantes A que cumplan con R.G.Nro. 1415', 39),
(16, 'Otros comprobantes B que cumplan con R.G.Nro. 1415', 40),
(17, 'Cta de Vta y Liquido prod. A', 60),
(18, 'Cta de Vta y Liquido prod. B', 61),
(19, 'Factura C', 11),
(20, 'Nota de Débito C', 12),
(21, 'Nota de Crédito C', 13),
(22, 'Recibo C', 15),
(23, 'Comprobante de Compra de Bienes Usados a Consumidor Final', 49),
(24, 'Factura M', 51),
(25, 'Nota de Débito M', 52),
(26, 'Nota de Crédito M', 53),
(27, 'Recibo M', 54);

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `GetAliquotTypes`
--
ALTER TABLE `GetAliquotTypes`
  ADD PRIMARY KEY (`dbGetAliquotTypes`);

--
-- Indices de la tabla `GetConceptTypes`
--
ALTER TABLE `GetConceptTypes`
  ADD PRIMARY KEY (`dbGetConceptTypes`);

--
-- Indices de la tabla `GetCurrenciesTypes`
--
ALTER TABLE `GetCurrenciesTypes`
  ADD PRIMARY KEY (`dbGetCurrenciesTypes`);

--
-- Indices de la tabla `GetDocumentTypes`
--
ALTER TABLE `GetDocumentTypes`
  ADD PRIMARY KEY (`dbGetDocumentTypes`);

--
-- Indices de la tabla `GetOptionsTypes`
--
ALTER TABLE `GetOptionsTypes`
  ADD PRIMARY KEY (`dbGetOptionsTypes`);

--
-- Indices de la tabla `GetTaxTypes`
--
ALTER TABLE `GetTaxTypes`
  ADD PRIMARY KEY (`dbGetTaxTypes`);

--
-- Indices de la tabla `GetVoucherTypes`
--
ALTER TABLE `GetVoucherTypes`
  ADD PRIMARY KEY (`dbGetVoucherTypes`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `GetAliquotTypes`
--
ALTER TABLE `GetAliquotTypes`
  MODIFY `dbGetAliquotTypes` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT de la tabla `GetConceptTypes`
--
ALTER TABLE `GetConceptTypes`
  MODIFY `dbGetConceptTypes` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT de la tabla `GetCurrenciesTypes`
--
ALTER TABLE `GetCurrenciesTypes`
  MODIFY `dbGetCurrenciesTypes` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=51;

--
-- AUTO_INCREMENT de la tabla `GetDocumentTypes`
--
ALTER TABLE `GetDocumentTypes`
  MODIFY `dbGetDocumentTypes` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=37;

--
-- AUTO_INCREMENT de la tabla `GetOptionsTypes`
--
ALTER TABLE `GetOptionsTypes`
  MODIFY `dbGetOptionsTypes` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=17;

--
-- AUTO_INCREMENT de la tabla `GetTaxTypes`
--
ALTER TABLE `GetTaxTypes`
  MODIFY `dbGetTaxTypes` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;

--
-- AUTO_INCREMENT de la tabla `GetVoucherTypes`
--
ALTER TABLE `GetVoucherTypes`
  MODIFY `dbGetVoucherTypes` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=28;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

'Exception' with message '(10015)

Hola
Se me presento el siguiente error, pasando "'DocNro' =>$_GET['DocNro']," con valor 20111111112,

( ! ) Fatal error: Uncaught exception 'Exception' with message '(10015) Factura B (CbteDesde igual a CbteHasta), DocTipo: 80, DocNro 2147483647 no se encuentra registrado en los padrones de AFIP y no corresponde a una cuit pais.' in C:\utiles\wamp\www\afip\src\Class\ElectronicBilling.php on line 364

Como que en algun lugar se convierte a 2147483647, como dice el error.

Por lo pronto lo solucione cambiando en wsfe.wsdl la linea 53 x
<s:element minOccurs="1" maxOccurs="1" name="DocNro" type="s:string"/>

PDF

Buenos días. Saben si se cambio el tamaño mínimo de las facturas, hasta donde se es de una hoja a5. Yo uso jasper report para crear las mismas.

Se podría implementar algo que genere las facturas automáticamente, justo con la autorización.?

Error al hacer Facturacion Electronica de Lotes

Estoy realizando facturación electronica de lotes, aunque instacio varias veces un objeto de la clase Afip y justo al hacer la segunda, me da el siguiente error:

Cannot declare class ElectronicBilling, because the name is already in use in /.../vendor/afipsdk/afip.php/src/Class/ElectronicBilling.php on line 0

Este error sale ya que en el archivo Afip.php linea 250 hacen include de $file, esto se corrige con un require_once($file).

Lo edite en mi vendor, si desean puedo hacer el PR a una rama y lo mergean a master.

Por cierto me encanta la libreria.

Saludos.

Error

Estimados, cuando mando a procesar un testing de CreateVoucher me sale esto...
Exception: SOAP Fault: soap:Sender Server was unable to read request. ---> There is an error in XML document (2, 1406). ---> Value was either too large or too small for an Int32.

Edit:
El error surge de la funcion "public function ExecuteRequest"
El paso $results = parent::ExecuteRequest($operation, $params);

Alguien sabe porque puede ser, tengo el codigo tal cual lo baje desde aca.

Consulta - Dudas

Me gustaría saber en que se diferencian los métodos CreateVoucher y CreateNextVoucher.
Y para que es el parámetro CbteHasta ya que no funciona para emitir varios comprobantes.
Saludos y gracias.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.