Jump to content
Fivewin Brasil

NFSe - IPM _ Pinhais/PR


toya

Recommended Posts

Preciso de uma ajuda na transcrição HTTP (Postman) para o Harbour:
ambiente Homologação

 

POST /atende.php?pg=rest&service=WNERestServiceNFSe&cidade=migra_pinhais HTTP/1.1
Host: treinamento.atende.net
Authorization: Basic MDkyNDczNDMwMDAxMjA6SXBtQDIwMjE=
Cookie: PHPSESSID=7pf56uromi3p4vnrj64mi264a1; cidade=migra_pinhais
Content-Length: 222
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="XML"; filename="/E:/JOBs/NFSe/xml_teste/S_NS9_000000001-nfSe.xml"
Content-Type: text/xml
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
cFile := "E:\JOBs\NFSe\xml_teste\S_NS9_000000001-nfSe.xml"

doc := CreateObject( "MSXML2.DOMDocument" )
oHTTP := CreateObject( "MSXML2.XMLHTTP" )    
oHTTP:Open( "POST" ,  cUrl, .f. )
oHTTP:SetRequestHeader( "Content-Type"   , "text/xml" )    
oHTTP:SetRequestHeader( "Authorization"  , "Basic " + cBasic )
oHTTP:SetRequestHeader( "Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" )  
oHTTP:SetRequestHeader( "Content-Disposition", 'form-data; name="XML"; filename=' + cFile )
http:Send()

Estou tendo o seguinte retorno:
 

<?xml version="1.0" encoding="ISO-8859-1"?>
<retorno>
	<mensagem>
		<codigo>9999 - Arquivo XML da Nota Fiscal de Servi?Eletr?a n?enviado!</codigo>
	</mensagem>
</retorno>

 

Link to comment
Share on other sites

Consegui até aqui...
Autentica, mas não envia o arquivo...

#Include "FiveWin.ch"

function NFSe()

    local cFile := ""
    local cUrl:= ""
    local cBasic := ""
    local cHost := ""
    local cRet := ""
    local cAux := ""
    local oHTTP := nil

    cUrl := "https://treinamento.atende.net/atende.php?pg=rest&service=WNERestServiceNFSe&cidade=migra_pinhais"
    cBasic := "MDkyNDczNDMwMDAxMjA6SXBtQDIwMjE="
    cFile := "H:\NFSe\S_NS9_000000003-nfSe.xml"
    cHost := "treinamento.atende.net"
    oHTTP := CreateObject( "Msxml2.ServerXMLHTTP.6.0" )    
    oHTTP:Open( "POST" ,  cUrl, .f. )
    oHTTP:SetRequestHeader( "Authorization", "Basic " + cBasic )
    oHTTP:SetRequestHeader( "Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" )  
    oHTTP:SetRequestHeader( "Content-Disposition", chr(34)+"form-data; name=\"+chr(34)+"XML\"+chr(34)+"; filename="+cFile+chr(34))
    oHTTP:SetRequestHeader( "Cookie", "PHPSESSID=ocqn90l0rfmovu1d8jrojju7s5; cidade=migra_pinhais" )
    oHTTP:SetRequestHeader( "Content-Type", "text/xml" )
    oHTTP:SetRequestHeader( "Host", cHost ) 
    ohttp:Send(  )
    cRet := oHTTP:responseText

    cAux += memoread( "nfsetoya.prg" )
    cAux += CRLF + CRLF + CRLF
    cAux += "//" + replicate( "-", 78 )
    cAux += CRLF
    cAux += "Retorno:"
    cAux += CRLF + CRLF
    cAux += cRet
    cAux += CRLF + CRLF + CRLF
    cAux += "//" + replicate( "-", 78 )
    cAux += CRLF + CRLF
    cAux += "no Postman:"
    cAux += CRLF + CRLF
    cAux += "Code e Retorno:"
    cAux += CRLF + CRLF
    cAux += memoread( "nfsetoya_postman.txt" )
    cAux += CRLF + CRLF
    MemoWrit( "NFSetoya.txt", cAux )
    cFile := cFilePath( GetModuleFileName( GetInstance() ) ) + "NFSetoya.txt"
    WinExec( "H:\Aplicativos\Notepad++\Notepad++.exe " + cFile )
 
return nil    


//------------------------------------------------------------------------------
Retorno:

<?xml version="1.0" encoding="ISO-8859-1"?>
<retorno>
	<mensagem>
		<codigo>9999 - Arquivo XML da Nota Fiscal de Servi?Eletr?a n?enviado!</codigo>
	</mensagem>
</retorno>


//------------------------------------------------------------------------------

no Postman:

Code e Retorno:

var client = new RestClient("https://treinamento.atende.net/atende.php?pg=rest&service=WNERestServiceNFSe&cidade=migra_pinhais");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic MDkyNDczNDMwMDAxMjA6SXBtQDIwMjE=");
request.AddHeader("Cookie", "PHPSESSID=ocqn90l0rfmovu1d8jrojju7s5; cidade=migra_pinhais");
request.AddFile("XML", "/H:/NFSe/S_NS9_000000003-nfSe.xml");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);


