Download the PHP package jpcandioti/php-ws-afip without Composer

On this page you can find all versions of the php package jpcandioti/php-ws-afip. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?
jpcandioti/php-ws-afip
Rate from 1 - 5
Rated 5.00 based on 1 reviews

Informations about the package php-ws-afip

phpWsAfip

Librería para la gestión de WebServices de la Agencia Federal de Ingresos Públicos (AFIP - Organismo de hacienda de Argentina).

phpWsAfip es una pequeña librería que permite que cualquier sistema en PHP pueda conectarse a los servicios de AFIP.

Características

Instalación

$ composer require jpcandioti/php-ws-afip

Creación de un certificado

Para la creación de un certificado que nos permita operar en la plataforma de WebService de AFIP se precisa de una Clave privada y un Certificate Signing Request (CSR). Desde phpWsAfip es posible crear ambas cosas.

Para conocer más puede acceder al siguiente documento de AFIP: Generación de Certificados para Producción

Para crear un certificado de Testing/Homologación puede acceder al siguiente documento de AFIP: WSASS: Cómo adherirse al servicio

Generación de una Clave privada

Es importante conservar la Clave privada en un lugar seguro.

Ejemplo

use phpWsAfip\WS\WSASS;

$private_key = WSASS::generatePrivateKey();

echo $private_key;

Generación de una Clave privada con Frase secreta

Para conservar la seguridad de las claves generadas, nunca deberían almacenarse junto a su frase secreta. Un ejemplo de uso podría ser no almacenar frases secretas, y que cada usuario la ingrese cada vez que se necesite firmar.

Ejemplo

use phpWsAfip\WS\WSASS;

$bits = 4096;
$passphrase = 'Una frase secreta';
$private_key = WSASS::generatePrivateKey($bits, $passphrase);

echo $private_key;

Generación de un CSR

Para solicitar el certificado a AFIP es necesario generar un CSR.

Ejemplo

use phpWsAfip\WS\WSASS;

$key_file = 'example.key';

// Distinguished Name (DN) para el Certificate Signing Request (CSR).
// Los siguientes datos son de ejemplo y no concuerdan con una persona real.
$dn = array(
    'countryName'           => 'AR',
    'stateOrProvinceName'   => 'Santa Fe',
    'localityName'          => 'Rosario',
    'organizationName'      => 'Juan Gutiérrez',
    'commonName'            => 'jgutierrez',
    'serialNumber'          => 'CUIT 20260795326'
);

$csr = WSASS::generateCsr($key_file, $dn);

echo $csr;

Manejo de sesiones

Para poder operar en un WebService de Negocio (WSN) es necesario solicitar un Ticket de Acceso (TA).

Para conocer más puede acceder al siguiente documento de AFIP: Especificación Técnica del WebService de Autenticación y Autorización

Solicitar un TA

Ejemplo

use phpWsAfip\WS\WSAA;

// Nombre y ubicación de las credenciales.
$alias      = 'jgutierrez';
$key_file   = 'file://credentials/' . $alias . '.key';
$crt_file   = 'file://credentials/' . $alias . '.pem';

// Configuración del servicio WSAA.
$config = [
    'testing'           => true,                    // Utiliza el servicio de homologación.
    'wsdl_cache_file'   => 'tmp/wsaahomo_wsdl.xml', // Define la ubicación del caché WSDL.
    'tra_tpl_file'      => 'tmp/tra_%s.xml'         // Define la ubicación de los archivos temporarios con el TRA.
];

$wsaa = new WSAA('wsfe', $crt_file, $key_file, $config);

// Si el TA se generó con éxito...
if ($ta = $wsaa->requestTa()) {
    // Se visualiza los datos del encabezado.
    print_r($ta->header);

    // Guardar el XML en una variable. Luego puede almacenarse en una base de datos.
    //$xml = $ta->asXml();
    //echo $xml;

    // Guardar el TA en un archivo.
    $ta->asXml('tmp/ta.xml');
}

WebService de Negocio (WSN)

La librería cuenta con la clase phpWsAfip/WS/WSN.php que sirve cómo base para todos los servicios que precisan gestionar un TA.

Por el momento el único WSN implementado es el WebService de Facturación Electrónica (WSFE).

Si precisa utilizar otro de los WebServices de AFIP, puede implementarlo Ud mismo utilizando cómo ejemplo la clase phpWsAfip/WS/WSFE.php. Luego puede compartirla agregándola al proyecto a través de un Pull Request, para que otros puedan aprovecharlo.

WebService de Facturación Electrónica (WSFE)

