Bom Dia pessoal
Estou desenvolvendo o MDF-e e estou com problemas no envio do Lote do mesmo. Estou utilizando o componente THTTPReqResp para consumir o WebService da receita dentro do padrão especificado por eles, SOAP 1.2:
WebService para a Recepção do Lote: https://mdfe-hml.sefaz.rs.gov.br/ws/MDFerecepcao/MDFeRecepcao.asmx?op=mdfeRecepcaoLote
POST /ws/MDFerecepcao/MDFeRecepcao.asmx HTTP/1.1
Host: mdfe-hml.sefaz.rs.gov.br
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
string
string
xml
Estou enviando exatamente de acordo com o manual técnico e também validando no Schema, porém a resposta que obtenho é a seguinte:
Informando que o namespace soap12 não está declarado:
<?xml version="1.0" encoding="utf-8"?>
soap:Receiver
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Xml.XmlException: 'soap12' is an undeclared namespace. Line 1, position 40.'#$D#$A' at System.Xml.XmlTextReaderImpl.Throw(Exception e)'#$D#$A' at System.Xml.XmlTextReaderImpl.LookupNamespace(NodeData node)'#$D#$A' at System.Xml.XmlTextReaderImpl.ElementNamespaceLookup()'#$D#$A' at System.Xml.XmlTextReaderImpl.ParseAttributes()'#$D#$A' at System.Xml.XmlTextReaderImpl.ParseElement()'#$D#$A' at System.Xml.XmlTextReaderImpl.ParseDocumentContent()'#$D#$A' at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()'#$D#$A' at System.Xml.XmlReader.MoveToContent()'#$D#$A' at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()'#$D#$A' at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()'#$D#$A' at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()'#$D#$A' at System.Web.Services.Protocols.SoapServerProtocol.Initialize()'#$D#$A' at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)'#$D#$A' at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)'#$D#$A' --- End of inner exception stack trace ---
[/code]
A função utilizada para enviar o do XML fica desta forma:
[code]
class function MDFeUtil.EnviarXMLSoap(AXML, AURL, SoapAction: String;
var Resposta: String): boolean;
var
Stream: TMemoryStream;
StreamStr: TStringStream;
ReqResp: THTTPReqResp;
begin
Stream := TMemoryStream.Create;
ReqResp := THTTPReqResp.Create(nil);
ReqResp.URL := AURL;
ReqResp.UseUTF8InHeader := True;
ReqResp.SoapAction := SoapAction;
ReqResp.OnBeforePost := OnBeforePost;
try
ReqResp.Execute(AXML, Stream);
StreamStr := TStringStream.Create('');
StreamStr.CopyFrom(Stream, 0);
Resposta := TiraAcentos(ParseText(StreamStr.DataString, True));
finally
FreeAndNil(StreamStr);
FreeAndNil(Stream);
FreeAndNil(ReqResp);
end;
end;
class procedure MDFeUtil.OnBeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
Cert : ICertificate2;
CertContext : ICertContext;
PCertContext : Pointer;
ContentHeader: string;
const
INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
begin
Cert := GetCertificado;
CertContext := Cert as ICertContext;
CertContext.Get_CertContext(Integer(PCertContext));
if InternetSetOption( Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
PCertContext, 120000) = False then
ShowMessage('Erro ao carregar Certificado Digital');
end;
Gostaria de saber se alguem passou pelo mesmo problema acima, se puder me dar o caminho das pedras, me viro com o resto, hehehe
Grato pela compreensão de todos.
_________________
Atenciosamente
Leonardo Gemelli