Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel Herdt

[Resolvido] NFE, Acesso ao WEBSERVICE DO RS

Recommended Posts

Bom pessoal, eu já possuo NFE em varios estados. Estou com a nescessidade de implantar no RS ate 1 de novenbro. Eu pensava que era só importar o WSDL via WSDL IMPORTER e ser feliz. Engano o meu. já estou a duas semanas com o retorno 243 - XML MAL FORMADO e não consegui resolver já chequei se era espaços em branco, caracteres inválidos, caracteres de tabulação... no meu nfeCabecMsg e nfeDadosMsg. bom essa possibilidade eu praticamente eliminei agora estou partindo para checar a Unit gerada apartir do WSDL IMPORTER. Vou colocar ela em um box logo a baixo. Por favor se alguem já passou por essa experiencia me contate. 48-34374622 ou MSN: gabrielherdt@gmail.com Fico a disposição para qualquer troca de informação Sobre assinatura, autenticação SSL por delphi.

 

nfeCabecMsg = '<?xml version="1.0" encoding="UTF-8"?><cabecMsg xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.portalfiscal.inf.br/nfe" versao="1.02"><versaoDados>1.07</versaoDados></cabecMsg>'

 

nfeDadosMsg = '<?xml version="1.0" encoding="UTF-8"?><consStatServ versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>1</tpAmb><cUF>43</cUF><xServ>STATUS</xServ></consStatServ>'

 

OBS: tudo na mesma linha.

OBS2: Utilizo o Delphi 2005

 

// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL	 : C:\Sistemas\Gerencial\XML\homologacao\RS\NfeStatusServico.xml
// Encoding : UTF-8
// Version  : 1.0
// (29/09/2008 13:44:21 - 1.33.2.5)
// ************************************************************************ //

unit NfeStaServHomoRS;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Borland types; however, they could also 
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:string		  - "http://www.w3.org/2001/XMLSchema"



  // ************************************************************************ //
  // Namespace : http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico
  // soapAction: http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico/nfeStatusServicoNF
  // transport : http://schemas.xmlsoap.org/soap/http
  // binding   : NfeStatusServicoSoap
  // service   : NfeStatusServico
  // port	  : NfeStatusServicoSoap
  // URL	   : https://homologacao.nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx
  // ************************************************************************ //
  NfeStatusServicoSoap = interface(IInvokable)
  ['{5E393C9B-1708-45AE-674E-967E74889DFF}']
	function  nfeStatusServicoNF(const nfeCabecMsg: WideString; const nfeDadosMsg: WideString): WideString; stdcall;
  end;

function GetNfeStatusServicoSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): NfeStatusServicoSoap;


implementation

function GetNfeStatusServicoSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): NfeStatusServicoSoap;
const
  defWSDL = 'https://homologacao.nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx?wsdl';
  defURL  = 'https://homologacao.nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx';
  defSvc  = 'NfeStatusServico';
  defPrt  = 'NfeStatusServicoSoap';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
	if UseWSDL then
	  Addr := defWSDL
	else
	  Addr := defURL;
  end;
  if HTTPRIO = nil then
	RIO := THTTPRIO.Create(nil)
  else
	RIO := HTTPRIO;
  try
	Result := (RIO as NfeStatusServicoSoap);
	if UseWSDL then
	begin
	  RIO.WSDLLocation := Addr;
	  RIO.Service := defSvc;
	  RIO.Port := defPrt;
	end else
	  RIO.URL := Addr;
  finally
	if (Result = nil) and (HTTPRIO = nil) then
	  RIO.Free;
  end;
end;


