Como enviar um arquivo XML via Web Service ?

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Adson
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 05 Mar 2019 10:36
Localização: GOIANIA/GO

Como enviar um arquivo XML via Web Service ?

Mensagem por Adson »

Olá,

Como todo bom novato, estou com uma dificuldade e necessito da ajuda de vocês.

Preciso enviar um algumas informações via Web Service e dentre essas informações, está um arquivo xml (schema file). Como faço isso ?

Código: Selecionar todos

// Aqui eu monto as informações para a requisição do POST
METHOD TopVendas_EnviaNFe() CLASS TObjectPro
********************************************************************************

::cServico := "/v1/nfe?cnpj=" + alltrim(::cnpj)          + ;
              "?chave="       + ::chavenfe               + ;
              "?dtnfe="       + ::dtnfe                  + ;
              "?total="       + alltrim(str(::totalnfe)) + ;
              "?xml="         + ::xml  // A variável xml contém uma string com o XML da nota, mas não é dessa forma.
              
::cTipo    := 'POST'

::XmlSoapPost()

Return

METHOD XmlSoapPost() CLASS TObjectPro
********************************************************************************
Local oServer, nPos := 0

oServer:=CreateObject( "MSXML2.ServerXMLHTTP")
oServer:Open( ::cTipo, alltrim(::cUrl)+::cServico , .f. )
oServer:setRequestHeader("Authorization", "Bearer " + alltrim(::token) )
oServer:SetRequestHeader("Content-Type" , "application/json" )
oServer:setRequestHeader("User-Agente"  , "meu_sistema" )
oServer:setRequestHeader("Versao"       , ::versao )

TRY
   oServer:Send(::cEnvio)
   oServer:WaitForResponse( 1000 )
CATCH
   ::cCode := 503
   nPos    := aScan( aCode, {|x| x[1] == ::cCode } )
   ::cMsg  := aCode[nPos,2]
   return
END

::cCode := oServer:status

nPos    := aScan( aCode, {|x| x[1] == ::cCode } )

If nPos > 0
   ::cMsg  := aCode[nPos,2]
Else
   ::cMsg  := 'CÓDIGO DE RETORNO NÃO ENCONTRADO '+STR(::cCode,3)
EndIf   

hb_jsonDecode( oServer:ResponseBody, @::aResultado )

Return

xHarbour 1.2.3 + HWGui
Anexos
Os parâmetros que devem ser enviados via WS
Os parâmetros que devem ser enviados via WS
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como enviar um arquivo XML via Web Service ?

Mensagem por JoséQuintas »

A questão não é como enviar o XML, e sim como o webservice quer que envie o XML.
Vai ter que confirmar com o webservice, ou nos manuais dele.

Pode tentar o software SoapUI pra ver se ajuda em alguma coisa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Adson
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 05 Mar 2019 10:36
Localização: GOIANIA/GO

Como enviar um arquivo XML via Web Service ?

Mensagem por Adson »

JoséQuintas escreveu:A questão não é como enviar o XML, e sim como o webservice quer que envie o XML.
Vai ter que confirmar com o webservice, ou nos manuais dele.

Pode tentar o software SoapUI pra ver se ajuda em alguma coisa.
Na figura que anexei está como deve ser a requisição para o WS (se fosse pra enviar o xml numa string seria simples).

Eu fiz um teste usando o Postman e deu certo, inclusive, tem até o recurso de gerar o código em várias linguagens, mas não tem xHarbour.

O que preciso é saber quais os métodos correspondentes devo usar no xHarbour.

Olha o exemplo em C#:

Código: Selecionar todos

