此包已弃用且不再维护。作者建议使用https://github.com/feimx/cdfi包代替。

用于生成CFDI 3.2 xml的包

dev-master 2018-03-15 05:11 UTC

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作为凭证类型,正在开发中:NominaContabilidad

$key = getcwd() . "/csds/AAD990814BP7.key.pem";
$cer = getcwd() . "/csds/AAD990814BP7.cer.pem";
$cfdi = new Cfdi(new Factura, $cer, $key);

添加数据

为了向xml添加数据,CFDI提供了一个名为add的方法,接受两个可能的参数

  • 任何扩展自CfdiData的对象的实例:ConceptosDataDomicilioFiscalDataEmisorDataGeneralDataImpuestosTrasladadosDataImpuestosRetenidosDataReceptorDataRegimenFiscalData
  • 仅对设置发票人或收件人的税务登记地址为必填项,允许的值:emisorreceptor
$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许可证