initialization
  InvRegistry.RegisterInterface(TypeInfo(NfeStatusServicoSoap), 'http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico', 'UTF-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(NfeStatusServicoSoap), 'http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico/nfeStatusServicoNF');
end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, liguei varias vezes. eles dizem que meu nfeCabecMsg e nfeDadosMsg estão chegando em branco. Claro que estou mandando informações na função. Alguem já passo por isso?

 

Essa é a função de envio de checagem do status:

Function TFtesteSta.consStatServ3 : Boolean;
var
  Resposta, sCodigo, sMotivo, sRetorno : string;
  qry: NfeStaServHomoRS.NfeStatusServicoSoap;
  ListaXML: TStringList;
  WCorpo, wCabec:  WideString;
  vCabecalho: IXMLCabecMsg;
  vDados: IXMLTConsStatServ;
  XmlDoc: IXMLDocument;
begin
  inherited;
  vCabecalho			 := NewcabecMsg;
  vCabecalho.Versao  := '1.02';
  vCabecalho.VersaoDados := '1.07';
  XmlDoc := LoadXMLData(vCabecalho.XML);
  XmlDoc.Encoding   := 'UTF-8';
  //XmlDoc.StandAlone := 'no';
  wCabec := XmlDoc.XML.Text;

  vDados		:= NewconsStatServ;
  vDados.Versao := '1.07';
  vDados.TpAmb  := '2';
  vDados.CUF	:= '43';
  vDados.XServ  := 'STATUS';
  XmlDoc := LoadXMLData(vDados.XML);
  XmlDoc.Encoding   := 'UTF-8';
  //XmlDoc.StandAlone := 'no';
  WCorpo := XmlDoc.XML.Text;


	  XMLDados.Active := true;
	  XMLCabec.Active := true;
	  XMLDados.Options := [doNodeAutoCreate,doNodeAutoIndent,doAttrNull,doAutoPrefix];
	  try

  //		   HTTPRIO.HTTPWebNode.OnBeforePost := Rdmconbas.HTTPReqRespBeforePost;
  //		   HTTPRIO.URL := 'https://homologacao.nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx';
  //		   HTTPRIO.WSDLLocation := 'https://homologacao.nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx?wsdl';

			 qry :=  NfeStaServHomoRS.GetNfeStatusServicoSoap(False,'https://homologacao.nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx?wsdl',HTTPRIO);
			 Resposta := qry.nfeStatusServicoNF(wCabec,WCorpo);


			 XMLRespos.XML.Text := Resposta;
			 XMLRespos.Active := true;

			 sCodigo := XMLRespos.ChildNodes.Nodes['retConsStatServ'].ChildNodes.Nodes['cStat'].Text;
			 sMotivo := XMLRespos.ChildNodes.Nodes['retConsStatServ'].ChildNodes.Nodes['xMotivo'].Text;
			 //alterar
			 If  sCodigo = '107' Then
			  sRetorno := XMLRespos.ChildNodes.Nodes['retConsStatServ'].ChildNodes.Nodes['dhRecbto'].Text;
			 XMLRespos.Active := False;
			 XMLDados.Active := False;
			 XMLDados.XML.Clear;
			 XMLRespos.XML.Clear;
			 if sCodigo = '107' then begin
			   // MessageDlg(sMotivo, mtInformation, [mbOK], 0);
				Result := True;
			 end else begin
				MessageDlg(sMotivo, mtWarning, [mbOK], 0);
				Result := False
			 end;
	   except
		  on E: Exception do
		  begin
			 XMLDados.XML.Clear;
			 XMLRespos.XML.Clear;
			 MessageDlg('Servidores da receita se encontram fora do ar.'+#10+sMotivo+#10+E.Message, mtError, [mbOk], 0);
			 Abort;
		  end;
	  end;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguem sabe como utilizar em delphi 2005 esse WSDL .pas?

unit NfeStaServHomoRS;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Borland types; however, they could also
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:string		  - "http://www.w3.org/2001/XMLSchema"

  nfeStatusServicoNF   = class;				 { "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico"'>http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico" }



  // ************************************************************************ //
  // Namespace : http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico
  // ************************************************************************ //
  nfeStatusServicoNF = class(TRemotable)
  private
	FnfeCabecMsg: WideString;
	FnfeDadosMsg: WideString;
  published
	property nfeCabecMsg: WideString read FnfeCabecMsg write FnfeCabecMsg;
	property nfeDadosMsg: WideString read FnfeDadosMsg write FnfeDadosMsg;
  end;


  // ************************************************************************ //
  // Namespace : http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico
  // soapAction: nfeStatusServicoNF
  // transport : http://schemas.xmlsoap.org/soap/http
  // style	 : document
  // binding   : NfeStatusServicoSoap
  // service   : NfeStatusServico
  // port	  : NfeStatusServicoSoap
  // URL	   : https://homologacao.nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx
  // ************************************************************************ //
  NfeStatusServicoSoap = interface(IInvokable)
  ['{5E393C9B-1708-45AE-674E-967E74889DFF}']
	procedure nfeStatusServicoNF(var parameters: nfeStatusServicoNF); stdcall;
  end;

function GetNfeStatusServicoSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): NfeStatusServicoSoap;


implementation

function GetNfeStatusServicoSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): NfeStatusServicoSoap;
const
  defWSDL = 'C:\Sistemas\Gerencial\XML\homologacao\RS\NfeStaServHomoRS.xml';
  defURL  = 'https://homologacao.nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx';
  defSvc  = 'NfeStatusServico';
  defPrt  = 'NfeStatusServicoSoap';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
	if UseWSDL then
	  Addr := defWSDL
	else
	  Addr := defURL;
  end;
  if HTTPRIO = nil then
	RIO := THTTPRIO.Create(nil)
  else
	RIO := HTTPRIO;
  try
	Result := (RIO as NfeStatusServicoSoap);
	if UseWSDL then
	begin
	  RIO.WSDLLocation := Addr;
	  RIO.Service := defSvc;
	  RIO.Port := defPrt;
	end else
	  RIO.URL := Addr;
  finally
	if (Result = nil) and (HTTPRIO = nil) then
	  RIO.Free;
  end;
end;


initialization
  InvRegistry.RegisterInterface(TypeInfo(NfeStatusServicoSoap), 'http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico', 'UTF-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(NfeStatusServicoSoap), 'nfeStatusServicoNF');
  InvRegistry.RegisterInvokeOptions(TypeInfo(NfeStatusServicoSoap), ioDocument);
  RemClassRegistry.RegisterXSClass(nfeStatusServicoNF, 'http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico', 'nfeStatusServicoNF');

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acredito ter encontrado o problema. O Problema não esta no parâmetro que você passa nfeCabecMsg e nfeDadosMsg e sim no SOAP XML que o Delphi monta. Se você checar a pagina 11 do manual de integração em diante. Vai ver diferenças . Acredito que esse seja o problema. Pelo menos foi o que pessoal do RS do sefaz me passou. Estou estudando e modificando os .PAS do compenente Delphi para obter sucesso.

Esse era o XML que o Delphi gerava:

<?xml version="1.0"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:nfeStatusServicoNF xmlns:NS1="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico"><nfeCabecMsg xsi:type="xsd:string"><?xml version="1.0" encoding="utf-8"?><cabecMsg xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.02"><versaoDados>1.07</versaoDados></cabecMsg></nfeCabecMsg><nfeDadosMsg xsi:type="xsd:string"><?xml version="1.0" encoding="utf-8"?><consStatServ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><cUF>43</cUF><xServ>STATUS</xServ></consStatServ></nfeDadosMsg></NS1:nfeStatusServicoNF></SOAP-ENV:Body></SOAP-ENV:Envelope>

E Esse é o exemplo do manual:

<?xml version="1.0" encoding="UTF-8"?>

<soap:Envelope

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<SOAP:Body>

<nfeRecepcaoLote xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeRecepcao">

<!----- XML Área de Cabeçalho ----->

<nfeCabecMsg>

<?xml version="1.0" encoding="UTF-8"?>

<cabecMsg xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.02">

<versaoDados>1.07</versaoDados>

</cabecMsg>

</nfeCabecMsg>

<!----- XML Área de Dados ----->

<nfeDadosMsg>

<?xml version="1.0" encoding="UTF-8"?>

<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.07">

 

No momento estou lendo essa pagina que me parece ser o problema:

http://delphi.newswhat.com/geoxml/forumhis...ups.borland.com

 

 

Alguem pode me ajudar nisso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Baixe o XML notepad 2007, coloque o exemplo do XML na mesma pasta do exemplo .XSD que voce deve ter como modelo e abra por este programa,

ele vai te dar algumas validações que podem estar sendo geradas com erro no XML, ou não estão de acordo com o modelo .XSD.

 

Acho que isso pode ajudar a resolver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido, apartir de hoje tenho NFE para todos os estados. Em delphi 2005 WIN32

 

Sim mas como você resolveu? Estou com o mesmo problema... será q não poderia postar as alterações q você fez ou já as classes q foram alteradas? Ficaria muito agradecido. Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.