var client = new RestClient("http://soma.clienteshow.com.br/v1/nfe?api_token=T8EyuXUxsHHeVJ72guExret1jEY0MMMTL7y1OqBa3y9Zubp2CQE");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Cookie", "XSRF-TOKEN=eyJpdiI6InZQck51SlpEYnc2dGdkdVUrTTRsOWc9PSIsInZhbHVlIjoiT2l2bERVMDZjOGNpYmJMUFZvN1k0cUlCZElnTUpoQ1lPaXBsTE9kaEc4TXBvUjZ2dWs4TVI5YytDeTFTS2RCSCIsIm1hYyI6IjBmNWMwYjdkODI2ZjkxMmE0NzQwZGIzNjZiNTFmNTExNGNjZjMzNTUyZjNmMTI2ODQ2ODc1NjlmYjY4ZDgwZTEifQ%3D%3D; laravel_session=eyJpdiI6IlM1ZHBIbXd1WnNiZVpCKzV3Qk1rQlE9PSIsInZhbHVlIjoiZVhmNHZ5RThqMWsrU205VjVcLzQ2RHl1SHdrdTA5XC9oczlOYXFRaHVlVTNyRU9WMUd4YjNxMk8yaDRZRHI5aXpEIiwibWFjIjoiZThlZjIwZWI3MGM5N2I4Y2M2MDJlNjgxZjljYmFiYjRkZDFlNzAzMDUzM2QyM2MxZGZkZTdmN2VjOWUxMWMxNSJ9");
request.AddParameter("cnpj", "18092664000193");
request.AddParameter("chave", "17210504677096000188550010005027031819923510");
request.AddParameter("dtnfe", "2021-05-14");
request.AddParameter("total", "1424.24");
request.AddFile("xml", "L6jOCuQh9/17210504677096000188550010005027031819923510-nfe.xml");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como enviar um arquivo XML via Web Service ?

Mensagem por JoséQuintas »

Adson escreveu:Eu fiz um teste usando o Postman e deu certo, inclusive, tem até o recurso de gerar o código em várias linguagens, mas não tem xHarbour.
Pede pra Visual Basic.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Adson
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 05 Mar 2019 10:36
Localização: GOIANIA/GO

Como enviar um arquivo XML via Web Service ?

Mensagem por Adson »

JoséQuintas escreveu:
Adson escreveu:Eu fiz um teste usando o Postman e deu certo, inclusive, tem até o recurso de gerar o código em várias linguagens, mas não tem xHarbour.
Pede pra Visual Basic.
Não tem pro VB, infelizmente. Essas são as linguagens disponíveis:
Anexos
Linguagens disponíveis
Linguagens disponíveis
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

Como enviar um arquivo XML via Web Service ?

Mensagem por dbsh »

Se você pretende mandar por linha de comando manda o exemplo com cUrl, ou manda o exemplo em javascrip-Fetch, ou em Object-c se você tem conhecimento de Delphi.
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Como enviar um arquivo XML via Web Service ?

Mensagem por rochinha »

Amiguinhos,

Veja estes dois exemplos:

No lugar do JSON pode estar a string contendo sentenças XML.

Código: Selecionar todos

Function EnviarJSONporWebService()
   local oWS, sDataRaw, sAuthorization := "blLKJSDFJhk...lreuIUYUYdisaiaitivvVGDVSAV"
   oWS := TOleAuto():New( "MSXML2.ServerXMLHTTP.6.0" )
   if ValType(oWS) <> "O"
      return nil
   endif
   sDataRaw := '{' + CRLF + ;
	  '"items": [' + CRLF + ;
	  '  {' + CRLF + ;
	  '    "name": "Meu Produto",' + CRLF + ;
	  '    "value": 7500,' + CRLF + ;
	  '    "amount": 1' + CRLF + ;
	  '  }' + CRLF + ;
	  '],' + CRLF + ;
	  '"customer": {' + CRLF + ;
	  '  "name": "Gorbadoc Oldbuck",' + CRLF + ;
	  '  "cpf": "94271564656",' + CRLF + ;
	  '  "phone_number": "5144916523"' + CRLF + ;
	  '},' + CRLF + ;
	  '"expire_at": "2018-12-20",' + CRLF + ;
	  '"configurations": {' + CRLF + ;
	  '      "fine": 200,' + CRLF + ;
	  '      "interest": 33' + CRLF + ;
	  '    },' + CRLF + ;
	  '"message": "Este é um espaço de até 80 caracteres para informar algo a seu cliente",' + CRLF + ;
	  '"repeats": 5,' + CRLF + ;
	  '"split_items": false' + CRLF + ;
	'}'
   // Certificado que vamos usar do armazem de certificados de Windows.
   oWS:SetOption( 3, "Nome do certificado" )
   oWS:Open( "POST", "https://sandbox.gerencianet.com.br/v1/carnet", .f. )
   // Caso seja necessario definir timeouts
   // Os valores sao em milisegundos
   oWS:setTimeouts( 15000, 15000, 600000, 600000 )
   // Metodo chamados
   oWS:SetRequestHeader( "Content-Type", "application/json" )
   oWS:SetRequestHeader( "Authorization", sAuthorization )
   // Enviamos a informacao JSON
   oWS:send( sDataRaw )
   MsgInfo( "Resposta: " + oWS:responsexml:xml)
   return ""    

