Clipper On Line • Ver Tópico - Como enviar um arquivo XML via Web Service ?

Como enviar um arquivo XML via Web Service ?

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Como enviar um arquivo XML via Web Service ?

Mensagempor Adson » 31 Mai 2021 09:21

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 ?

// 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
schemafile.JPG
Os parâmetros que devem ser enviados via WS
Avatar de usuário

Adson
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 33
Data de registro: 05 Mar 2019 10:36
Cidade/Estado: GOIANIA/GO
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor JoséQuintas » 31 Mai 2021 11:41

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor Adson » 31 Mai 2021 14:23

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#:

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 de usuário

Adson
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 33
Data de registro: 05 Mar 2019 10:36
Cidade/Estado: GOIANIA/GO
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor JoséQuintas » 31 Mai 2021 17:25

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor Adson » 31 Mai 2021 18:17

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.jpg
Linguagens disponíveis
Avatar de usuário

Adson
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 33
Data de registro: 05 Mar 2019 10:36
Cidade/Estado: GOIANIA/GO
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor dbsh » 04 Jun 2021 18:51

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 de usuário

dbsh
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 115
Data de registro: 14 Jul 2004 14:19
Cidade/Estado: ES
Curtiu: 2 vezes
Mens.Curtidas: 15 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor rochinha » 05 Jun 2021 03:04

Amiguinhos,

Veja estes dois exemplos:

No lugar do JSON pode estar a string contendo sentenças XML.
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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor Adson » 07 Jun 2021 12:04

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
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
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
#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 de usuário

Adson
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 33
Data de registro: 05 Mar 2019 10:36
Cidade/Estado: GOIANIA/GO
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor dbsh » 08 Jun 2021 18:46

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


#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 de usuário

dbsh
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 115
Data de registro: 14 Jul 2004 14:19
Cidade/Estado: ES
Curtiu: 2 vezes
Mens.Curtidas: 15 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor JoséQuintas » 09 Jun 2021 01:25

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como enviar um arquivo XML via Web Service ?

Mensagempor Adson » 09 Jun 2021 14:19

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:

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!
Avatar de usuário

Adson
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 33
Data de registro: 05 Mar 2019 10:36
Cidade/Estado: GOIANIA/GO
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro