REALIZAR POST COM DELPHI INDY HTTP
Boa tarde, pessoal!
Talvez, alguém aqui tenha uma luz para mim.
Estou com um sério problema, estou fazendo uma integração com a API do iFood com o Delphi.
Eu devo subir um cadastro em JSON para o site, porém, está me retornando alguns erros.
Esse é o código que estou utilizando no momento:
procedure TfrmPrincipal.btnCriarProdutoClick(Sender: TObject);
var
iStringListCategoria : TStringList;
iRespostaIfood : string;
iJSON : string;
iJSONStream : TStringStream;
iJSONEnviar : TIdMultipartFormDataStream;
begin
iJSONEnviar := TIdMultiPartFormDataStream.Create;
try
iJSON := ('"sku": {"merchantId": Aqui o merchantID,' +
'"externalCode":"200",' +
'"availability": "AVAILABLE",' +
'"name": "X BURGUER - TESTE",' +
'"description": "PÃO, HAMBURGUER E QUEIJO",' +
'"order": 1,' +
'"price": {' +
'"originalValue": 0,' +
'"promotional": false,' +
'"value": 12.50}'+
'}}');
mRetorno.Lines.Clear;
mRetorno.Lines.Add(iJSON);
iJSONStream := TStringStream.Create(iJSON, TEncoding.UTF8);
iJSONEnviar.AddFormField('sku', 'multipart/form-data', 'UTF-8', iJSONStream);
//Configura o HTTP
IdHTTPConexao.Request.CustomHeaders.Clear;
IdHTTPConexao.Request.CharSet := 'UTF-8';
IdHTTPConexao.Request.ContentType := 'multipart/form-data';
IdHTTPConexao.Request.ContentEncoding := 'UTF-8';
IdHTTPConexao.Request.ContentDisposition := 'form-data;name="sku"';
IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'multipart/form-data');
IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json');
IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken);
IdHTTPConexao.Response.CharSet := 'UTF-8';
try
iRespostaIfood := IdHTTPConexao.Post('https://pos-api.ifood.com.br/v1.0/skus', iJSONEnviar);
//201 = Indica que novos parâmetros foram criados com sucesso
if IdHTTPConexao.ResponseCode = 201 then
Application.MessageBox(PWideChar('Produto Cadastrado com Sucesso!'),
'Informação', MB_OK+MB_ICONINFORMATION);
except
on e:EIdHTTPProtocolException do
begin
if (e.ErrorCode <> 200) or (e.ErrorCode <> 201) then
begin
Application.MessageBox(PWideChar('Atenção! Ocorreu ao Cadastrar Produto no iFood. ' +
e.ErrorMessage),
'Aviso', MB_OK+MB_ICONWARNING);
Exit;
end;
end;
end;
finally
end;
No momento esse código está me retornando o seguinte erro:
Atenção! Ocorreu ao Cadastrar Produto no iFood.
<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Sat Nov 02 16:18:20 GMT-03:00 2019</div><div>There was an unexpected error (type=Unsupported Media Type, status=415).</div><div>Unsupported Media Type</div></body></html>
Se alguém tiver alguma luz, do que pode estar errado no código ou auxiliar para eu realizar esse post, seria de gande importância.
Obrigado, galera!
Talvez, alguém aqui tenha uma luz para mim.
Estou com um sério problema, estou fazendo uma integração com a API do iFood com o Delphi.
Eu devo subir um cadastro em JSON para o site, porém, está me retornando alguns erros.
Esse é o código que estou utilizando no momento:
procedure TfrmPrincipal.btnCriarProdutoClick(Sender: TObject);
var
iStringListCategoria : TStringList;
iRespostaIfood : string;
iJSON : string;
iJSONStream : TStringStream;
iJSONEnviar : TIdMultipartFormDataStream;
begin
iJSONEnviar := TIdMultiPartFormDataStream.Create;
try
iJSON := ('"sku": {"merchantId": Aqui o merchantID,' +
'"externalCode":"200",' +
'"availability": "AVAILABLE",' +
'"name": "X BURGUER - TESTE",' +
'"description": "PÃO, HAMBURGUER E QUEIJO",' +
'"order": 1,' +
'"price": {' +
'"originalValue": 0,' +
'"promotional": false,' +
'"value": 12.50}'+
'}}');
mRetorno.Lines.Clear;
mRetorno.Lines.Add(iJSON);
iJSONStream := TStringStream.Create(iJSON, TEncoding.UTF8);
iJSONEnviar.AddFormField('sku', 'multipart/form-data', 'UTF-8', iJSONStream);
//Configura o HTTP
IdHTTPConexao.Request.CustomHeaders.Clear;
IdHTTPConexao.Request.CharSet := 'UTF-8';
IdHTTPConexao.Request.ContentType := 'multipart/form-data';
IdHTTPConexao.Request.ContentEncoding := 'UTF-8';
IdHTTPConexao.Request.ContentDisposition := 'form-data;name="sku"';
IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'multipart/form-data');
IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json');
IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken);
IdHTTPConexao.Response.CharSet := 'UTF-8';
try
iRespostaIfood := IdHTTPConexao.Post('https://pos-api.ifood.com.br/v1.0/skus', iJSONEnviar);
//201 = Indica que novos parâmetros foram criados com sucesso
if IdHTTPConexao.ResponseCode = 201 then
Application.MessageBox(PWideChar('Produto Cadastrado com Sucesso!'),
'Informação', MB_OK+MB_ICONINFORMATION);
except
on e:EIdHTTPProtocolException do
begin
if (e.ErrorCode <> 200) or (e.ErrorCode <> 201) then
begin
Application.MessageBox(PWideChar('Atenção! Ocorreu ao Cadastrar Produto no iFood. ' +
e.ErrorMessage),
'Aviso', MB_OK+MB_ICONWARNING);
Exit;
end;
end;
end;
finally
end;
No momento esse código está me retornando o seguinte erro:
Atenção! Ocorreu ao Cadastrar Produto no iFood.
<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Sat Nov 02 16:18:20 GMT-03:00 2019</div><div>There was an unexpected error (type=Unsupported Media Type, status=415).</div><div>Unsupported Media Type</div></body></html>
Se alguém tiver alguma luz, do que pode estar errado no código ou auxiliar para eu realizar esse post, seria de gande importância.
Obrigado, galera!
Luiz Rosa
Curtidas 0
Respostas
Luiz Rosa
02/11/2019
Alguém aí pra dar uma luz?
GOSTEI 0