function EnviarJSONporDOS()
   local sDataRaw, sParameters, sAuthorization := "blLKJSDFJhk...lreuIUYUYdisaiaitivvVGDVSAV"
   sDataRaw := '{' + CRLF + ;
               '"items": [' + CRLF + ;
               '  {' + CRLF + ;
               '    "name": "Meu Produto",' + CRLF + ;
               '    "value": 7500,' + CRLF + ;
               '    "amount": 1' + CRLF + ;
               '  }' + CRLF + ;
               '],' + CRLF + ;
               '"customer": {' + CRLF + ;
               '  "name": "Gorbadoc Oldbuck",' + CRLF + ;
               '  "cpf": "94271564656",' + CRLF + ;
               '  "phone_number": "5144916523"' + CRLF + ;
               '},' + CRLF + ;
               '"expire_at": "2018-12-20",' + CRLF + ;
               '"configurations": {' + CRLF + ;
               '      "fine": 200,' + CRLF + ;
               '      "interest": 33' + CRLF + ;
               '    },' + CRLF + ;
               '"message": "Este é um espaço de até 80 caracteres para informar algo a seu cliente",' + CRLF + ;
               '"repeats": 5,' + CRLF + ;
               '"split_items": false' + CRLF + ;
               '}'
   sParameters := [ --location --request POST 'https://sandbox.gerencianet.com.br/v1/carnet' ] + ;
                  [ --header 'Authorization: ] + sAuthorization + [' ] + ;
                  [ --header 'Content-Type: application/json' ] + ;
                  [ --data-raw ] + sDataRaw + ;
                  [ > GNCURL.TXT]
   cMacro      := "GNCURL.BAT"
   cComando    := "CURL.EXE " + sParameters
   errhandle   := fCreate( cMacro )         
   fWrite( errhandle, cComando )
   fClose( errhandle )
   //
   // MsgRun( "Aguarde o termino do processo", "Envio de Email...", {|| WaitRun( cMacro, 0 ) } )
   Run( cMacro, 0 )
   //
   cRetorno    := MemoRead( "GNCURL.TXT" )
   return nil
Os temos Bearer ou Basic não são necessários junto da string de autenticação.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Adson
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 05 Mar 2019 10:36
Localização: GOIANIA/GO

Como enviar um arquivo XML via Web Service ?

Mensagem por Adson »

dbsh escreveu:Se você pretende mandar por linha de comando manda o exemplo com cUrl, ou manda o exemplo em javascrip-Fetch, ou em Object-c se você tem conhecimento de Delphi.
cURL

Código: Selecionar todos