<?xml version="1.0" encoding="ISO-8859-1"?>
<retorno>
	<mensagem>
	<codigo>00209 - J� consta uma NFSe para o referido prestador de servi�o com o mesmo IDENTIFICADOR de arquivo
	</codigo></mensagem>
	</retorno>

 

Link to comment
Share on other sites

Toya, esta mensagem:

 

00209 - J� consta uma NFSe para o referido prestador de servi�o com o mesmo IDENTIFICADOR de arquivo

Me parece que o arquivo subiu uma vez, mas quando você tentou de novo e ele bateu lá reclamou da duplicidade no identificador. 

Meus dois centavos sobre o assunto. 

Link to comment
Share on other sites

Toya,

Sobre a opção usando cURL, notei um detalhe: existe uma opção específica para informar que um arquivo externo precisa ser enviado junto à requisição cURL.

Veja um exemplo lendo dados do disco:

	cUL :=  'teste.xml'

	? curl_easy_setopt( curl, HB_CURLOPT_UL_FILE_SETUP, cUL )
	? curl_easy_setopt( curl, HB_CURLOPT_INFILESIZE, hb_FSize( cUL ) ), hb_FSize( cUL )

Existe ainda uma outra forma de enviar um conteúdo:  quando você precisa enviar os dados que estão na memória e "simular" o upload de um arquivo:

      tmp := "Insira o conteudo do arquivo aqui."

      ? curl_easy_setopt( curl, HB_CURLOPT_UL_BUFF_SETUP, tmp )
      ? curl_easy_setopt( curl, HB_CURLOPT_INFILESIZE, Len( tmp ) ), Len( tmp )

Veja se lhe ajuda, vai dando um grito aê.

Abraços!

Link to comment
Share on other sites

  • 1 month later...

Aos interessados, a solução que encontrei:

 

	cBase64 := alltrim( hDados["login"] ) + ":" + alltrim( hDados["senha"] )
	cBasic := alltrim( HB_Base64Encode( cBase64, len( cBase64 ) ) )
	cBasic := strtran( cBasic, CRLF, "" )
	cXmlFile := memoread(cFile)
	
	oHTTP := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
	oHttp:Open("POST", cUrl, .f. )
	oHTTP:SetRequestHeader( "Authorization", "Basic " + cBasic )
	oHTTP:SetRequestHeader( "Host", cHost ) 
	oHTTP:SetRequestHeader( "Content-Type", "multipart/form-data; boundary=" + cBoundary )
	cTexto := '--'
	cTexto += cBoundary
	cTexto += CRLF
	cTexto += 'Content-Disposition: form-data; name="XML"; filename="'+cFile+'"'
	cTexto += CRLF
	cTexto += 'Content-Type: application/xml'
	cTexto += CRLF
	cTexto += CRLF
	cTexto += cXmlFile
	cTexto += CRLF
	cTexto += CRLF
	cTexto += '--'
	cTexto += cBoundary
	cTexto += '--'
	oHttp:Send( cTexto )
	cRet  := oHttp:ResponseText

 

Link to comment
Share on other sites

Amiguinhos,

Parabens Toya, isto merece comemoração com cerveja e churrasco.

Mas acho que você estava no caminho certo quando abriu o tópico, pois só faltava passar o conteúdo do arquivo no método Send().

Mas como quem programou o webservice quis pregar uma peça em você, foi necessário perder uns fios de bigode para vencê-los.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...