FórumCategoria: Fórum - Perguntas e RespostasREINF 2.01.01 – Assíncrono
Renata Rovina perguntou há 2 anos

Boa tarde! Estou tentando enviar os novos eventos do REINF. Sempre apresenta erro: A solicitação foi anulada: Não foi possível criar um canal seguro para SSL/TLS. Alguém consegue me ajudar?
Código C# abaixo:
var handler = new WebRequestHandler();
handler.ClientCertificates.Add(cert);
HttpClient client;
client = new HttpClient(handler);
client.BaseAddress = new Uri(“https://pre-reinf.receita.economia.gov.br/recepcao/lotes”);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/xml”));
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var httpContent = new StringContent(elemDoc.ToString(), Encoding.UTF8, “application/xml”);
HttpResponseMessage response = await client.PostAsync(client.BaseAddress.ToString(), httpContent);
ret._RetornoExecucao = true;
ret._MessagemErro = response.StatusCode.ToString();
return ret;
}
catch (Exception ex)
{
ret._RetornoExecucao = false;
ret._MessagemErro = ex.ToString();
ret.xdoc = null;
return ret;
}

Guilherme de Oliveira Rodrigues respondeu há 2 anos

As informações referentes a erros no lote estão na tag ocorrencia.
As informações referentes a erros nos eventos no xml de retorno ficam na tag regOcorrs.
Na documentação voce encotra o leiaute dos xmls de retorno.

Renata Rovina respondeu há 2 anos

Muitíssimo obrigada! Funcionou! Vou deixar o meu aqui também para ajudar outras pessoas. Mais uma coisa se puder ajudar, como pego a descrição do erro no XML? Você fez isso?

Entity.RetornoDAEnt ret = new Entity.RetornoDAEnt();
XElement elemDoc = null;
XmlDocument xmlDoc = new XmlDocument();
try
{
elemDoc = XElement.Load(filePath);
xmlDoc.Load(filePath);
}
catch (Exception ex)
{
ret._RetornoExecucao = false;
ret._MessagemErro = “Validação de Esquema: ” + ex.Message;
ret.xdoc = null;
return ret;
}

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;
Uri uri = new Uri(“https://pre-reinf.receita.economia.gov.br/recepcao/lotes”);

var options = new RestClientOptions(uri);
options.ClientCertificates = new X509CertificateCollection() { digitalCertificate };

var client = new RestClient(options);

var request = new RestRequest(uri, Method.Post);
request.RequestFormat = DataFormat.Xml;
request.AddParameter(“application/xml”, elemDoc, ParameterType.RequestBody);

try
{
var response = client.Post(request);
if (response.IsSuccessful)
{
ret._RetornoExecucao = true;
}
else
{
ret._RetornoExecucao = false;
ret._MessagemErro = response.ErrorMessage;
}

}
catch (Exception ex)
{
ret._RetornoExecucao = false;
ret._MessagemErro = ex.Message + ex.InnerException;
}
return ret;

Guilherme de Oliveira Rodrigues respondeu há 2 anos

Exemplo utilizando RestSharp:

var client = new RestClient(uri);
client.ClientCertificates = new X509CertificateCollection() { certificate };

var request = new RestRequest(Method.POST);
request.RequestFormat = DataFormat.Xml;
request.AddParameter(“application/xml”, xmlLote, ParameterType.RequestBody);
var response = client.Post(request);

3 Respostas
Renata Rovina respondeu há 2 anos

Guilherme, não do XML de retorno, é quando entra catch (Exception ex), ele retorna erro “422 Lote não foi recebido pois possui inconsistências. No body é retornado o XML com as
ocorrências a serem resolvidas pela instituição declarante”, gostaria pegar os detalhes. Não acho esse body na var de retorno.

Renata Rovina respondeu há 11 meses

Segue código em RestSharp que está funcionando, para ficar aqui registrado:
public Entity.RetornoDAEnt EnvioXMLRestSharp(string filePath, X509Certificate2 digitalCertificate)
{
 
Entity.RetornoDAEnt ret = new Entity.RetornoDAEnt();
XElement elemDoc = null;
XmlDocument xmlDoc = new XmlDocument();
try
{
elemDoc = XElement.Load(filePath); //certo é converter
xmlDoc.Load(filePath);
}
catch (Exception ex)
{
ret._RetornoExecucao = false;
ret._MessagemErro = “Validação de Esquema: ” + ex.Message;
ret.xdoc = null;
return ret;
}
 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;
Uri uri = new Uri(“https://pre-reinf.receita.economia.gov.br/recepcao/lotes”);
 
var options = new RestClientOptions(uri);
options.ClientCertificates = new X509CertificateCollection() { digitalCertificate };
 
var client = new RestClient(options);
 
var request = new RestRequest(uri, Method.Post);
request.RequestFormat = DataFormat.Xml;
request.AddParameter(“application/xml”, elemDoc, ParameterType.RequestBody);
//RestResponse response = new RestResponse();
 
try
{
var response = client.ExecutePost(request);
//response = client.Post(request);
if (response.IsSuccessful)
{
ret._RetornoExecucao = true;
}
else
{
ret._RetornoExecucao = false;
ret._MessagemErro = response.ErrorException.ToString();
}
XmlDocument xmlDocRet = new XmlDocument();
xmlDocRet.LoadXml(response.Content.ToString());
ret.xdoc = xmlDocRet;
}
catch (HttpRequestException ex)
{
ret._RetornoExecucao = false;
ret._MessagemErro = ex.Message + ex.InnerException;
}
 
return ret;
}
 

Marcos respondeu há 11 meses

Só tenha atenção ao protocolo TLS
 
http://sped.rfb.gov.br/pagina/show/7280