REALIZAR POST COM DELPHI INDY HTTP

02/11/2019

6

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!
Responder

Posts

04/11/2019

Luiz Rosa

Alguém aí pra dar uma luz?
Responder