curl --location --request POST 'http://soma.clienteshow.com.br/v1/nfe?api_token=Y7ZEyuXUxsHHeVJ72guEoOh1jEY0MMMTL7y1OqBa3y9Zubp2CQE' \
--header 'Cookie: XSRF-TOKEN=eyJpdiI6IjhMXC9mbUVpTk5UTDl6eFAwa0ZRZnp3PT0iLCJ2YWx1ZSI6IkhCY3ZjU2poRmlxM3hyQzM1OW9CbGhLQnZUcVJzdG9OTUtLSzg3eE5oemFQb0M4dFNCUElpU0dyYVlUSUdSYnoiLCJtYWMiOiIyNDQ0MWQ2ZjE1MTVmNDgyYjc4YTJjN2E3ZDRlMzA1ODhlYjE3M2RlNzI1MjQxZWE0MGI0YWVjZTM2ODAwOWMzIn0%3D; laravel_session=eyJpdiI6InVLUkttNHR3Y2tFSGlNcmhTMU5XNUE9PSIsInZhbHVlIjoiaXNObTJMNlwvd2U1eVwvdk9qMDFZRUpHZHpBRlU1Z1wvaklnXC9ZXC92cW9ZcUhWaWtseFJ1UE80MFpEbzhEUVNmaEF4IiwibWFjIjoiMTQ3NTRjMmJiZTE3ZjhmOGE4OWFiMWUyYmViZjU4MzFlYTllNDA0MjFlY2M1NWI1YmRkNzQ3MjI2ODRlNTZiZSJ9' \
--form 'cnpj="18092664000193"' \[quote="dbsh"][/quote]
--form 'chave="17210504677096000188550010005027031819923510"' \
--form 'dtnfe="2021-05-14"' \
--form 'total="1424.24"' \
--form 'xml=@"Cijp-QYI1/17210504677096000188550010005027031819923510-nfe.xml"'

javascrip-Fetch

Código: Selecionar todos

var myHeaders = new Headers();
myHeaders.append("Cookie", "XSRF-TOKEN=eyJpdiI6IjhMXC9mbUVpTk5UTDl6eFAwa0ZRZnp3PT0iLCJ2YWx1ZSI6IkhCY3ZjU2poRmlxM3hyQzM1OW9CbGhLQnZUcVJzdG9OTUtLSzg3eE5oemFQb0M4dFNCUElpU0dyYVlUSUdSYnoiLCJtYWMiOiIyNDQ0MWQ2ZjE1MTVmNDgyYjc4YTJjN2E3ZDRlMzA1ODhlYjE3M2RlNzI1MjQxZWE0MGI0YWVjZTM2ODAwOWMzIn0%3D; laravel_session=eyJpdiI6InVLUkttNHR3Y2tFSGlNcmhTMU5XNUE9PSIsInZhbHVlIjoiaXNObTJMNlwvd2U1eVwvdk9qMDFZRUpHZHpBRlU1Z1wvaklnXC9ZXC92cW9ZcUhWaWtseFJ1UE80MFpEbzhEUVNmaEF4IiwibWFjIjoiMTQ3NTRjMmJiZTE3ZjhmOGE4OWFiMWUyYmViZjU4MzFlYTllNDA0MjFlY2M1NWI1YmRkNzQ3MjI2ODRlNTZiZSJ9");

var formdata = new FormData();
formdata.append("cnpj", "18092664000193");
formdata.append("chave", "17210504677096000188550010005027031819923510");
formdata.append("dtnfe", "2021-05-14");
formdata.append("total", "1424.24");
formdata.append("xml", fileInput.files[0], "[PROXY]");

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: formdata,
  redirect: 'follow'
};

fetch("http://soma.clienteshow.com.br/v1/nfe?api_token=Y7ZyuXUxsHHeVJ72guEoOh1jEY0MMMTL7y1OqBa3y9Zubp2CQE", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
Object-c

Código: Selecionar todos

#import <Foundation/Foundation.h>

dispatch_semaphore_t sema = dispatch_semaphore_create(0);

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://soma.clienteshow.com.br/v1/nfe?api_token=Y7ZyuXUxsHHeVJ72guEoOh1jEY0MMMTL7y1OqBa3y9Zubp2CQE"]
  cachePolicy:NSURLRequestUseProtocolCachePolicy
  timeoutInterval:10.0];
