PHP code example of armandolazarte / phpafipws
1. Go to this page and download the library: Download armandolazarte/phpafipws library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
armandolazarte / phpafipws example snippets
use PhpAfipWs\Authorization\GeneradorCertificados;
// 1. Generar clave privada
$clavePrivada = GeneradorCertificados::generarClavePrivada(2048, 'mi_frase_secreta');
file_put_contents('clave_privada.key', $clavePrivada);
// 2. Crear información DN
$dn = GeneradorCertificados::crearInformacionDN(
cuit: '20123456789',
nombreOrganizacion: 'Mi Empresa S.A.',
nombreComun: 'mi_empresa'
);
// 3. Generar CSR
$csr = GeneradorCertificados::generarCSR('clave_privada.key', $dn);
file_put_contents('certificado.csr', $csr);
// 4. Subir CSR a AFIP y descargar certificado
use PhpAfipWs\Afip;
$afip = new Afip([
'cuit' => 20123456789,
'modo_produccion' => false, // true para producción
'nombre_certificado' => 'certificado.crt',
'nombre_clave' => 'clave_privada.key',
'contrasena_clave' => 'tu_passphrase', // opcional
'carpeta_recursos' => __DIR__ . '/resources/',
'carpeta_ta' => __DIR__ . '/ta/',
]);
// Autorizar el próximo comprobante automáticamente
$datosFactura = [
'PtoVta' => 1,
'CbteTipo' => 1, // Factura A
'Concepto' => 1, // Productos
'DocTipo' => 80, // CUIT
'DocNro' => 33693450239,
'CbteFch' => (int) date('Ymd'),
'ImpTotal' => 121.00,
'ImpNeto' => 100.00,
'ImpIVA' => 21.00,
'MonId' => 'PES',
'MonCotiz' => 1,
'Iva' => [
[
'Id' => 5, // 21%
'BaseImp' => 100.00,
'Importe' => 21.00,
],
],
];
// El SDK calcula automáticamente el próximo número de comprobante
$respuesta = $afip->FacturacionElectronica->autorizarProximoComprobante($datosFactura);
if ($respuesta->FECAESolicitarResult->FeDetResp->FECAEDetResponse->Resultado === 'A') {
echo "¡Factura autorizada!\n";
echo "CAE: " . $respuesta->FECAESolicitarResult->FeDetResp->FECAEDetResponse->CAE . "\n";
echo "Número: " . $respuesta->FECAESolicitarResult->FeDetResp->FECAEDetResponse->CbteDesde . "\n";
}
// Obtener el último número de comprobante
$ultimoNumero = $afip->FacturacionElectronica
->obtenerUltimoNumeroComprobante($puntoDeVenta = 1, $tipoFactura = 1);
// Crear una factura con número específico
$datosFactura = [
'PtoVta' => 1,
'CbteTipo' => 1, // Factura A
'Concepto' => 1, // Productos
'DocTipo' => 80, // CUIT
'DocNro' => 33693450239,
'CbteDesde' => $ultimoNumero + 1,
'CbteHasta' => $ultimoNumero + 1,
'CbteFch' => (int) date('Ymd'),
'ImpTotal' => 121.00,
'ImpNeto' => 100.00,
'ImpIVA' => 21.00,
'MonId' => 'PES',
'MonCotiz' => 1,
'Iva' => [
[
'Id' => 5, // 21%
'BaseImp' => 100.00,
'Importe' => 21.00,
],
],
];
// Autorizar la factura
$respuesta = $afip->FacturacionElectronica->autorizarComprobante([$datosFactura]);
if ($respuesta->FECAESolicitarResult->FeDetResp->FECAEDetResponse->Resultado === 'A') {
echo "¡Factura autorizada!\n";
echo "CAE: " . $respuesta->FECAESolicitarResult->FeDetResp->FECAEDetResponse->CAE . "\n";
}
echo $afip->obtenerVersionSDK(); // Versión actual
echo $afip->obtenerCuit(); // CUIT configurado
echo $afip->esModoProduccion() ? 'Producción' : 'Homologación';
use PhpAfipWs\Authorization\GeneradorCertificados;
// Generar clave privada RSA
$clavePrivada = GeneradorCertificados::generarClavePrivada(2048, 'frase_secreta');
// Crear información DN para AFIP
$dn = GeneradorCertificados::crearInformacionDN(
cuit: '20123456789',
nombreOrganizacion: 'Mi Empresa S.A.',
nombreComun: 'mi_empresa'
);
// Generar CSR
$csr = GeneradorCertificados::generarCSR($clavePrivada, $dn);
// Extraer información de certificado
$info = GeneradorCertificados::extraerInformacionCertificado($certificadoPem);
echo "Válido hasta: " . date('Y-m-d', $info['validTo_time_t']);
// Verificar estado del servidor AFIP
$estado = $afip->FacturacionElectronica->obtenerEstadoServidor();
// Obtener último número de comprobante (método directo)
$ultimoNumero = $afip->FacturacionElectronica
->obtenerUltimoNumeroComprobante($puntoVenta = 1, $tipoComprobante = 1);
// Obtener respuesta completa del último comprobante
$ultimoComprobante = $afip->FacturacionElectronica
->obtenerUltimoComprobante($puntoVenta = 1, $tipoComprobante = 1);
// Autorizar comprobante con número específico
$respuesta = $afip->FacturacionElectronica->autorizarComprobante([$datosComprobante]);
// Autorizar próximo comprobante automáticamente (recomendado)
$respuesta = $afip->FacturacionElectronica->autorizarProximoComprobante($datosComprobante);
// Obtener tipos de comprobantes disponibles
$tiposComprobante = $afip->FacturacionElectronica->obtenerTiposComprobante();
// Obtener tipos de documentos
$tiposDocumento = $afip->FacturacionElectronica->obtenerTiposDocumento();
// Obtener tipos de monedas
$tiposMoneda = $afip->FacturacionElectronica->obtenerTiposMoneda();
// Obtener condiciones de IVA para el receptor
$condicionesIva = $afip->FacturacionElectronica->obtenerCondicionesIvaReceptor();
// Consultar datos de un CUIT
$datos = $afip->PadronAlcanceCuatro->obtenerPersona(20123456789);
$afip = new Afip([
// ... otras opciones
'carpeta_wsdl' => __DIR__ . '/wsdl_personalizados/',
]);
$afip = new Afip([
// ... otras opciones
'manejar_excepciones_soap' => true,
]);
use PhpAfipWs\Exception\AfipException;
use PhpAfipWs\Exception\AutenticacionException;
use PhpAfipWs\Exception\CertificadoException;
use PhpAfipWs\Exception\ConfiguracionException;
use PhpAfipWs\Exception\ValidacionException;
use PhpAfipWs\Exception\ArchivoException;
try {
$respuesta = $afip->FacturacionElectronica->autorizarComprobante($datos);
} catch (AutenticacionException $e) {
echo "Error de autenticación: " . $e->getMessage();
echo "Servicio: " . $e->obtenerServicio();
} catch (ConfiguracionException $e) {
echo "Error de configuración: " . $e->getMessage();
echo "Campo problemático: " . $e->obtenerCampoConfiguracion();
} catch (ValidacionException $e) {
echo "Error de validación: " . $e->getMessage();
echo "Campo: " . $e->obtenerCampo();
echo "Valor: " . $e->obtenerValor();
} catch (CertificadoException $e) {
echo "Error de certificado: " . $e->getMessage();
echo "Operación: " . $e->obtenerOperacion();
} catch (ArchivoException $e) {
echo "Error de archivo: " . $e->getMessage();
} catch (AfipException $e) {
echo "Error general: " . $e->getMessage();
echo "Código: " . $e->getCode();
echo "Tipo: " . $e->obtenerTipoError();
}
try {
$afip = new Afip($opciones);
} catch (AfipException $e) {
// Información básica
echo "Error: " . $e->getMessage() . "\n";
echo "Código: " . $e->getCode() . "\n";
// Información contextual
echo "Tipo: " . $e->obtenerTipoError() . "\n";
echo "ID: " . $e->obtenerId() . "\n";
echo "Timestamp: " . $e->obtenerMarcaTiempo()->format('Y-m-d H:i:s') . "\n";
// Contexto específico
print_r($e->obtenerContexto());
}
tests/
├── Feature/ # Tests de integración
│ ├── AfipIntegrationTest.php
│ ├── ErrorHandlingTest.php
│ └── WebServiceAccessTest.php
├── Unit/ # Tests unitarios
│ ├── Authorization/
│ ├── Enums/
│ ├── Exception/
│ └── AfipTest.php
└── TestCase.php # Helpers para testing