frame

¡Hola amigo!

Pareces nuevo por aquí. Si quieres participar, ¡haz clic aquí!

Acceder Registrarse

¡Hola amigo!

Pareces nuevo por aquí. Si quieres participar, ¡regístrate aquí!

¿Cómo obtener los valores DigestValue y SignatureValue para el xml?

editado enero 12 en Otros Lenguajes

Estoy tratando de colocar dichos valores en mi xml que se esta generando con mi sistema desarrollado en python espero me puedan dar una mano con esto

Etiquetado:
«1

Comentarios

  • Hola si lo estás usando desde otro lenguaje, podrás ver que el método Firmar del API REST devuelve un JSON cuando ya completa el proceso de firma con el certificado digital, el cual, tiene dos propiedades:

    • ResumenFirma (El valor DigestValue del XML)
    • ValorFirma (El valor SignatureValue).

    Pero si quieres ver como es que el código C# asigna dichos valores, puedes dirigirte al archivo Certificador.cs en la línea 67 a la 70, como podrás observar dichos valores son resultantes luego del proceso de firma de un XML.

    Espero haber sido lo suficientemente claro.
    Saludos.

  • el xml tiene que estar con etiquetas DigestValue y SignatureValue vacías? cuando utilizo el sistema facturador sunat le paso el xml sin el UBLExtension y le asigna dichos datos pero yo cuando hago lo mismo en mi sistema me arroja valores distintos a que se puede deber esto mi sistema esta en python

  • El facturador de SUNAT funciona muy distinto a como lo hace OpenInvoicePeru, para este último, solo se necesita que esté presente la etiqueta UBLExtension, y la API REST lo llenará con los datos que se necesite.

    Esas etiquetas forman parte del estándar XMLDSig, y no deben ser editadas de manera manual, ya que es el resultante de firmar todo el documento XML.
    Saludos.

  • No estoy usando OpenInvoicePeru es un modulo creado por mi entonces al momento de enviar a sunat deben estar esos campos vacíos, el API RES es la respuesta de consumir el web service de sunat o a que hace referencia ese API RES?

  • Otra consulta tiene algo que ver el valor DigestValue y SignatureValue con el xml xq los valores que genero en mi sistema al momento de validar me da error que la factura a sido alterada

  • @shesha_15_92 dijo:
    No estoy usando OpenInvoicePeru es un modulo creado por mi entonces al momento de enviar a sunat deben estar esos campos vacíos, el API RES es la respuesta de consumir el web service de sunat o a que hace referencia ese API RES?

    La API REST que mencionaba era la del OpenInvoicePeru, el Web Service de SUNAT no es una API REST, es un Servicio SOAP que transmite y recibe XML, y en ese caso si debes enviar el XML ya firmado, porque quien firma con el estándar XMLDSig es tu sistema, no SUNAT.

    Saludos.

  • @shesha_15_92 dijo:
    Otra consulta tiene algo que ver el valor DigestValue y SignatureValue con el xml xq los valores que genero en mi sistema al momento de validar me da error que la factura a sido alterada

    Por supuesto que tienen que ver como te mencionaba, dichos valores son computados al momento de firmar el documento XML, por eso, si cambias cualquier valor en el XML, así sea un simple espacio, esos valores serán completamente diferentes.

    El error de documento alterado es muy común, ya que el error no necesariamente se refiere al proceso de firmado, sino que el bloque de firma:

    <Signature>
        <SignedInfo>
            <SignatureMethod />
            <CanonicalizationMethod />
            <Reference>
                <Transforms>
                <DigestMethod>
                <DigestValue>
            </Reference>
            <Reference /> etc.
        </SignedInfo>
        <SignatureValue />
        <KeyInfo />
        <Object />
    </Signature>
    

    Debe estar dentro de las etiquetas UBLExtension y no al final, por eso, OpenInvoicePeru exige que el documento XML esté con dicha etiqueta vacía para poder insertar el bloque de firma.
    Para tu caso, que usas tu propio algoritmo de firmado, asegurate de coger todo ese bloque y colocarlo en las etiquetas mencionadas para evitar alterar el documento.

    Espero haber sido lo bastante preciso.

  • editado enero 4

    este xml estoy queriendo firmar

  • Este es el xml mi consulta es si ese es el contenido correcto que debo tomar para la firma e insertar luego de firmar las etiquetas faltantes o debe estar las etiquetas faltantes pero vacias todo lo demas esta bien por que cuando pasa la validación con el sistema facturador sunat pasa correctamente con la firma que le asigna el sistema facturador sunat pero con la firma que yo le asigno me da error del documento ha sido alterado por eso quizás estoy tomando campos incorrectos para firmar o me faltan campos ya que ambas firmas son distintas y supongo deberían ser iguales ya que se trata del mismo documento

  • Revisando tu documento adjunto puedo ver que falta que cierres el tag UBLExtension (presta atención a la palabra en singular) de la línea 17.

    Debería estar así:

    <ext:UBLExtension>
    </ext:UBLExtension>
    

    De esta manera, podrás colocar el bloque de firma, dentro de ese elemento XML y evitar los errores que presentas.

    Ah y revisa que la linea 91, donde debes colocar el correlativo de los items, siempre empieza por 1.

    Saludos.

  • Esta correcto los cierres.
    Muchas gracias de todas maneras seguiré buscando.
    Saludos.

  • Si no quieres reinventar la rueda, puedes descargar OpenInvoicePeru y publicarlo en un servidor que gustes y solo consumes la API REST que expone, así te evitarías estos dolores de cabeza y podrás concentrarte en lo que necesites de tu desarrollo.

    Saludos.

  • Como funcionaria le tendría que enviar mi xml sin firmar al API RES y este me lo devuelve firmado?

  • @shesha_15_92 dijo:
    Como funcionaria le tendría que enviar mi xml sin firmar al API RES y este me lo devuelve firmado?

    Así es, la API REST solo necesita que le envies tu XML sin firmar en el formato Base64, el certificado y la contraseña y te devolverá una cadena Base64 igual pero ya con la firma y con los valores que necesitas.

    Saludos.

  • En el proyecto OpenInvoicePeru en que parte consume la API RES para poder guiarme ?

  • Estimado, se denomina API REST, no RES :# . Y además OpenInvoicePeru es el que expone la API REST para ser consumida a través de tu aplicación, por lo cual debes primero bajar el proyecto de la página de GitHub, compilarlo con Visual Studio 2015, publicarlo en tu servidor IIS y luego poder invocar a los métodos del mismo.

    Saludos.

  • Listo muchas gracias voy a intentar con esta solución.

    Saludos.

  • editado enero 19

    Erick que tal te comento un poco el problema que estoy teniendo espero me puedas dar una mano al momento de firmar mi xml el valor DigestValue que obtengo es el correcto (se que es el correcto porque lo he comparado con el valor que me arroja el sistema facturador sunat) pero el valor SignatureValue es un valor diferente y me da el error de documento alterado, para obtener este valor hago lo siguiente signature = pkey.sign(hashlib.sha1(signed_info).hexdigest()) es código python y lo que hace es obtener la firma con la clave privada y pasandole el signed_info, otra cosa el signed_info que le paso es igual a esto x41L2ksrCkRkapHbYTaY+aZ1BrU=
    En que puedo estar fallando o no es la manera correcta de firmar.
    Espero me puedas ayudar.
    Gracias.
    Saludos Cordiales.

  • Lamento decirte que no se programar en Python, estoy trabajando en un portar el código de la API REST para que se pueda ejecutar en Linux, de esa manera no dependerás un servidor con Windows y no tendrías que reinventar la rueda tan solo para firmar los XML. Mantente atento a los cambios en el repositorio oficial del proyecto en GitHub.


  • Perdon en el comentario anterior no se muestra correctamente lo que le envio en esta imagen adjunto el signed_info que le paso resaltado

  • Mi consulta es si se debe firmar solo con la clave privada y el signed_info o se necesita algo mas y si el signed_info que le estoy pasando es el correcto debo pasarle todo lo que tengo marcado o únicamente lo que esta dentro del DigestValue x41L2ksrCkRkapHbYTaY+aZ1BrU=

  • No se exactamente como funciona todo el algoritmo XMLDSig, en C# el .NET Framework ya lo hace de la manera correcta y tan solo se pone los valores que se necesita.

    Hazme caso, no reinventes la rueda, usa la que ya existe.
    Saludos.

  • Si esa fue mi solucion pero están que me piden desarrollarlo de otra forma ya que los servidores para .net son algo caros

  • Gracias de todas maneras seguiré investigando cualquier cosa te escribo.
    Saludos

  • @shesha_15_92 dijo:
    Si esa fue mi solucion pero están que me piden desarrollarlo de otra forma ya que los servidores para .net son algo caros

    Azure y AWS son buenas opciones y nada caros. B)

  • @ErickOrlando que tal tengo otra consulta el zip de respuesta que me devuelve la sunat siempre que intento abrir el xml de respuesta me dice que el archivo esta dañado sabes a que se pueda deber esto

  • Con que programa estas abriendo el zip?

  • @shesha_15_92 En todo caso prueba con otro programa, puedes optar por 7Zip o el mismo de Windows. Si igual no funciona, algo no estas haciendo bien desde tu codigo al obtener el Base64 del CDR.

Accede o Regístrate para comentar.

Foro OpenInvoicePeru

| Foro Técnico OpenInvoicePeru
@ 2017 Framework Peru, Todos los derechos reservados. Foro Técnico para el proyecto OpenInvoicePeru en GitHub
Powered by VanillaForums, Designed by ThemeSteam

Si cree que el proyecto vale la pena, no dudes en donar.

Donación

Manténgase al día