Skip to content

Commit

Permalink
Commit inicial
Browse files Browse the repository at this point in the history
  • Loading branch information
leip1493 committed Oct 10, 2019
0 parents commit ea117ee
Show file tree
Hide file tree
Showing 7 changed files with 491 additions and 0 deletions.
118 changes: 118 additions & 0 deletions FacturaParser.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
<?php require_once 'XmlParser.php' ?>
<?php

class FacturaParser extends XmlParser{
public function __construct(DOMDocument $dom)
{
parent::__construct($dom);
}
//////////////////
// INFO FACTURA //
//////////////////
public function getInfoFactura(){
$infoFacturaContent = [
'fechaEmision', 'dirEstablecimiento',
'contribuyenteEspecial', 'obligadoContabilidad',
'tipoIdentificacionComprador', 'razonSocialComprador',
'identificacionComprador', 'totalSinImpuestos',
'totalSubsidio', 'totalDescuento',
'propina', 'importeTotal',
'moneda', 'placa',
'totalConImpuestos', 'pagos'
];
$infoFactura = $this->getNode($this->dom, 'infoFactura', 0);
$infoFacturaData = [];
foreach ($infoFacturaContent as $content) {
$infoFacturaData[$content] = $this->getNodeData($infoFactura, $content, 0);
}
$infoFacturaData['totalConImpuestos'] = $this->getInfoFacturaImpuestos();
$infoFacturaData['pagos'] = $this->getInfoFacturaPagos();
return $infoFacturaData;
}

//////////////
// DETALLES //
//////////////
public function getDetalles(){
$detalles = $this->getNode($this->dom, 'detalles', 0);
$detalle = $this->getNodes($this->dom, 'detalle');
$detalleHeaders = [
'codigoPrincipal', 'descripcion', 'cantidad', 'precioUnitario', 'precioSinSubsidio', 'descuento', 'precioTotalSinImpuesto',
'impuestos'
];
$detallesContent = [];
foreach ($detalle as $index => $d) {
$rowDetalle = [];
foreach ($detalleHeaders as $header) {
$rowDetalle[$header] = $this->getNodeData($d, $header, 0);
}
$rowDetalle['impuestos'] = $this->getDetallesImpuestos($index);
$detallesContent[$index] = $rowDetalle;
}
return $detallesContent;
}


////////////////////////////////////////
// INFO FACTURA - TOTAL CON IMPUESTOS //
////////////////////////////////////////
private function getInfoFacturaImpuestos(){
$totalConImpuestos = $this->getNode($this->dom, 'totalConImpuestos', 0);
$totalImpuestos = $this->getNodes($this->dom, 'totalImpuesto');
$totalImpuestoHeaders = [
'codigo', 'codigoPorcentaje', 'baseImponible', 'valor'
];
$totalImpuestoContent = [];
foreach ($totalImpuestos as $index => $totalImpuesto) {
$rowImpuesto = [];
foreach ($totalImpuestoHeaders as $header) {
$rowImpuesto[$header] = $this->getNodeData($totalImpuesto, $header, 0);
}
$totalImpuestoContent[$index] = $rowImpuesto;
}

return $totalImpuestoContent;
}

//////////////////////////
// INFO FACTURA - PAGOS //
//////////////////////////
private function getInfoFacturaPagos(){
$pagos = $this->getNode($this->dom, 'pagos', 0);
$pago = $this->getNodes($this->dom, 'pago');
$pagoHeaders = [
'formaPago', 'total', 'plazo', 'unidadTiempo'
];
$pagosContent = [];
foreach ($pago as $index => $p) {
$rowPago = [];
foreach ($pagoHeaders as $header) {
$rowPago[$header] = $this->getNodeData($p, $header, 0);
}
$pagosContent[$index] = $rowPago;
}

return $pagosContent;
}

//////////////////////////
// DETALLES - IMPUESTOS //
//////////////////////////
private function getDetallesImpuestos($position){
$impuestos = $this->getNode($this->dom, 'impuestos', $position);
$impuesto = $this->getNodes($this->dom, 'impuesto');
$impuestoHeaders = [
'codigo', 'codigoPorcentaje', 'tarifa', 'baseImponible', 'valor'
];
$impuestoContent = [];
foreach ($impuesto as $index => $i) {
$rowImpuesto = [];
foreach ($impuestoHeaders as $header) {
$rowImpuesto[$header] = $this->getNodeData($i, $header, 0);
}
$impuestoContent[$index] = $rowImpuesto;
}
return $impuestoContent;
}

}
32 changes: 32 additions & 0 deletions NotaCreditoParser.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php require_once 'XmlParser.php' ?>
<?php

