API IFOOD RETORNANDO CARACTERES ESPECIAIS

ANDPAG 20/09/2022 09:32:00
#500468
Bom dia. Alguém já trabalhou com a API do Ifood? Eu estou tentando utiliza-la em um sistema meu desenvolvido em VB6 só que ela retorna os caracteres especiais abaixo:
 ?VJ-*?R??VJ?IU?RrJL J-,M-.Q??-.NL "???(d+d??(? ?? ?m+?

====================================================================================================================================
O Codigo que eu estou usando para teste é o que esta abaixo, Ele faz um POST que é para ele retornar o meu Codigo de autorização ou um Erro, tudo no formato JSON. Se alguém conseguir me ajudar eu agradeço muito. Obrigado.

Dim Ans As String
Dim oHTTP As MSXML2.XMLHTTP60, sBuffer As String
Dim url As String, comand As String
Dim vsClientId As String, cSecret As String

vsClientId = "Aqui_Vai_Meu_ClientId"

url = "https://merchant-api.ifood.com.br/authentication/v1.0/oauth/userCode?clientId=" & vsClientId

Set oHTTP = CreateObject("MSXML2.ServerXMLHTTP")
oHTTP.open "POST", url, False
oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

oHTTP.send
sBuffer = oHTTP.responseText

MsgBox sBuffer

Set oHTTP = Nothing
urlLaunch = sBuffer
FABRICIOWEB 20/09/2022 12:37:07
#500470
private string DecodeFromUtf8(string p)
{
try
{
string utf8_String = p;
byte[] bytes = Encoding.Default.GetBytes(utf8_String);
textBox1.Text = "";
textBox1.Text = Encoding.UTF8.GetString(bytes);
return Encoding.UTF8.GetString(bytes);
}


catch
{

}

return "";

}


var retorno = DecodeFromUtf8(oHTTP.responseText);

ANDPAG 20/09/2022 16:39:32
#500473
Citação:

:
private string DecodeFromUtf8(string p)
{
try
{
string utf8_String = p;
byte[] bytes = Encoding.Default.GetBytes(utf8_String);
textBox1.Text = "";
textBox1.Text = Encoding.UTF8.GetString(bytes);
return Encoding.UTF8.GetString(bytes);
}


catch
{

}

return "";

}


var retorno = DecodeFromUtf8(oHTTP.responseText);


Obrigado pelo retorno, mas não deu certo. Lembrando que eu estou precisando ter este retorno no vb6.
FUTURA 20/09/2022 17:48:21
#500475
Colega, a sua variável sBuffer deve estar recebendo retorno com codificação utf8, tenta decodificar ela, depois q receber o response, joga em outra, ex:

dados = DecodeUTF8(sBuffer)

abaixo a função para decode:

Function DecodeUTF8(S)
Dim I
Dim C
Dim n
S = S & " "
I = 1
Do While I <= Len(S)
C = asc(Mid(S, I, 1))
If C And &H80 Then
n = 1
Do While I + n < Len(S)
If (asc(Mid(S, I + n, 1)) And &HC0) <> &H80 Then
Exit Do
End If
n = n + 1
Loop
If n = 2 And ((C And &HE0) = &HC0) Then
C = asc(Mid(S, I + 1, 1)) + &H40 * (C And &H1)
Else
C = 191
End If
S = Left(S, I - 1) + Chr(C) + Mid(S, I + n)
End If
I = I + 1
Loop
DecodeUTF8 = S
End Function

OBS: Se der certo, vc me passa esse bloco ai, no momento não penso em mexer com isso, mas ja é algo.
FUTURA 27/09/2022 08:11:10
#500498
ANDPAG, Conseguiu algo com a função que te passei ?
ANDPAG 27/09/2022 08:43:56
#500499
Citação:

:
ANDPAG, Conseguiu algo com a função que te passei ?


Oi, bom dia. Obrigado pelo retorno na minha dúvida. Não deu certo, eu tinha feito esta conversão UTF antes mas com outra função. Eu pego o retorno que vem em caracteres especiais da API do Ifood mas quando passo para a função de conversão os caracteres permanecem iguais. Eu usei exatamente a função que voce passou. Abaixo segue o codigo que eu estou usando para ter o retorno da API do ifood. O Retorno que fica ainda são estes caracteres que estão entre os parenteses -->( ?VJ-*?R??VJ?IU?RrJL J-,M-.Q??-.NL "???(d+d??(? ?? ?m+? )

Se alguém tiver mais alguma ideia eu ficarei muito grato. Em um forum de Clipper o pessoal conseguiu resolver o problema dos caracteres especiais mas não citam como foi a solução. Se voce tiver uma chamada POST em VB.Net utilizando esta url de exemplo e puder me passar eu tbm testo com ela. Eu pretento fazer no VB6 por este sistema estar em VB, mas se necessário criar dll no .Net eu parto para este caminho. Esta é a primeira vez que eu pego uma API que retorna estes caracteres especiais.
===========================================================================================================================================
url = "https://merchant-api.ifood.com.br/authentication/v1.0/oauth/userCode?clientId=Aqui_Vai_O_Meu_ClienteID"

Set oHTTP = CreateObject("MSXML2.ServerXMLHTTP")
oHTTP.open "POST", url, False
oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

oHTTP.send
sBuffer = oHTTP.responseText

dados = DecodeUTF8(sBuffer)

MsgBox dados

Set oHTTP = Nothing
urlLaunch = sBuffer
FUTURA 28/09/2022 09:10:11
#500501
Esse cliente ID é ambiente de testes ?, c tem uma ID que possa passar pra testar ?
ANDPAG 29/09/2022 11:25:01
#500509
Citação:

:
Esse cliente ID é ambiente de testes ?, c tem uma ID que possa passar pra testar ?


Voce pode colocar qualquer valor neste clienteId, ele tem que retornar a resposta de erro abaixo:

<Response [400]>
{"error": {"code": "BadRequest", "message": "clientId is invalid"}}

Se o retorno for Ok ele tem que retornar algo parecido com os dados abaixo
<Response [200]>
{
"userCode": "HJLX-LPSQ",
"authorizationCodeVerifier": "g58pczze01xqxo38iqozohexeviqrm86tfhcqf5qxz9453oknyk6dfb3a0tlsnt98zw4y40i9izeokdkwgzgtogsu2zx7wn4t2f",
"verificationUrl": "https://portal.ifood.com.br/apps/code",
"verificationUrlComplete": "https://portal.ifood.com.br/apps/code?c=HJLX-LPSQ",
"expiresIn": 600
}

É ai que esta o problema. Tanto o retorno de erro ou o retorno com o codigo de autorização chegam todos em caracteres especiais. Eu deixei anexado imagem de uma parte do site do ifood onde eles fornecem a documentação da API.
Faça seu login para responder