jorgeandrade / cfdi
dev-master
2018-03-15 05:11 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpspec/phpspec: ~2.0
This package is auto-updated.
Last update: 2022-02-01 12:54:47 UTC
README
此包允许您生成用于墨西哥CFDI(互联网数字发票)生成的xml。
简介
CFDI允许您生成用于墨西哥CFDI(互联网数字发票)打印过程的xml。
安装
只需使用Composer安装此包
composer require jorgeandrade/cfdi
Composer安装完包后,只需导入包并传递相应的参数来创建一个新的实例
require 'vendor/autoload.php'; use JorgeAndrade\Cfdi; use JorgeAndrade\ConceptosData; use JorgeAndrade\DomicilioFiscalData; use JorgeAndrade\EmisorData; use JorgeAndrade\Exceptions\CfdiException; use JorgeAndrade\Factura; use JorgeAndrade\GeneralData; use JorgeAndrade\ImpuestosTrasladadosData; use JorgeAndrade\ImpuestosRetenidosData; use JorgeAndrade\ReceptorData; use JorgeAndrade\RegimenFiscalData; $key = getcwd() . "/csds/AAD990814BP7.key.pem"; $cer = getcwd() . "/csds/AAD990814BP7.cer.pem"; $cfdi = new Cfdi(new Factura, $cer, $key); try { } catch (CfdiException $e) { var_dump($e->getMessage()); }
使用
创建xml非常简单。如果出现问题,函数将抛出JorgeAndrade\Exceptions\CfdiException类型的异常。
创建一个新的Cfdi实例,并传递相应的参数
- 凭证类型:发票;
new Factura - cer:pem格式的证书
- key:pem格式的私钥
目前我们只有Factura作为凭证类型,正在开发中:Nomina、Contabilidad。
$key = getcwd() . "/csds/AAD990814BP7.key.pem"; $cer = getcwd() . "/csds/AAD990814BP7.cer.pem"; $cfdi = new Cfdi(new Factura, $cer, $key);
添加数据
为了向xml添加数据,CFDI提供了一个名为add的方法,接受两个可能的参数
- 任何扩展自CfdiData的对象的实例:
ConceptosData、DomicilioFiscalData、EmisorData、GeneralData、ImpuestosTrasladadosData、ImpuestosRetenidosData、ReceptorData、RegimenFiscalData - 仅对设置发票人或收件人的税务登记地址为必填项,允许的值:
emisor和receptor
$cfdi->add( new GeneralData([ 'serie' => 'F', 'folio' => 1, 'fecha' => date("Y-m-d\TH:i:s"), 'formaDePago' => 'Pago en una sola Exhibición', 'noCertificado' => '20001000000200000293', 'subTotal' => '2000.00', 'Moneda' => 'MXN', 'total' => '2320.00', 'tipoDeComprobante' => 'ingreso', 'metodoDePago' => 'Efectivo', 'LugarExpedicion' => 'CD de Mexico', 'NumCtaPago' => 'No identificado', ]); );
保存在CfdiData对象中的信息必须是(array)类型,并且应与SAT附件20相符。
发票人
$cfdi->add( new EmisorData([ 'rfc' => 'AAD990814BP7', 'nombre' => 'John Doe del Socorro', ]) );
税收制度
$cfdi->add( new RegimenFiscalData([ 'Regimen' => 'Ley de pequeñas y medianas empresas', ]) );
收件人
$cfdi->add( new ReceptorData([ 'rfc' => 'AAD990814BP7', 'nombre' => 'Jane Doe', ]) );
税务登记地址
$tipo = 'emisor'; //'emisor' o 'receptor' $cfdi->add( new DomicilioFiscalData([ 'calle' => 'Insurgente', 'noExterior' => '600', 'colonia' => 'Centro', 'municipio' => 'CD de Mexico', 'estado' => 'Mexico', 'pais' => 'Mexico', 'codigoPostal' => '99000', ]) , 'emisor' ); $cfdi->add( new DomicilioFiscalData([ 'calle' => 'Insurgente', 'noExterior' => '600', 'colonia' => 'Centro', 'municipio' => 'CD de Mexico', 'estado' => 'Mexico', 'pais' => 'Mexico', 'codigoPostal' => '99000', ]) , 'receptor' );
概念
$cfdi->add( new ConceptosData([ 'cantidad' => '1', 'unidad' => 'NO APLICA', 'descripcion' => 'Dominio .com', 'valorUnitario' => '2000.00', 'importe' => '2000.00', ]) );
转嫁税
$cfdi->add( new ImpuestosTrasladadosData([ 'impuesto' => 'IVA', 'tasa' => '16.00', 'importe' => '320.00', ]) );
预扣税
$cfdi->add( new ImpuestosRetenidosData([ 'impuesto' => 'IVA', 'importe' => '320.00', ]) );
创建xml
要生成xml,我们将使用save方法,并传递两个参数
- $path; 必需的。保存文件的路径:
getcwd(). '/xmls/'; - 名称(可选)。XML的名称:'F1.xml'。如果没有指定名称,则根据XML的系列和页码来设定名称(如果存在),否则将使用F和随机数字:F1234123431241.xml
返回值
文件路径或错误时的false。
if ($xml = $cfdi->save($path)) { echo 'Comprobante creado en: ' . $xml; }
待办事项列表
- 凭证类型:工资单
- 凭证类型:会计
- 数据类型:补充资料
- 数据类型:补充
- 数据类型:收入
- 数据类型:扣除
- 数据类型:加班费
- 数据类型:病假
许可证
Csd开源软件项目,基于MIT许可证