Le contaré un caso extraño.
Tenía un problema similar al suyo, aunque revisaba una y otra vez no se hallaban diferencias.
Se arregló (milagrosamente y después del desespero) con el siguiente cambio:
LO QUE SE HACÍA PARA CONFORMAR EL CODIGO QR
CodigoQR = "
https://catalogo-vpfe.dian.gov.co/document/searchqr?documentkey="
CodigoQR += valordemivariablequeconteniaelrestodeinformación
Es decir, conformaba el valor del elemento CODIGOQR en dos procesos elementales o en dos líneas de código.
LO QUE FUNCIONÓ:
CodigoQR = "
https://catalogo-vpfe.dian.gov.co/document/searchqr?documentkey=" + valordemivariablequeconteniaelrestodeinformación
FIN DEL SUFRIMIENTO.
El resultado visible, es exactamente el mismo y cualquier desarrollador dirá que las dos formas de conformar la cadena CodigoQR arrojan exactamente el mismo resultado (eso diría yo); no obstante, por alguna razón, para el webservice de la DIAN, hay alguna diferencia que hace que se rechace el documento, sin más razón aparente.
Intente eliminar concatenaciones en procesos separados e intente hacer las concatenaciones en una línea de código.