Fabo API 集成 - PHP

1.0.0 2023-09-18 17:42 UTC

This package is auto-updated.

Last update: 2024-09-18 19:48:49 UTC


README

为 PHP 8.0 或更高版本提供对 fabo.dev API 访问的库。

安装

安装通过 Composer 进行

composer require paperclip/fabo

使用

Paperclip\Fabo\Fabo 类的构造函数需要两个参数

  • $token,当创建 Fabo API 访问时收到的令牌。
  • $url,访问 Fabo API 的 URL,也在创建访问时收到。

实例化一个 Paperclip\Fabo\Fabo 对象后,你可以执行一个 API 命令 作为对象的方法

每个方法都必须使用每个命令所需的参数调用,使用命名参数。

异常

当 API 返回错误时,将根据错误类型生成多个异常。所有异常都扩展自 Paperclip\Fabo\ExcepciónFabo

  • Paperclip\Fabo\ExcepciónAutorización:在授权阶段发生错误时抛出的异常,例如无效的 UUID 或令牌。
  • Paperclip\Fabo\ExcepciónNegociación:在 API 协商阶段发生错误时抛出的异常,例如使用格式的 HTML 头部错误等。
  • Paperclip\Fabo\ExcepciónParámetros:在向 API 发送参数时发生错误时抛出的异常。
  • Paperclip\Fabo\ExcepciónFatal:在 API 或此库中发生未预见的错误时抛出的异常。

示例

此代码发出电子发票

<?php

use Paperclip\Fabo\{Fabo, ExcepciónFabo};

// Autocargador de Composer. Más información en https://composer.php.ac.cn/doc/01-basic-usage.md#autoloading
require __DIR__ . '/vendor/autoload.php';

// Creamos el objecto Fabo con el token y la URL proporcionada al crear el acceso
// a la API.
$fabo = new Fabo(
    '5cfccd27b2bb0f0d3fc860c7a1fb723139464cae59195a5da55af9b7b2e7b703',
    'https://api1-pruebas.fabo.dev/v1/ebcf891b-9ec9-4409-a95f-cb8c3d803b17'
);

// Parámetros para la emisión de una factura
$parámetros = [

    // Estos datos son ficticios.
    'numero_doc' => 20123456786,
    'razon_social' => 'ABC CONSULTORES S.A.C',

    // f = Factura electrónica.
    'tipo' => 'f',
    'serie' => 'F001',
    'numero' => 21,
    'fecha' => '2021-01-26',
    'hora' => '07:23',

    // r = RUC
    'tipo_doc' => 'r',

    // PEN = Soles
    'moneda' => 'PEN',
    'items' => [
        [
			// NIU = Unidad genérica de bienes
            'unidad' => 'NIU',
            'cantidad' => 1,
            'codigo' => '98765',
            'descripcion' => 'ESCUDO DE VIBRANIUM',
            'precio_unitario' => 41,
            'valor_unitario' => 34.75,
            'valor_venta' => 34.75,
            'igv' => 6.25,

            // 10 = Gravado - operación onerosa
            'afectacion_igv' => 10,
        ],
        [
            'unidad' => 'NIU',
            'cantidad' => 1,
            'codigo' => '43210',
            'descripcion' => 'LAWGIVER MK II',
            'precio_unitario' => 49,
            'valor_unitario' => 41.53,
            'valor_venta' => 41.53,
            'igv' => 7.48,
            'afectacion_igv' => 10,
        ],
        [
            'unidad' => 'NIU',
            'cantidad' => 1,
            'codigo' => 'BP001',
            'descripcion' => 'BOLSA DE PLÁSTICO GRANDE',
            'precio_unitario' => 0.2,
            'valor_unitario' => 0.17,
            'igv' => 0.04,
            'afectacion_igv' => 10,
            'icbper' => 0.4,
        ]
    ],
];

try {
    // Emitimos el comprobante
    $resultado = $fabo->emitir(...$parámetros);
} catch (ExcepciónFabo $e) {
    // Si falla, generará una excepción. Obtenemos el resultado
    echo get_class($e) . ': ' . $e->getMessage() . PHP_EOL . PHP_EOL;

    // $resultado tendrá información del error.
    $resultado = $fabo->obtenerRespuesta();

    var_dump($resultado);
    exit;
}

// En este punto, el comprobante fue recibido satisfactoriamente por la API.
// El resultado del comando 'emitir' estará en la variable $resultado.
//
// Puedes ver más información sobre las variables del resultado en la URL
// https://docs.paperclip.com.pe/api-facturación/documentación/comando-emitir/#variables-de-retorno
//
echo "Comprobante emitido." . PHP_EOL . PHP_EOL;
var_dump($resultado);

使用有效的 $token$url 运行此代码将显示类似的内容

Comprobante emitido.

array(6) {
  ["valor_resumen"]=>
  string(28) "VoIsNKv3NWBtKeg86y2OmYhcxTU="
  ["codigo_descarga"]=>
  string(40) "aea292634674c89c3a75a8b66735a50cf6dc5896"
  ["codigo_documento"]=>
  string(29) "prueba-20452370108-01-F001-21"
  ["sunat_respuesta"]=>
  int(0)
  ["sunat_descripcion"]=>
  string(43) "La Factura numero F001-21, ha sido aceptada"
  ["sunat_observaciones"]=>
  array(0) {
  }
}