contica / facturador-electronico-cr
一款用于将哥斯达黎加的电子发票集成到PHP项目的开源发票生成器
v3.4.1
2024-05-13 22:45 UTC
Requires
- php: >=7.1
- defuse/php-encryption: ^2.2
- guzzlehttp/guzzle: ^7.4.5
- league/flysystem: ^2.0
- league/flysystem-aws-s3-v3: ^2.0
- monolog/monolog: ^1.24
- ramsey/uuid: ^4.0
- sabre/xml: ^2.1
Requires (Dev)
- phpunit/phpunit: >=5.4.3
- squizlabs/php_codesniffer: ^2.3
- dev-master
- v3.4.1
- v3.4.0
- v3.3.8
- v3.3.7
- v3.3.6
- v3.3.5
- v3.3.4
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- v3.2.1
- 3.2.0
- v3.1.1
- v3.1.0
- v3.0.10
- v3.0.9
- v3.0.8
- v3.0.7
- v3.0.6
- v3.0.5
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.21
- v2.2.20
- v2.2.19
- v2.2.18
- v2.2.17
- v2.2.16
- v2.2.15
- v2.2.14
- v2.2.13
- 2.2.12
- v2.2.11
- v2.2.10
- v2.2.9
- v2.2.8
- v2.2.7
- v2.2.6
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0
- v1.31
- v1.3.05
- v1.3.1
- v1.3.0
- v1.2.1
- dev-Developer
This package is auto-updated.
Last update: 2024-09-13 23:39:16 UTC
README
这是一个PHP组件,提供创建、发送和存储哥斯达黎加财政部要求的电子凭证的全部功能。
安装
通过Composer
composer require contica/facturador-electronico-cr
初始化
/** * Crear la conexión a la base de datos */ $db = new mysqli( 'host', 'usuario', 'contraseña', 'base_de_datos' ); /** * Inicializar la base de datos * Tambien para ejecutar migraciones después de una actualización */ Storage::runMigrations($db);
初始化组件
如果想要在数据库中加密与财政部的连接数据,可以使用以下命令创建加密密钥:
composer generateKey
或者使用以下方法:
FacturadorElectronico::crearLlaveSeguridad();
生成的值应保存在安全的地方,并在设置列表中将它提供给crypto_key
调整。
$ajustes = [ 'storage_path' => '', // ruta completa en donde guardar los comprobantes 'crypto_key' => '', // (opcional) Llave para encriptar datos de conexion 'callback_url' => '', // (opcional) URL donde se recibe el callback 'storage_type' => 'local', // 'local' o 's3' para el tipo de almacenaje 's3_client_options' => [ // ajustes opcionales si se usa almacenaje s3 'credentials' => [ 'key' => 'llave', 'secret' => 'secreto' ], 'endpoint' => 'https://us-east-1.linodeobjects.com', // (opcional) 'region' => 'region', // por ej, us-east-1 'version' => 'latest', // version ], 's3_bucket_name' => 'nombre_de_bucket' // (opcional) nombre de balde en s3 ]; /** * Esto crea el objeto que se usa para ejecturar todos los métodos disponibles */ $facturador = new FacturadorElectronico($db, $ajustes);
在组件中注册发行企业
为了处理一个发行者的凭证,首先需要注册发行者。以下方法用于注册新的发行者以及更新现有发行者。
$llave = file_get_contents('llave_criptografica.p12'); $datos_de_empresa = [ 'cedula' => '909990999', 'ambiente' => '1', // 1 prod, 2 stag 'usuario' => 'usuario_mh', 'contra' => 'contraseña_mh', 'pin' => 'pin_llave', 'llave_criptografica' => $llave ]; /** * Registrar empresa nueva * * El valor devuelto se tiene que usar para todas las * operaciones futuras sobre la empresa registrada */ $id_empresa = $facturador->guardarEmpresa($datos_de_empresa); /** * Modificar los datos de la empresa * * En $datos_de_empresa solo es necesario incluir los datos * que se están modificando */ $facturador->guardarEmpresa($datos_de_empresa, $id_empresa);
创建电子凭证
/** * Datos de ejemplo para factura electrónica * * La estructura del array debe cumplir con la estructura * establecida para los comprobantes electrónicos */ $comprobante = [ 'Clave' => '{$clave}', // Omitir nodo para que se genere automáticamente 'NumeroConsecutivo' => '00100001010000000001', 'FechaEmision' => date('c'), 'Emisor' => [ 'Nombre' => 'Emisor', 'Identificacion' => [ 'Tipo' => '01', 'Numero' => '909990999' ], 'Ubicacion' => [ 'Provincia' => '6', 'Canton' => '01', 'Distrito' => '01', 'OtrasSenas' => 'direccion' ], 'CorreoElectronico' => 'correo@gmail.com' ], 'Receptor' => [ 'Nombre' => 'Receptor', 'Identificacion' => [ 'Tipo' => '01', 'Numero' => '909990999' ], 'Ubicacion' => [ 'Provincia' => '6', 'Canton' => '01', 'Distrito' => '01', 'OtrasSenas' => 'direccion' ], 'CorreoElectronico' => 'correo@gmail.com' ], 'CondicionVenta' => '01', 'MedioPago' => ['01', '02'], 'DetalleServicio' => [ 'LineaDetalle' => [ [ 'NumeroLinea' => '1', 'Codigo' => 'codigo CABYS', 'CodigoComercial' => [ 'Tipo' => '01', 'Codigo' => '00001' ], 'Cantidad' => '1', 'UnidadMedida' => 'Unid', 'Detalle' => 'Producto sin IVA', 'PrecioUnitario' => '15000.00', 'MontoTotal' => '15000.00', 'Descuento' => [ // Incluir cuando hay descuento 'MontoDescuento' => '1000.00', 'NaturalezaDescuento' => '...' ], 'Subtotal' => '14000.00', 'MontoTotalLinea' => '14000.00' ], [ 'NumeroLinea' => '2', 'Codigo' => 'codigo CABYS', 'Codigo' => [ 'Tipo' => '04', 'Codigo' => '00002' ], 'Cantidad' => '2', 'UnidadMedida' => 'Hr', 'Detalle' => 'Servicio con IVA', 'PrecioUnitario' => '3000.00', 'MontoTotal' => '6000.00', 'Subtotal' => '6000.00', 'Impuesto' => [ 'Codigo' => '01', 'CodigoTarifa' => '08', 'Tarifa' => '13.00', 'Monto' => '780.00' ] 'MontoTotalLinea' => '6780.00' ] ] ], 'ResumenFactura' => [ 'TotalServGravados' => '6000.00', 'TotalMercanciasExentas' => '15000.00', 'TotalGravado' => '6000.00', 'TotalExento' => '15000.00', 'TotalVenta' => '21000.00', 'TotalDescuentos' => '1000.00', 'TotalVentaNeta' => '20000.00', 'TotalImpuesto' => '780.00', 'TotalComprobante' => '20780.00' ] ]; /** * Esta funcion devuelve la clave del comprobante * Necesario para futuras consultas */ $clave = $facturador->enviarComprobante( $comprobante, $id_empresa );
生成的凭证将被保存在发送队列中。要将其发送到财政部,请执行以下方法
$docs_enviados = $facturador->enviarCola(); /** * Contenido de ejemplo devuelto en $docs_enviados * * [ * [ * 'clave' => 'clave...', * 'tipo' => 'E', // E para emision, R para recepcion * ], * [...] * ] * */
查询状态
$estado = $facturador->consultarEstado( $clave, 'E', // E para emision, R para recepcion $id_empresa ); /** * Contenido de ejemplo devuelto en $estado * * [ * 'clave' => 'clave...', * 'estado' => 1, // 1 pendiente, 2 enviado, 3 aceptado, 4 rechazado * 'mensaje' => 'Mensaje Hacienda', * 'xml' => 'Contenido del xml de respuesta si existe' * ] * */
获取凭证的XML文件
需要指定所需的类型。
- 1: 凭证的XML
- 2: 类型1的响应XML
- 3: 收到的凭证的接收方XML
- 4: 类型3的响应XML(接收)
$xml = $facturador->cogerXml( $clave, 'E', // E para emision, R para recepcion 1, // El tipo $id_empresa ); /** * Convertir el xml a un array para poder procesar */ $xml_decodificado = Comprobante::analizarXML($xml);
处理财政部的回调
代码用于将财政部的POST内容传递给发票生成器。实现回调使无需始终手动查询状态成为必要。
$body = file_get_contents('php://input'); $estado = $facturador->procesarCallbackHacienda($body); /** * El contenido de $estado es idéntico a Consultar Estado más arriba. */
变更日志
请查看变更日志以获取最近更改的更多信息。
测试
composer test
安全
如果您发现与安全相关的问题,请通过josias@solucionesinduso.com发送电子邮件。
致谢
许可
MIT许可(MIT)。请参阅许可获取更多信息。