Página 1 de 2
Uso de API autenticacao de token
Enviado: 24 Mar 2026 13:22
por Alexandre Silva
pessoal
Porque com as mesmas chaves e cofiguracoes, funciona no Postman
e nao funciona no aplicativo ?
retorna
{
"error":"invalid_request",
"error_description":"Missing or duplicate parameters"
}
Código: Selecionar todos
*-------------------------
#include 'inkey.ch'
function main()
local getlist:={},oData:=hb_Hash(),cResposta,oJson,vteste
local curl:='https://apigateway.digitalcomm.com.br:8443/auth/oauth/v2/token'
cls
oData["client_id"]:="b11817f1-36c5-4119-b0a8-d95e8c960e1b"
oData["client_secret"]:="f3b469c2-88a0-4eca-9116-fdc92d936e17"
oData["scope"]:="dclogg-internal"
oData["grant_type"]:="client_credentials"
cResposta:=mandaserv('POST',cUrl, oData)
alert(cresposta)
if at('access_token',cresposta)>0
varqret:='token.txt'
HB_MemoWrit(varqret,cresposta)
else
varqret:='errolog.txt'
HB_MemoWrit(varqret,cresposta)
alert('Problemas ! Nao gerou novo login')
endif
retu
*------------------------------
* manda requisicao ao servidor
*------------------------------
function mandaserv(vmetodo,cUrl, oData)
local oWeb, cResposta
oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
oWeb :Open(vmetodo, cUrl, .F. )
oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
oWeb :Send( hb_JsonEncode( oData ) )
oWeb :WaitForResponse( 300 )
cResposta := oWeb:ResponseBody()
return cResposta
Re: Uso de API autenticacao de token
Enviado: 25 Mar 2026 02:07
por rochinha
Amiguinhos,
Você está usando:
Código: Selecionar todos
oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
oWeb :Send( hb_JsonEncode( oData ) )
Quando deveria fazer:
Código: Selecionar todos
oWeb :SetRequestHeader( "Content-Type", "application/json")
oWeb :Send( hb_JsonEncode( oData ) )
Você expôs suas
client_id e
client_secret e este vazamento permite a qualquer um disparar comandos para API e travar o seu acesso.
Nunca divulgue estes valores desta forma. Troque-os imediatamente e volte a consumir sua API.
Re: Uso de API autenticacao de token
Enviado: 25 Mar 2026 09:04
por Alexandre Silva
Obrigado
mas nao funcionou..
Mais alguma ideia ?
Quanto a exposicao dos dados, eu sei, sao dados de testes apenas, mas tambem vou mudar
Re: Uso de API autenticacao de token
Enviado: 25 Mar 2026 09:26
por rochinha
Amiguinhos,
O Postman dá opções de visualização de comandos cUrl, C#, VB, PHP, etc?
Mostre o cUrl desta requisição para termos idéia.
Re: Uso de API autenticacao de token
Enviado: 25 Mar 2026 09:36
por Alexandre Silva
segue
Código: Selecionar todos
curl --location 'https://apigateway.digitalcomm.com.br:8443/auth/oauth/v2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=b11817f1-36c5-4119-b0a8-d95e8c960e1b' \
--data-urlencode 'client_secret=f3b469c2-88a0-4eca-9116-fdc92d936e17' \
--data-urlencode 'scope=dclogg-internal' \
--data-urlencode 'grant_type=client_credentials'
Re: Uso de API autenticacao de token
Enviado: 25 Mar 2026 16:47
por JoséQuintas
Erro: parâmetros inválidos ou desconhecidos
Se tá tudo lá e não aceitou, provavelmente não está do jeito que deveria.
Sei lá... num chute...
urlencode equivalente a parâmetros passados no ENDEREÇO(URL),
o tradicional endereço?parametro_1¶metro_2¶metro_n
Re: Uso de API autenticacao de token
Enviado: 25 Mar 2026 17:39
por Alexandre Silva
Alguem pode fazer a gentileza de compilar pra ver se funciona ?
Pra eu saber que nao é minha versao de windows ou minha versao de harbour. (3.0.2 console)
Re: Uso de API autenticacao de token
Enviado: 26 Mar 2026 09:46
por JoséQuintas
meu chute estava certo, assim funciona:
Código: Selecionar todos
*-------------------------
#include 'inkey.ch'
FUNCTION main()
LOCAL oData,cResposta,varqret
LOCAL curl:='https://apigateway.digitalcomm.com.br:8443/auth/oauth/v2/token'
CLS
oData := "?client_id=b11817f1-36c5-4119-b0a8-d95e8c960e1b"
oData += "&client_secret=f3b469c2-88a0-4eca-9116-fdc92d936e17"
oData += "&scope=dclogg-internal"
oData += "&grant_type=client_credentials"
cResposta:=mandaserv('POST',cUrl, oData)
Alert(cresposta)
IF at('access_token',cresposta)>0
varqret:='token.txt'
HB_MemoWrit(varqret,cresposta)
ELSE
varqret:='errolog.txt'
HB_MemoWrit(varqret,cresposta)
Alert('Problemas ! Nao gerou novo login')
ENDIF
RETURN Nil
*------------------------------
* manda requisicao ao servidor
*------------------------------
FUNCTION mandaserv(vmetodo,cUrl, oData)
LOCAL oWeb, cResposta
oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
oWeb :Open(vmetodo, cUrl + oData, .F. )
oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
oWeb :Send("") // hb_JsonEncode( oData ) )
oWeb :WaitForResponse( 300 )
cResposta := oWeb:ResponseBody()
RETURN cResposta
d:\temp>type token.txt
{
"access_token":"c39def9b-7947-440f-8280-70d4ffb7b2bb",
"token_type":"Bearer",
"expires_in":1800,
"scope":"dclogg-internal"
Re: Uso de API autenticacao de token
Enviado: 26 Mar 2026 10:24
por Alexandre Silva
Voce mudou alguma coisa ?
como vc compilou ? eu uso harbour 3.2 console
sera que falta algo na minha compilacao ?
Re: Uso de API autenticacao de token
Enviado: 26 Mar 2026 10:58
por JoséQuintas
Com certeza alterei.
O que era hash array/json virou string
Código: Selecionar todos
oData := "?client_id=b11817f1-36c5-4119-b0a8-d95e8c960e1b"
oData += "&client_secret=f3b469c2-88a0-4eca-9116-fdc92d936e17"
oData += "&scope=dclogg-internal"
oData += "&grant_type=client_credentials"
Foi acrescentado no endereço, sem enviar nada.
Código: Selecionar todos
FUNCTION mandaserv(vmetodo,cUrl, oData)
LOCAL oWeb, cResposta
oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
oWeb :Open(vmetodo, cUrl + oData, .F. ) // <==== soma no endereço
oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
oWeb :Send("") // hb_JsonEncode( oData ) ) <=== envia vazio o outro tá comentado
oWeb :WaitForResponse( 300 )
cResposta := oWeb:ResponseBody()
RETURN cResposta
Re: Uso de API autenticacao de token
Enviado: 26 Mar 2026 11:24
por Alexandre Silva
Blz, deu certo,
Muito obrigado
Mas ai como fica quando o arquivo tiver sub niveis ?
Com hb_hash da pra montar os sub niveis
Re: Uso de API autenticacao de token
Enviado: 26 Mar 2026 12:52
por JoséQuintas
urlencode é parâmetros no endereço.
se for pra ser json, vai json, igual fez antes.
Vai ter que identificar, conforme manual do webservice e/ou esse programa de teste, se é de um jeito, de outro, ou os dois juntos.
É como eu disse:
cada webservice, ou cada etapa de um webservice, pode ser de um jeito diferente.
Talvez dê pra usar IA, colocando os comandos curl, e pedir pra traduzir pra xmlhttp.
No Windows tem co-pilot grátis, no google também mostra lá a IA grátis, do próprio google, ou chatgpt.
Dá pra tentar um desses como ajuda.
No fórum, se alguém já fez pra esse mesmo webservice, poderia ajudar mais diretamente.
Re: Uso de API autenticacao de token
Enviado: 02 Abr 2026 16:42
por lucimauro
Da para criar sim alexandre
Re: Uso de API autenticacao de token
Enviado: 02 Abr 2026 18:34
por Alexandre Silva
Opa
Entao, segui a dica ai e fiz uma consulta ao chat GPT
Interessando que para o token me passou e funcionou assim
O corpo entra assim
Código: Selecionar todos
cBody := "client_id=" + cClientId + ;
"&client_secret=" + cClientSecret + ;
"&scope=dclogg-internal" + ;
"&grant_type=client_credentials"
oHttp := CreateObject("WinHttp.WinHttpRequest.5.1")
oHttp:Open("POST", cUrl, .F.)
oHttp:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
oHttp:Send(cbody)
cResponse := oHttp:ResponseText
cToken := extraiJson( cResponse, "access_token" )
MAS AQUI na operacao pra mandar um xml com os dados da compra do pedagio fiz na mesma forma
só que é pra mandar um xml ( nao tem soapAction eles me passaram ok, o sistema se baseia na tag do xml )
O suporte deles me disse:
' parece que o xml nao esta sendo mandado no formato correto'
Deve ser um pequeno ajuste ai, Alguma dica ?
Código: Selecionar todos
function mandaefrete()
local oHttp,cXml,cResponse,varqret:='retcompra.xml
local curl:='https://apigateway.digitalcomm.com.br:8443/dclogg-contaunica/dev/soap'
ctoken:=tokenefrete()
cxml:=xmlcompra() // xml normal com dados para compra do pedagio
oHttp := CreateObject("WinHttp.WinHttpRequest.5.1")
oHttp:Open("POST", cUrl, .F.)
oHttp:SetRequestHeader("Content-Type", "text/xml; charset=utf-8")
oHttp:SetRequestHeader("Authorization", "Bearer " + cToken)
oHttp:Send(cxml)
cResponse := oHttp:ResponseText
alert(cresponse)
RETURN cResponse
estou tendo esse retorno
<soap:Envelope xmlns:soap="
http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Transaction silently rolled back because it has been marked as rollback-only</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Re: Uso de API autenticacao de token
Enviado: 03 Abr 2026 09:21
por lucimauro
Não conheço essa API mais no seria o caso de envelopar o arquivo xml para envio usando a função hb_Base64Encode( )?
e só um chute