eclipxe13 / CfdiUtils

PHP Common utilities for Mexican CFDI 3.2, 3.3 & 4.0

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Error en validación de comprobante

ulisescarreonalvarez opened this issue · comments

Qué tal!

He tenido un problema al querer validar el comprobante en la creación con el error:

TypeError: Argument 1 passed to Eclipxe\XmlSchemaValidator\SchemaValidator::__construct() must be an instance of DOMDocument, string given, called in /Sites/repos/Core/Validate/Cfdi33/Xml/XmlFollowSchema.php on line 51 in file /Sites/repos/vendor/eclipxe/xmlschemavalidator/src/SchemaValidator.php on line 35

Al parecer XmlFollowSchema.php espera en esta sección:

    // create the schema validator object
    $schemaValidator = new SchemaValidator($content);

El content al imprimirlo tiene un objecto de tipo Comprobante:

$asserts = new Asserts();
        $validator->validate($this->comprobante(), $asserts);
        dd($validator);
        return $asserts;

Y cuando llega al SchemaValidator:

 // obtain content
        if ('' === $content = $this->getXmlString()) {
            $content = XmlNodeUtils::nodeToXmlString($comprobante);
        }
        dd($content);
        // create the schema validator object
        $schemaValidator = new SchemaValidator($content);
"""
<?xml version="1.0" encoding="UTF-8"?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd" Version="3.3" Serie="A" Folio="1" Fecha="2020-12-10T11:06:28" FormaPago="01" Moneda="MXN" TipoDeComprobante="I" LugarExpedicion="52000" NoCertificado="30001000000400002335" Certificado="MIIFijCCA3KgAwIBAgIUMzAwMDEwMDAwMDA0MDAwMDIzMzUwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWRpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMTkwNTI5MTk1MDAxWhcNMjMwNTI5MTk1MDAxWjCBsTEdMBsGA1UEAxMUWE9DSElMVCBDQVNBUyBDSEFWRVoxHTAbBgNVBCkTFFhPQ0hJTFQgQ0FTQVMgQ0hBVkVaMR0wGwYDVQQKExRYT0NISUxUIENBU0FTIENIQVZFWjEWMBQGA1UELRMNQ0FDWDc2MDUxMDFQODEbMBkGA1UEBRMSQ0FDWDc2MDUxME1HVFNIQzA0MR0wGwYDVQQLExRYT0NISUxUIENBU0FTIENIQVZFWjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKvYaTyUuvtUIwymg88xS3Ri7W2J758lusEgwUaxdyIyxLQK2736yrK6RotjDu7pfbzqD5CyJ6gkT70x29QNe5MHUgcNPnARoYK2+0a0kWjpweNqjb0pCOMevUCzblF72c7MkErbW5qolIRIsI4UFSZOlLDI9O9lKm0Tk85Ab0siaqUefGl9lOOkjPT7Pr/CkHk4jxZJOzY2cWVey00vgFh/t9xxbF6Rvi738dfZ9R9h2TVEpaRRYb+m4rpTMos6HEfmhuKSsNe2/M8NDxC4zkcwdC5WS9NhNd4kUQ+7TFLmIo14tOXXSBZVVsg49/L+lq/eh44K1Ze3iSW9M7Ii8mECAwEAAaMdMBswDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCBsAwDQYJKoZIhvcNAQELBQADggIBAK1bJ6vhkqIF0Y4XnDUFQ/nZUOsQCXbs+czwu62kVaOffHWcKhJ1mTaSwkmFoqykV3VAib7RYKYTXcERow21uGEfnOhNxeSi4l2An7y6PtJOGy4wTjAX++iAeoh+ZDel3VBhvNYv6IZAcsVqdTl0Mfs/E7EuCc6YqumEBTbFTMcp92A31HWHqkI+UnXcogYndsaIK2m+iER6AHhUokfOjOiSJmSEovaXmaJVkmjbv3g07FeMB2fZ8fp3rrRtHjgTzbZyPY2LjhBnV/0vaTnGZH4l1RWZ+dgFn5/09GJJYLgaTBHpuRNBI6JRQ9/iR4NMjOEbNXDIpKibnIg3zG1yqQtUwQBUic0lF958n1KOg7fM+Msgq9Fjg2FY3aI2DAoGWKJR8PTiFbXy+Arpzd669QWzgIusT7KLwlFhKm+a+9dmE2lp0WUj2QH0drJdfSuvqA9ZIu3I0yvnpUT0jlun0PZyoloTOd5X+8z2kLSAxbZaOu9I4XATcwZntZK0FIueh4Htom524ne/MNp6nEXzpxV4HPiW626VoykB4AHJwIp7ljcg8D4IJ7oIF/0UEduwbsx3amAfDeg/9YtPRC4j5M0h3l7zLcJ2/BFwr8qYM74d0v00Hm4msirCPkE+kr58oL1NjwN7vvPA96HbSeBohH+f/X8FcZ965FhmjmZWgj0W" MetodoPago="PUE" SubTotal="2000.00" Total="1740.00" Descuento="500.00" Sello="kSMe94w1MtrcnIdYCW4ATJbguSH/QHig1qBR2+v/lENQhDkmYYGRdWdxYehLPQ9uiQTcxZp26MDuiWIcZcYt6hob6QbrNdZk8fbePDrnsr8IFpuYEZpbp/+SGGlINvPZAJJWsmEe6zGpyxlXoU8EAmTTWTB9MJCMj4LP+OMuc7spD4CN1ZpFkMKQx8xdWJcz6gjgEgKTYa7p77J4yyIF4JA+2DxFR4kUPKXxHlCtU5WV0i7jPK1QpC7YMLFKbuuuVDngrpZVpG7OrcSBlQXyXgUOg2cdflkFH4Ndq4uUSFzRnZ3HWbVNNNzIl609voMYY34PuOICIWKDb5k/w3KWtw==">
  <cfdi:Emisor Nombre="XOCHILT CASAS CHAVEZ" Rfc="CACX7605101P8" RegimenFiscal="612"/>
  <cfdi:Receptor Rfc="COSC8001137NA" Nombre="Carlos Cortés Soto" UsoCFDI="G01"/>
  <cfdi:Conceptos>
    <cfdi:Concepto ClaveProdServ="52161557" NoIdentificacion="GAMEPAD007" Cantidad="4" ClaveUnidad="H87" Unidad="PIEZA" Descripcion="Portable tetris gamepad pro++" ValorUnitario="500" Importe="2000" Descuento="500">
      <cfdi:Impuestos>
        <cfdi:Traslados>
          <cfdi:Traslado Base="100" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="240"/>
        </cfdi:Traslados>
      </cfdi:Impuestos>
    </cfdi:Concepto>
  </cfdi:Conceptos>
  <cfdi:Impuestos TotalImpuestosTrasladados="240.00">
    <cfdi:Traslados>
      <cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="240.00"/>
    </cfdi:Traslados>
  </cfdi:Impuestos>
</cfdi:Comprobante>
"""