Para operar en el servicio WSFEv1 se debe contar con un TA activo.

Una vez instanciado pueden ejecutarse todos los métodos definidos en la documentación oficial (WSFEv1: Manual para el desarrollador V.2.10), pasando todos los parámetros dentro de un arreglo. El siguiente ejemplo ejecuta los métodos FECompUltimoAutorizado y FECAESolicitar.

Ejemplo

use phpWsAfip\WS\WSFE;

$ta_file = 'tmp/ta.xml';

// Configuración del servicio WSFE.
$config = [
    'testing'           => true,                    // Utiliza el servicio de homologación.
    'wsdl_cache_file'   => 'tmp/wsfehomo_wsdl.xml', // Define la ubicación del caché WSDL.
];

$wsfe = new WSFE($config);

// Se precisa un TA.
if (file_exists($ta_file)) {
    $wsfe->setXmlTa(file_get_contents($ta_file));

    // Consulta el número del último comprobante y le sumo 1.
    $pto_vta = array(
        'PtoVta'    => 1,
        'CbteTipo'  => 6    // 6 Factura B
    );
    $result = $wsfe->FECompUltimoAutorizado($pto_vta);
    $cbte_nro = $result->FECompUltimoAutorizadoResult->CbteNro + 1;

    $today = date('Ymd');

    // Factura B por $302,50.
    $invoice = array(
        'FeCAEReq' => array(
            'FeCabReq' => array(
                'CantReg'      => 1,
                'CbteTipo'     => 6,                    // 6 Factura B
                'PtoVta'       => 1,
            ),
            'FeDetReq' => array(
                'FECAEDetRequest' => array(
                    'Concepto'     => 2,                // 2 Servicios.
                    'DocTipo'      => 96,               // 96 DNI.
                    'DocNro'       => 32472807,
                    'CbteDesde'    => $cbte_nro,
                    'CbteHasta'    => $cbte_nro,
                    'CbteFch'      => $today,
                    'ImpTotal'     => 302.5,
                    'ImpTotConc'   => 0,
                    'ImpNeto'      => 250,
                    'ImpOpEx'      => 0,
                    'ImpIVA'       => 52.5,
                    'ImpTrib'      => 0,
                    'FchServDesde' => $today,
                    'FchServHasta' => $today,
                    'FchVtoPago'   => $today,
                    'MonId'        => 'PES',
                    'MonCotiz'     => 1,
                    'Iva'          => array(
                        'AlicIva' => array(
                            'Id'        => 5,
                            'BaseImp'   => 250,
                            'Importe'   => 52.5
                        )
                    )
                )
            )
        )
    );

    // Se visualiza el resultado con el CAE correspondiente al comprobante.
    $result = $wsfe->FECAESolicitar($invoice);
    print_r($result);
}

Utilización de la caché de SoapClient

phpWsAfip implementa un caché WSDL propio sobre un archivo. Si desea utilizar el caché de SoapClient puede hacerlo, tanto en WSAA como en cualquier WSN.

Ejemplo

use phpWsAfip\WS\WSFE;

// Configuración de SoapClient.
$soap_options = array(
    'cache_wsdl'=> WSDL_CACHE_DISK
);

// Configuración del servicio WSFE.
$config = [
    'wsdl_cache_file'   => null,
    'soap_options'      => $soap_options
];

$wsfe = new WSFE($config);

Documentación del código

Documentación de PHP-Markdown-Documentation-Generator.

Desarrollo y Testing

Para armar el entorno de desarrollo deben seguirse los siguientes pasos:

$ git clone https://github.com/jpcandioti/php-ws-afip.git
$ cd php-ws-afip
$ composer install

Para correr los test es necesario tener un certificado de homologación con su respectiva Clave privada.

Los mismos deben estar almacenados en el directorio credentials bajo el nombre indicado en la variable de entorno _TESTALIAS, y las extensiones .key, .csr, .pem.

Ejemplo

$ TEST_ALIAS=jgutierrez phpunit phpWsAfip

Licencia

phpWsAfip está licenciado bajo Apache License Version 2.0

Copyright 2018 Juan Pablo Candioti

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Colaboración

Puede aportar al desarrollador del proyecto en la siguiente billetera Bitcoin:

qrcode-bitcoin-address

132r6sUhqz44gfXAj5EpWxH2pWB59HbWKY


All versions of php-ws-afip with dependencies

PHP Build Version
Package Version
Requires phpseclib/phpseclib Version ~2.0
php Version >=5.6
ext-soap Version *
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package jpcandioti/php-ws-afip contains the following files

Loading the files please wait ....