NSDictionary *headers = @{
  @"Cookie": @"XSRF-TOKEN=eyJpdiI6IjhMXC9mbUVpTk5UTDl6eFAwa0ZRZnp3PT0iLCJ2YWx1ZSI6IkhCY3ZjU2poRmlxM3hyQzM1OW9CbGhLQnZUcVJzdG9OTUtLSzg3eE5oemFQb0M4dFNCUElpU0dyYVlUSUdSYnoiLCJtYWMiOiIyNDQ0MWQ2ZjE1MTVmNDgyYjc4YTJjN2E3ZDRlMzA1ODhlYjE3M2RlNzI1MjQxZWE0MGI0YWVjZTM2ODAwOWMzIn0%3D; laravel_session=eyJpdiI6InVLUkttNHR3Y2tFSGlNcmhTMU5XNUE9PSIsInZhbHVlIjoiaXNObTJMNlwvd2U1eVwvdk9qMDFZRUpHZHpBRlU1Z1wvaklnXC9ZXC92cW9ZcUhWaWtseFJ1UE80MFpEbzhEUVNmaEF4IiwibWFjIjoiMTQ3NTRjMmJiZTE3ZjhmOGE4OWFiMWUyYmViZjU4MzFlYTllNDA0MjFlY2M1NWI1YmRkNzQ3MjI2ODRlNTZiZSJ9"
};

[request setAllHTTPHeaderFields:headers];
NSArray *parameters = @[
  @{ @"name": @"cnpj", @"value": @"18092664000193" }, 
  @{ @"name": @"chave", @"value": @"17210504677096000188550010005027031819923510" }, 
  @{ @"name": @"dtnfe", @"value": @"2021-05-14" }, 
  @{ @"name": @"total", @"value": @"1424.24" }, 
  @{ @"name": @"xml", @"fileName": @"Cijp-QYI1/17210504677096000188550010005027031819923510-nfe.xml" } 
];

NSString *boundary = @"----WebKitFormBoundary7MA4YWxkTrZu0gW";
NSError *error;
NSMutableString *body = [NSMutableString string];

for (NSDictionary *param in parameters) {
  [body appendFormat:@"--%@\r\n", boundary];
  if (param[@"fileName"]) {
    [body appendFormat:@"Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\r\n", param[@"name"], param[@"fileName"]];
    [body appendFormat:@"Content-Type: %@\r\n\r\n", param[@"contentType"]];
    [body appendFormat:@"%@", [NSString stringWithContentsOfFile:param[@"fileName"] encoding:NSUTF8StringEncoding error:&error]];
    if (error) {
      NSLog(@"%@", error);
    }
  } else {
    [body appendFormat:@"Content-Disposition:form-data; name=\"%@\"\r\n\r\n", param[@"name"]];
    [body appendFormat:@"%@", param[@"value"]];
  }
}
[body appendFormat:@"\r\n--%@--\r\n", boundary];
NSData *postData = [body dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:postData];

[request setHTTPMethod:@"POST"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
  if (error) {
    NSLog(@"%@", error);
    dispatch_semaphore_signal(sema);
  } else {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
    NSError *parseError = nil;
    NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
    NSLog(@"%@",responseDictionary);
    dispatch_semaphore_signal(sema);
  }
}];
[dataTask resume];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

Como enviar um arquivo XML via Web Service ?

Mensagem por dbsh »

as informações
cToken, cCookie
devem vir de um acesso anterior, não tem detalhe como ou onde esta estas informações

Código: Selecionar todos


#pragma /w3
#pragma /es2

PROCEDURE EnviaXml(cToken, cCookie, cCnpj, cChaveAcessoNFe, DtNFe, TotalNFe, cXml)
LOCAL cCmd