Saludos!

Creo que hay un problema con las dependencias de tu proyecto, ¿de casualidad forzaste la instalación?

Por lo que veo Eclipxe\XmlSchemaValidator\SchemaValidator fue introducida en eclipxe/schemavalidator:3.0.0 y eclipxe/cfdiutils en su versión actual 2.14.0 requiere de eclipxe/xmlschemavalidator:^2.0.2.

El cambio en esta librería (eclipxe/cfdiutils) de la dependencia eclipxe/schemavalidator de la versión 2.x a la versión 3.x no se ha realizado. No recuerdo bien si actualizar genera algún tipo de incompatibilidad y por eso aún no ha ocurrido.

¿Podrías por favor confirmar tus dependencias?

PD: Recuerda que tenemos una comunidad en relación a esta librería y las de PhpCfdi en Discord https://discord.gg/aFGYXvX donde podemos platicar de forma más fluida.

Por el mensaje de error, infiero que no estás usando composer para hacer la instalación de dependencias y estás clonando los repositorios o copiando archivos. Esto te puede llevar a problemas de versiones de dependencias, como el que estás documentando aquí, y a otros más, como tener versiones desactualizadas o archivos no encontrados.

Te recomiendo usar composer para instalar las dependencias. Solo si no puedes usar composer en tu proyecto, podrías aislar el árbol de dependencias en una carpeta y después intentar cargar el vendor/autoloader.php generado ahí. Desconozco la efectividad de este método pero lo considero más seguro y mantenible.

Qué tal @eclipxe13!

Tenemos un proyecto donde inyectamos algunas dependencias para poder generarlos por medio de otro Core, pero tienes razón el problema era la versión de schemavalidator!