class NotaCreditoParser extends XmlParser{
public function __construct(DOMDocument $dom)
{
parent::__construct($dom);
}

public function getInfoNotaCredito(){
$infoFacturaContent = [
'fechaEmision', 'dirEstablecimiento',
'tipoIdentificacionComprador', 'razonSocialComprador',
'identificacionComprador', 'contribuyenteEspecial',
'obligadoContabilidad', 'codDocModificado',
'numDocModificado', 'fechaEmisionDocSustento',
'totalSinImpuestos', 'valorModificacion',
'moneda', 'motivo',
'totalConImpuestos'
];
$infoFactura = $this->getNode($this->dom, 'infoNotaCredito', 0);
$infoFacturaData = [];
foreach ($infoFacturaContent as $content) {
$infoFacturaData[$content] = $this->getNodeData($infoFactura, $content, 0);
}
// $infoFacturaData['totalConImpuestos'] = getInfoFacturaImpuestos();
// $infoFacturaData['pagos'] = getInfoFacturaPagos();
return $infoFacturaData;
}


}
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# SRI Factura
## Script que obtiene datos del Web Service SRI de Ecuador.
39 changes: 39 additions & 0 deletions XmlParser.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

class XmlParser{

protected $dom;

public function __construct(DOMDocument $dom){
$this->dom = $dom;
}

/////////////////////
// INFO TRIBUTARIA //
/////////////////////
public function getInfoTributaria(){
$infoTributariaContent = [
'ambiente', 'tipoEmision', 'razonSocial', 'nombreComercial', 'ruc', 'claveAcceso', 'codDoc', 'estab', 'ptoEmi', 'secuencial', 'dirMatriz'
];
$infoTributaria = $this->getNode($this->dom, 'infoTributaria', 0);
$infoTributariaData = [];
foreach ($infoTributariaContent as $content) {
$infoTributariaData[$content] = $this->getNodeData($infoTributaria, $content, 0);
}
return $infoTributariaData;
}

protected function getNodes($parent, $child){
return $parent->getElementsByTagName($child);
}

protected function getNode($parent, $child, $position){
return $this->getNodes($parent,$child)->item($position);
}

protected function getNodeData($parent, $child, $position){
$node = $this->getNode($parent,$child, $position);
return $node ? $node->nodeValue: "";
}

}
164 changes: 164 additions & 0 deletions descarga.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:autorizacionComprobanteResponse xmlns:ns2="http://ec.gob.sri.ws.autorizacion"><RespuestaAutorizacionComprobante><claveAccesoConsultada>0809201901099133185900120230150009498921357246816</claveAccesoConsultada><numeroComprobantes>1</numeroComprobantes><autorizaciones><autorizacion><estado>AUTORIZADO</estado><numeroAutorizacion>0809201901099133185900120230150009498921357246816</numeroAutorizacion><fechaAutorizacion>2019-09-08T02:06:00-05:00</fechaAutorizacion><ambiente>PRODUCCIÓN</ambiente><comprobante><factura xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" id="comprobante" version="2.1.0">
<infoTributaria>
<ambiente>2</ambiente>
<tipoEmision>1</tipoEmision>
<razonSocial>ATIMASA S.A.</razonSocial>
<nombreComercial>ATIMASA S.A.</nombreComercial>
<ruc>0991331859001</ruc>
<claveAcceso>0809201901099133185900120230150009498921357246816</claveAcceso>
<codDoc>01</codDoc>
<estab>023</estab>
<ptoEmi>015</ptoEmi>
<secuencial>000949892</secuencial>
<dirMatriz>AV. DE LAS AMERICAS 406-GUAYAQUIL</dirMatriz>
</infoTributaria>
<infoFactura>
<fechaEmision>08/09/2019</fechaEmision>
<dirEstablecimiento>VIA PUERTO MARITIMO KM 6-GUAYAQUIL</dirEstablecimiento>
<contribuyenteEspecial>01477</contribuyenteEspecial>
<obligadoContabilidad>SI</obligadoContabilidad>
<tipoIdentificacionComprador>04</tipoIdentificacionComprador>
<razonSocialComprador>AMAGUAYO PILLAJO ROBERTO JOSE</razonSocialComprador>
<identificacionComprador>0602775405001</identificacionComprador>
<totalSinImpuestos>3.30</totalSinImpuestos>
<totalSubsidio>1.10</totalSubsidio>
<totalDescuento>0.00</totalDescuento>
<totalConImpuestos>
<totalImpuesto>
<codigo>2</codigo>
<codigoPorcentaje>0</codigoPorcentaje>
<baseImponible>0.00</baseImponible>
<valor>0</valor>
</totalImpuesto>
<totalImpuesto>
<codigo>2</codigo>
<codigoPorcentaje>2</codigoPorcentaje>
<baseImponible>3.30</baseImponible>
<valor>0.40</valor>
</totalImpuesto>
</totalConImpuestos>
<propina>0.00</propina>
<importeTotal>3.70</importeTotal>
<moneda>DOLAR</moneda>
<placa>POL0034</placa>
<pagos>
<pago>
<formaPago>01</formaPago>
<total>3.70</total>
<plazo>0</plazo>
<unidadTiempo>DIAS</unidadTiempo>
</pago>
</pagos>
</infoFactura>
<detalles>
<detalle>
<codigoPrincipal>0174</codigoPrincipal>
<descripcion>EXTRA CON ETANOL</descripcion>
<cantidad>2.000</cantidad>
<precioUnitario>1.652</precioUnitario>
<precioSinSubsidio>2.202</precioSinSubsidio>
<descuento>0.00</descuento>
<precioTotalSinImpuesto>3.30</precioTotalSinImpuesto>
<impuestos>
<impuesto>
<codigo>2</codigo>
<codigoPorcentaje>2</codigoPorcentaje>
<tarifa>12.00</tarifa>
<baseImponible>3.30</baseImponible>
<valor>0.40</valor>
</impuesto>
</impuestos>
</detalle>
</detalles>
<infoAdicional>
<campoAdicional nombre="PLACA">POL0034</campoAdicional>
</infoAdicional>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:etsi="http://uri.etsi.org/01903/v1.3.2#" Id="Signature771997">
<ds:SignedInfo Id="Signature-SignedInfo423680">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></ds:SignatureMethod>
<ds:Reference Id="SignedPropertiesID517685" Type="http://uri.etsi.org/01903#SignedProperties" URI="#Signature771997-SignedProperties700418">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
<ds:DigestValue>n5E9JGBZWgC8hA+qZjX1j5E/ydU=</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#Certificate1122384">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
<ds:DigestValue>eXoa5wy+66egnw/Mg6h1RrXgeZA=</ds:DigestValue>
</ds:Reference>
<ds:Reference Id="Reference-ID-226382" URI="#comprobante">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
<ds:DigestValue>N+UeFiVJLhwZ6b2Od9lEo9+icIQ=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue Id="SignatureValue700154">
f+QmCiW58HZPlNjNkS2hdiZj9CfDtH+7ey+tpg8QyBgpTRFqaRvBMz3QwIvI8aIDSehkrxPEUhgI
PYEqLhhuUkZQSJcae4VnTTROLXtj7pr7zXFanIjg7SqdTP/pZl7YyGTqFFwiu9wwk8zXx0cd8pQM
5rf3OXx0yVcNGasS1y2sxv0mJ+1SHnIH6YKvaUQXRvwFapZS9lAZQ7/Q1DfarfmKpJ4uyhEee7Z6
26aP05Vg6CwaHW4swvoFADlreVq5kFIPL8yp2RGheNUzWsojWJkIevSc4x/RuOrSFYw6rLGXTv7m
zFiXajxi0d9JIRkJOGThLHupLYkJ4ClNaiztQw==
</ds:SignatureValue>
<ds:KeyInfo Id="Certificate1122384">
<ds:X509Data>
<ds:X509Certificate>
MIIJaDCCB1CgAwIBAgIEWlv3EjANBgkqhkiG9w0BAQsFADCBoTELMAkGA1UEBhMCRUMxIjAgBgNV
BAoTGUJBTkNPIENFTlRSQUwgREVMIEVDVUFET1IxNzA1BgNVBAsTLkVOVElEQUQgREUgQ0VSVElG
SUNBQ0lPTiBERSBJTkZPUk1BQ0lPTi1FQ0lCQ0UxDjAMBgNVBAcTBVFVSVRPMSUwIwYDVQQDExxB
QyBCQU5DTyBDRU5UUkFMIERFTCBFQ1VBRE9SMB4XDTE4MDUzMTE0MTE0M1oXDTIwMDUzMTE0NDE0
M1owgbExCzAJBgNVBAYTAkVDMSIwIAYDVQQKExlCQU5DTyBDRU5UUkFMIERFTCBFQ1VBRE9SMTcw
NQYDVQQLEy5FTlRJREFEIERFIENFUlRJRklDQUNJT04gREUgSU5GT1JNQUNJT04tRUNJQkNFMQ4w
DAYDVQQHEwVRVUlUTzE1MBEGA1UEBRMKMDAwMDE2MDcxNTAgBgNVBAMTGVBFRFJPIERJTUFTIFZJ
WlVFVEEgUFJBRE8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCSPdxxiNdbtjuvb5AV
Ix0bRGBjTelaueO0v5UXfdG1RVOCLLiYSSkWjVO1D+DhE5zPLk+PTiv22YKEa0JmPlHOxAMhb/Nb
t+SjBh/Sw+YO6l3YufCQMGG8kNw+A3V1OoEbvkQxoxEemoeyQMzqVk/g9Za4YJ/zxZgvxsj1odFT
VGJd49XU0f9NqOPFRq64o19bFGmNqNgzsv3JHms8wWqy22V0+UEqnHhwNAd+JJMVs0Cr9FuFwSnE
7zvmbO/VI9zCwy/9LPDgMxeqcC1XjB0nl9VHO0kr8v4Q7NsZD3hisFdlDIONdOKnWTAYECn3h+8b
Wc7cX8PWasgM097olt0xAgMBAAGjggSUMIIEkDCBkQYIKwYBBQUHAQEEgYQwgYEwPgYIKwYBBQUH
MAGGMmh0dHA6Ly9vY3NwLmVjaS5iY2UuZWMvZWpiY2EvcHVibGljd2ViL3N0YXR1cy9vY3NwMD8G
CCsGAQUFBzABhjNodHRwOi8vb2NzcDEuZWNpLmJjZS5lYy9lamJjYS9wdWJsaWN3ZWIvc3RhdHVz
L29jc3AwGgYKKwYBBAGCqDsDCgQMEwpBVElNQVNBIFNBMB0GCisGAQQBgqg7AwsEDxMNMDk5MTMz
MTg1OTAwMTAaBgorBgEEAYKoOwMBBAwTCjA5MDc0MDI0NjUwGwYKKwYBBAGCqDsDAgQNEwtQRURS
TyBESU1BUzAXBgorBgEEAYKoOwMDBAkTB1ZJWlVFVEEwFQYKKwYBBAGCqDsDBAQHEwVQUkFETzAf
BgorBgEEAYKoOwMFBBETD0dFUkVOVEUgR0VORVJBTDBKBgorBgEEAYKoOwMHBDwTOkFWIERFIExB
UyBBTUVSSUNBUyA0MDYgQ0VOVFJPIERFIENPTlZFTkNJT05FUyBERSBHVUFZQVFVSUwwGQYKKwYB
BAGCqDsDCAQLEwkwNDI1OTA1NjAwGQYKKwYBBAGCqDsDCQQLEwlHdWF5YXF1aWwwFwYKKwYBBAGC
qDsDDAQJEwdFQ1VBRE9SMCAGCisGAQQBgqg7AzMEEhMQU09GVFdBUkUtQVJDSElWTzAiBgNVHREE
GzAZgRdpbXB1ZXN0b3NAcHJpbWF4LmNvbS5lYzCCAd8GA1UdHwSCAdYwggHSMIIBzqCCAcqgggHG
hoHVbGRhcDovL2JjZXFsZGFwc3VicDEuYmNlLmVjL2NuPUNSTDU2OCxjbj1BQyUyMEJBTkNPJTIw
Q0VOVFJBTCUyMERFTCUyMEVDVUFET1IsbD1RVUlUTyxvdT1FTlRJREFEJTIwREUlMjBDRVJUSUZJ
Q0FDSU9OJTIwREUlMjBJTkZPUk1BQ0lPTi1FQ0lCQ0Usbz1CQU5DTyUyMENFTlRSQUwlMjBERUwl
MjBFQ1VBRE9SLGM9RUM/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9iYXNlhjRodHRwOi8vd3d3
LmVjaS5iY2UuZWMvQ1JML2VjaV9iY2VfZWNfY3JsZmlsZWNvbWIuY3JspIG1MIGyMQswCQYDVQQG
EwJFQzEiMCAGA1UEChMZQkFOQ08gQ0VOVFJBTCBERUwgRUNVQURPUjE3MDUGA1UECxMuRU5USURB
RCBERSBDRVJUSUZJQ0FDSU9OIERFIElORk9STUFDSU9OLUVDSUJDRTEOMAwGA1UEBxMFUVVJVE8x
JTAjBgNVBAMTHEFDIEJBTkNPIENFTlRSQUwgREVMIEVDVUFET1IxDzANBgNVBAMTBkNSTDU2ODAL
BgNVHQ8EBAMCBSAwHwYDVR0jBBgwFoAUGPnw++YyHJlmOSrKi7JpfUknv84wHQYDVR0OBBYEFN2z
gaHXqAEATMaS5PlHX5EjGz9/MAkGA1UdEwQCMAAwGQYJKoZIhvZ9B0EABAwwChsEVjguMQMCBJAw
DQYJKoZIhvcNAQELBQADggIBACWlVWzxDVprzGZwOrx1P0R8ZOFOerdz6apr/5ucHOaP+HPZvRQ/
EWbE4F/yiVAnTcfcrL6xHvgvM1UOBYCD124G8sri45OyG73jr1wFP8JO8zlVEfEYDLrUgToepVw+
3Flsa+uMREU1EEvT7fHHJOK4l9NHJKySBgsEaDFNx7RUAYn8fzasyiOVMYZYJIy/fKmb3Iulhrto
7FrCGoZLpcPWN2bFqnGysw6tCNDuVRC2JVIdlkgbr3pIeV9zLUVQg4o0qFKZsoukTJnKCXvxS/TY
5POUUB42IrxY8LMzKFCLmG4Y8fLxR8V5JZKVxYuxCHkWqVi6tolsjeuze1OBFVq4EXPraThuwt4f
uLq0bXzZVY920199077PKmjrgEm9IZqkw61cmmhRKBrrdwfr7KorNQXAtgJ+bmOM4Avo3OwSI7pf
B7i3O44f7ViycF2E5sErwFB/d0cjg9DWehsftnGAQdKzQ5TK9SENlnQveSf57MacvGLzG8Drk9AK
5lO0QCQHh02CJcYTJpas5R69QvfeNieqWMbyF1AX65f0DgerR5eZtCaCQkwNAWqxikS9fqJO+Ega
rr5hWR5VvMNtNPv4+ywmXEsm5q7JYvkMzixRbo1IrxDPjWhsajCc5rCS4ue2hFvq5ZILv1PLCb9N
nE90nnrtkkcXE+hyOT7Mbpx2
</ds:X509Certificate>
</ds:X509Data>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>
kj3ccYjXW7Y7r2+QFSMdG0RgY03pWrnjtL+VF33RtUVTgiy4mEkpFo1TtQ/g4ROczy5Pj04r9tmC
hGtCZj5RzsQDIW/zW7fkowYf0sPmDupd2LnwkDBhvJDcPgN1dTqBG75EMaMRHpqHskDM6lZP4PWW
uGCf88WYL8bI9aHRU1RiXePV1NH/TajjxUauuKNfWxRpjajYM7L9yR5rPMFqsttldPlBKpx4cDQH
fiSTFbNAq/RbhcEpxO875mzv1SPcwsMv/Szw4DMXqnAtV4wdJ5fVRztJK/L+EOzbGQ94YrBXZQyD
jXTip1kwGBAp94fvG1nO3F/D1mrIDNPe6JbdMQ==
</ds:Modulus>
<ds:Exponent>AQAB</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
</ds:KeyInfo>
<ds:Object Id="Signature771997-Object937823"><etsi:QualifyingProperties Target="#Signature771997"><etsi:SignedProperties Id="Signature771997-SignedProperties700418"><etsi:SignedSignatureProperties><etsi:SigningTime>2019-09-08T01:55:16-05:00</etsi:SigningTime><etsi:SigningCertificate><etsi:Cert><etsi:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod><ds:DigestValue>/H8ivdxlKIvznRYINpMjrsx/SfA=</ds:DigestValue></etsi:CertDigest><etsi:IssuerSerial><ds:X509IssuerName>CN=AC BANCO CENTRAL DEL ECUADOR,L=QUITO,OU=ENTIDAD DE CERTIFICACION DE INFORMACION-ECIBCE,O=BANCO CENTRAL DEL ECUADOR,C=EC</ds:X509IssuerName><ds:X509SerialNumber>1515976466</ds:X509SerialNumber></etsi:IssuerSerial></etsi:Cert></etsi:SigningCertificate></etsi:SignedSignatureProperties><etsi:SignedDataObjectProperties><etsi:DataObjectFormat ObjectReference="#Reference-ID-226382"><etsi:Description>contenido comprobante</etsi:Description><etsi:MimeType>text/xml</etsi:MimeType></etsi:DataObjectFormat></etsi:SignedDataObjectProperties></etsi:SignedProperties></etsi:QualifyingProperties></ds:Object></ds:Signature></factura></comprobante><mensajes/></autorizacion></autorizaciones></RespuestaAutorizacionComprobante></ns2:autorizacionComprobanteResponse></soap:Body></soap:Envelope>
Loading

0 comments on commit ea117ee

Please sign in to comment.