Para aqueles que quizerem gerar em suas aplicações arquivos formattados em XML para conversar com aplicativos de integração NFeou enviar requisições diretamente para os servidores deste serviço, podem usar estas funções:
/*
* Verifica status
* <?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"
* xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.07">
* <tpAmb>1</tpAmb>
* <cUF>51</cUF>
* <xServ>STATUS</xServ>
* </consStatServ>
*/
function NFEStatus( cNFe, cUF )
LOCAL oEDX, cXMLFile
cXMLFile := DtoS( date() )+"T"+StrTran( Time(), ":", "" )+"-ped-sta.XML"
EDX oEDX FILE cXMLFile VERSION "1.0" ENCODING "UTF-8" FORMATED
EDX OPEN MARK "consSitNFe" ;
ATTRIB "xmlns:xsi" VALUE "http://www.w3.org/2001/XMLSchema-instance" ;
ATTRIB "xmlns:xsd" VALUE "http://www.w3.org/2001/XMLSchema" ;
ATTRIB "versao" VALUE "1.07" ;
ATTRIB "xmlns" VALUE "http://www.portalfiscal.inf.br/nfe" OF oEDX
EDX OPEN MARK "tpAmb" TYPE "" TAG "2" AUTOCLOSE OF oEDX
EDX OPEN MARK "cUF" TYPE "" TAG cUF AUTOCLOSE OF oEDX
EDX OPEN MARK "xServ" TYPE "" TAG "STATUS" AUTOCLOSE OF oEDX
EDX CLOSE MARK OF oEDX
EDX END oEDX
return .t.
/*
* Cancelamento de NFe
* <?xml version="1.0" encoding="UTF-8"?>
* <cancNFe 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">
* <infCanc Id="NFe51080612345678901234550010000001041671821888">
* <tpAmb>2</tpAmb>
* <xServ>CANCELAR</xServ>
* <chNFe>51080612345678901234550010000001041671821888</chNFe>
* <nProt>151080000194296</nProt>
* <xJust>Cliente cancelou a venda nao desejando mais levar o produto</xJust>
* </infCanc>
* </cancNFe>
*/
function NFECancelamento( cNFe, nProt, xJust )
LOCAL oEDX, cXMLFile
cXMLFile := cNFe+".XML"
EDX oEDX FILE cXMLFile VERSION "1.0" ENCODING "UTF-8" FORMATED
EDX OPEN MARK "cancNFe" ;
ATTRIB "xmlns:xsi" VALUE "http://www.w3.org/2001/XMLSchema-instance" ;
ATTRIB "xmlns:xsd" VALUE "http://www.w3.org/2001/XMLSchema" ;
ATTRIB "versao" VALUE "1.07" ;
ATTRIB "xmlns" VALUE "http://www.portalfiscal.inf.br/nfe" OF oEDX
EDX OPEN MARK "infCanc" ATTRIB "Id" VALUE "NFe"+cNFe OF oEDX
EDX OPEN MARK "tpAmb" TYPE "" TAG "2" AUTOCLOSE OF oEDX
EDX OPEN MARK "xServ" TYPE "" TAG "CANCELAR" AUTOCLOSE OF oEDX
EDX OPEN MARK "chNFe" TYPE "" TAG cNFe AUTOCLOSE OF oEDX
EDX OPEN MARK "nProt" TYPE "" TAG str( nProt ) AUTOCLOSE OF oEDX
EDX OPEN MARK "xJust" TYPE "" TAG xJust AUTOCLOSE OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX END oEDX
return .t.
/*
* Inutiliza NFe
* <?xml version="1.0" encoding="UTF-8"?>
* <inutNFe 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">
* <infInut Id="NFe511234567890123455001000000101000000101">
* <tpAmb>2</tpAmb>
* <xServ>INUTILIZAR</xServ>
* <cUF>51</cUF>
* <ano>08</ano>
* <CNPJ>12345678901234</CNPJ>
* <mod>55</mod>
* <serie>1</serie>
* <nNFIni>101</nNFIni>
* <nNFFin>101</nNFFin>
* <xJust>Ocorreu uma falha no sistema que pulou a sequencia de numeracao</xJust>
* </infInut>
* </inutNFe>
*/
function NFEInutilizada( cNFe, cUF, cAno, cCNPJ, cMod, cSerie, nNFIni, nNFFin, xJust )
LOCAL oEDX, cXMLFile
cXMLFile := cNFe+".XML"
EDX oEDX FILE cXMLFile VERSION "1.0" ENCODING "UTF-8" FORMATED
EDX OPEN MARK "inutNFe" ;
ATTRIB "xmlns:xsi" VALUE "http://www.w3.org/2001/XMLSchema-instance" ;
ATTRIB "xmlns:xsd" VALUE "http://www.w3.org/2001/XMLSchema" ;
ATTRIB "versao" VALUE "1.07" ;
ATTRIB "xmlns" VALUE "http://www.portalfiscal.inf.br/nfe" OF oEDX
EDX OPEN MARK "infInut" ATTRIB "Id" VALUE cNFe OF oEDX
EDX OPEN MARK "tpAmb" TYPE "" TAG "2" AUTOCLOSE OF oEDX
EDX OPEN MARK "xServ" TYPE "" TAG "INUTILIZAR" AUTOCLOSE OF oEDX
EDX OPEN MARK "cUF" TYPE "" TAG cUF AUTOCLOSE OF oEDX
EDX OPEN MARK "ano" TYPE "" TAG cAno AUTOCLOSE OF oEDX
EDX OPEN MARK "CNPJ" TYPE "" TAG cCNPJ AUTOCLOSE OF oEDX
EDX OPEN MARK "mod" TYPE "" TAG cMod AUTOCLOSE OF oEDX
EDX OPEN MARK "serie" TYPE "" TAG cSerie AUTOCLOSE OF oEDX
EDX OPEN MARK "nNFIni" TYPE "" TAG str( nNFIni ) AUTOCLOSE OF oEDX
EDX OPEN MARK "nNFFin" TYPE "" TAG str( nNFFin ) AUTOCLOSE OF oEDX
EDX OPEN MARK "xJust" TYPE "" TAG xJust AUTOCLOSE OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX END oEDX
return .t.
/*
* Recebimento de NFe
* <?xml version="1.0" encoding="UTF-8"?>
* <consReciNFe xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
* xmlns:xsd="http://www.w3.org/2001/XMLSchema"
* versao="1.10"
* xmlns="http://www.portalfiscal.inf.br/nfe">
* <tpAmb>2</tpAmb>
* <nRec>510000000106704</nRec>
* </consReciNFe>
*/
function NFERecebimento( cNFe )
LOCAL oEDX, cXMLFile
cXMLFile := cNFe+".XML"
EDX oEDX FILE cXMLFile VERSION "1.0" ENCODING "UTF-8" FORMATED
EDX OPEN MARK "consReciNFe" ;
ATTRIB "xmlns:xsi" VALUE "http://www.w3.org/2001/XMLSchema-instance" ;
ATTRIB "xmlns:xsd" VALUE "http://www.w3.org/2001/XMLSchema" ;
ATTRIB "versao" VALUE "1.10" ;
ATTRIB "xmlns" VALUE "http://www.portalfiscal.inf.br/nfe" OF oEDX
EDX OPEN MARK "tpAmb" TYPE "" TAG "2" AUTOCLOSE OF oEDX
EDX OPEN MARK "nRec" TYPE "" TAG cNFe AUTOCLOSE OF oEDX
EDX CLOSE MARK OF oEDX
EDX END oEDX
return .t.
/*
* Situacao de NFe
* <?xml version="1.0" encoding="UTF-8"?>
* <consSitNFe 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>
* <xServ>CONSULTAR</xServ>
* <chNFe>51080612345678901234550010000001041671821888</chNFe>
* </consSitNFe>
*/
function NFESituacao( cNFe )
LOCAL oEDX, cXMLFile
cXMLFile := cNFe+".XML"
EDX oEDX FILE cXMLFile VERSION "1.0" ENCODING "UTF-8" FORMATED
EDX OPEN MARK "consSitNFe" ;
ATTRIB "xmlns:xsi" VALUE "http://www.w3.org/2001/XMLSchema-instance" ;
ATTRIB "xmlns:xsd" VALUE "http://www.w3.org/2001/XMLSchema" ;
ATTRIB "versao" VALUE "1.07" ;
ATTRIB "xmlns" VALUE "http://www.portalfiscal.inf.br/nfe" OF oEDX
EDX OPEN MARK "tpAmb" TYPE "" TAG "2" AUTOCLOSE OF oEDX
EDX OPEN MARK "xServ" TYPE "" TAG "CONSULTAR" AUTOCLOSE OF oEDX
EDX OPEN MARK "chNFe" TYPE "" TAG cNFe AUTOCLOSE OF oEDX
EDX CLOSE MARK OF oEDX
EDX END oEDX
return .t.
O seu codigo ficará bem formatado e bastará então criar a rotina de envio para completar.
Para maiores informações consultem o topico aqui para obter os arquivos necessários.