Página 1 de 1
Como enviar um arquivo XML via Web Service ?
Enviado: 31 Mai 2021 09:21
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
Como enviar um arquivo XML via Web Service ?
Enviado: 31 Mai 2021 11:41
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.
Como enviar um arquivo XML via Web Service ?
Enviado: 31 Mai 2021 14:23
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);
Como enviar um arquivo XML via Web Service ?
Enviado: 31 Mai 2021 17:25
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.
Como enviar um arquivo XML via Web Service ?
Enviado: 31 Mai 2021 18:17
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:
Como enviar um arquivo XML via Web Service ?
Enviado: 04 Jun 2021 18:51
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.
Como enviar um arquivo XML via Web Service ?
Enviado: 05 Jun 2021 03:04
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.
Como enviar um arquivo XML via Web Service ?
Enviado: 07 Jun 2021 12:04
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);
Como enviar um arquivo XML via Web Service ?
Enviado: 08 Jun 2021 18:46
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 + '"'
Como enviar um arquivo XML via Web Service ?
Enviado: 09 Jun 2021 01:25
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:
Como enviar um arquivo XML via Web Service ?
Enviado: 09 Jun 2021 14:19
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!