REALIZAR POST COM DELPHI INDY HTTP

02/11/2019

0

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!
Luiz Rosa

Luiz Rosa

Responder

Posts

04/11/2019

Luiz Rosa

Alguém aí pra dar uma luz?
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar