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.

1 Respuesta

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?

Preguntas relacionadas

...