Bienvenido a Facturas y Respuestas.

Esperamos que encuentre la respuesta a su pregunta. Y si no, puede formularla para que los expertos de la comunidad la respondan.

Preguntar

Este blog es creado y administrado por:

Copyright - 2020

0 votos
por en Preguntas Tecnicas
Hola a todos. Estoy realizando una aplicacion en c# de facturacion electronica DIAN. Ya puedo generar el xml valido de la factura, pero estoy teniendo problemas para generar un Soap Envelope valido para la solicitud del metodo SendBillSync del web service de validacion previa. Siempre me responde "An error occurred when verifying security for the message." hasta el momento mi codigo genera el siguiente xml que es similar al generado por SOAPUI segun la configuracion que sugiere la DIAN en su anexo tecnico:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wcf="http://wcf.dian.colombia">

<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

<wsu:Timestamp wsu:Id="TS-67f33e79d5ba488a819cb0877bba7f4c">

<wsu:Created>2020-08-10T02:01:40.820Z</wsu:Created>

<wsu:Expires>2020-08-10T18:41:40.821Z</wsu:Expires>

</wsu:Timestamp>

<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-2312efd81fce4429868446fc1e765329">MIIItTCCB...wG2pw==</wsse:BinarySecurityToken>

<ds:Signature Id="SIG-fd652984cd1044c1a457989212c92e17" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

<ds:SignedInfo>

<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">

<ec:InclusiveNamespaces PrefixList="wsa soap wcf" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>

</ds:CanonicalizationMethod>

<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>

<ds:Reference URI="#ID-c05b108296cb4e8da5663fc346ff0341">

<ds:Transforms>

<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">

<ec:InclusiveNamespaces PrefixList="soap wcf" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>

</ds:Transform>

</ds:Transforms>

<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>

<ds:DigestValue>Xut1U3fcspWFgpKFlI5mgROXNNvwpVtt1qpcIJLeKlU=</ds:DigestValue>

</ds:Reference>

</ds:SignedInfo>

<ds:SignatureValue>ZafqY+b6TH64MptEv47LpcU59HvtK9qbAMELR5vRo0CBJ1f4kwUYL/Yt8QjEK5W8zL1Fdm/ERsUDQmNV87jl5LpzAJS6eaYc0SfMWr6Wjw1DC4kniwODC4igbqN/Hi4b7dfXoklGKxhTR6wcJb1XQF/JCHvucRaDxKqZ+LfosPo=</ds:SignatureValue>

<ds:KeyInfo Id="KI-219dd87f5abf41028d6577b654c1eb44">

<wsse:SecurityTokenReference wsu:Id="STR-9f3b483624464d28b6b821fe651ac0c0">

<wsse:Reference URI="#X509-2312efd81fce4429868446fc1e765329" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>

</wsse:SecurityTokenReference>

</ds:KeyInfo>

</ds:Signature>

</wsse:Security>

<wsa:Action>http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync</wsa:Action>

<wsa:To wsu:Id="ID-c05b108296cb4e8da5663fc346ff0341" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">https://vpfe-hab.dian.gov.co/WcfDianCustomerServices.svc</wsa:To>

</soap:Header>

<soap:Body>

<wcf:SendBillSync>

<wcf:fileName>z09001414500002000000001.zip</wcf:fileName>

<wcf:contentFile>UEsDBBQAAAAIADSoCVGhdHiOM...AbhgAAAAA</wcf:contentFile>

</wcf:SendBillSync>

</soap:Body>

</soap:Envelope>

Si alguien ya ha desarrollado el envio del Request al metodo SendBillSync me gustaria recibir su colaboracion, muchas gracias de antemano a toda la comunidad. Si se requiere mas detalles me avisan por favor.

3 Respuestas

0 votos
por
seleccionada por
 
Mejor respuesta

Asegurate de que estes usando el procolo Tls.1.2 y el certificado de cliente qu ele corresponde a la empresa que envia al factura electrónica.

El código para enviar es tan simple como esto:

var endpointAddress = new System.ServiceModel.EndpointAddress(new Uri(apiUrl));
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var cliente = new vpfe.WcfDianCustomerServicesClient("WSHttpBinding_IWcfDianCustomerServices", endpointAddress);
cliente.ClientCredentials.ClientCertificate.Certificate = certificate;           
DianResponse resp = cliente.SendBillSync( "archivo.zip", archivo);

por
Muchas gracias William, era justo lo que necesitaba.
por
Hola, me podrías ayudar con e WSDL, tengo la  generacion de factura y firmado pero no logro hallar el codigo para enviarla?
por
hola tengo problemas entendiendo como asocio el certificado que tengo, cual certificado debo enviar en cliente.ClientCredentials.ClientCertificate.Certificate = certificate;
por
certificate contiene  la ruta del certificado digital que debes adquirir como emisores de certificados y la contraseña del mismo. El certificado es el que la empresa debe comprar preferiblemente en formato .pfx
por
El codigo en C# expuesto va perfecto pero al enviar el archivo dice que debe ser byte[] y no rehaza, si intento mandar un string base64 no me acepta el parámetro.
0 votos
por
prodias enviarme el demo en c-sharp aa henrypandales@hotmail.com gracias
0 votos
por
Hola! Buenos Días.

Me intriga saber como hiciste para crear la estructura del xml, he intentado en crearla de forma manual pero no lo he podido lograr, queria saber si es posible que compartas la clase / metodo que usas para crear el xml del soap.

Muchas gracias! :D

Preguntas relacionadas

...