cToken          := "Y7ZEyuXUxsHHeVJ72guEoOh1jEY0MMMTL7y1OqBa3y9Zubp2CQE"
cCookie         := "eyJpdiI6IjhMXC9mbUVpTk5UTDl6eFAwa0ZRZnp3PT0iLCJ2YWx1ZSI6IkhCY3ZjU2poRmlxM3hyQzM1OW9CbGhLQnZUcVJzdG9OTUtLSzg3eE5oemFQb0M4dFNCUElpU0dyYVlUSUdSYnoiLCJtYWMiOiIyNDQ0MWQ2ZjE1MTVmNDgyYjc4YTJjN2E3ZDRlMzA1ODhlYjE3M2RlNzI1MjQxZWE0MGI0YWVjZTM2ODAwOWMzIn0%3D; laravel_session=eyJpdiI6InVLUkttNHR3Y2tFSGlNcmhTMU5XNUE9PSIsInZhbHVlIjoiaXNObTJMNlwvd2U1eVwvdk9qMDFZRUpHZHpBRlU1Z1wvaklnXC9ZXC92cW9ZcUhWaWtseFJ1UE80MFpEbzhEUVNmaEF4IiwibWFjIjoiMTQ3NTRjMmJiZTE3ZjhmOGE4OWFiMWUyYmViZjU4MzFlYTllNDA0MjFlY2M1NWI1YmRkNzQ3MjI2ODRlNTZiZSJ9"
cCnpj           := "12345678901234"
cChaveAcessoNFe := "17210504677096000188550010005027031819923510"
DtNFe           := DToS(DtNFe)
TotalNFe        := LTrim(Str(TotalNFe, 2))
cXml            := "17210504677096000188550010005027031819923510.xml"

cCmd :=  "curl.exe" ;
  + " --location --request POST 'http://soma.clienteshow.com.br/v1/nfe?api_token=" + cToken + "'" ;
  + " --header 'Cookie: XSRF-TOKEN=" + cCookie + "'" ;
  + " --form 'cnpj=" + AspaDupla(cCnpj) + "'" ;
  + " --form 'chave=" + AspaDupla(cChaveacessoNFe) + "'" ;
  + " --form 'dtnfe=" + AspaDupla(DtNFe) + "'" ;
  + " --form 'total=" + AspaDupla(TotalNFe) + "'" ;
  + " --form 'xml=@" + AspaDupla(cXml) + "'"

run (cCmd)

RETURN

 
FUNCTION AspaDupla(cStr)
RETURN '"' + cStr + '"'

010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como enviar um arquivo XML via Web Service ?

Mensagem por JoséQuintas »

O suporte do ifood apenas indica um vídeo mostrando como se usa pelo software postman.
Foi o único suporte recebido.
No postman, o que dá pra ver é isto:
apiifood.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Adson
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 05 Mar 2019 10:36
Localização: GOIANIA/GO

Como enviar um arquivo XML via Web Service ?

Mensagem por Adson »

dbsh escreveu:as informações
cToken, cCookie
devem vir de um acesso anterior, não tem detalhe como ou onde esta estas informações
Resolvido! Eis como ficou a implementação:

Código: Selecionar todos

STATIC FUNCTION EnviaXMLNFe(cToken, cCnpj, cChaveAcessoNFe, cDtNFe, cTotalNFe, cXml)
LOCAL cCmd

   FErase("response.tmp")
   
   cCmd := 'curl.exe' ;
     + ' --location --request POST '+AspaDupla('http://soma.clienteshow.com.br/v1/nfe?api_token=' + cToken) ;
     + ' --form cnpj='  + AspaDupla(cCnpj) ;
     + ' --form chave=' + AspaDupla(cChaveacessoNFe) ;
     + ' --form dtnfe=' + AspaDupla(cDtNFe) ;
     + ' --form total=' + AspaDupla(Alltrim(Str(cTotalNFe,12,2))) ;
     + ' --form xml=@'  + AspaDupla(cXML) ;
     + ' --silent --output response.tmp --write-out "%{http_code}"'

   MyRun( AspaDupla( cCmd ) )
   
   RETURN MemoRead("response.tmp")
 
STATIC FUNCTION AspaDupla(cStr)
   RETURN '"' + cStr + '"'   


FUNCTION MYRUN( cComando )

   local oShell, RET

   TRY
      oShell := CreateObject( "WScript.Shell" )
      RET    := oShell:Run( "%comspec% /c " + cComando, 0, .T. )
	CATCH
      RET := -1
	END
	
   oShell := NIL

RETURN if( RET == 0, .T., .F. )
Obrigado a todos pela força!
Responder