Hola!
No se qué versión de Delphi usas, pero este ejemplo sirve para versiones viejitas y nuevas:
En el uses de la unidad agregás:
Código Delphi
[-]IdServerIOHandler, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, McJson,
McJSon es una unidad de manejo de JSON, descargable desde
https://github.com/hydrobyte/McJSON
En la implementación agregás:
Código Delphi
[-]
function TForm1.GetResponse(Verb, URL: String; AText: String): String;
var
AHTTP: TIdHTTP;
SSL: TIdSSLIOHandlerSocketOpenSSL;
JsonToSend: TStringStream;
begin
AHTTP:= TIdHTTP.Create(nil);
SSL:= TIdSSLIOHandlerSocketOpenSSL.Create(nil);
AHTTP.IOHandler:= SSL;
AHTTP.AllowCookies:= True;
AHTTP.HTTPOptions:= [hoForceEncodeParams];
AHTTP.Request.BasicAuthentication:= True;
AHTTP.Request.Accept:= 'application/json';
AHTTP.Request.AcceptCharSet := 'utf-8';
AHTTP.Request.ContentType:= 'application/json';
AHTTP.Request.UserAgent:= 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0';
AHTTP.Request.CharSet:= 'utf-8';
SSL.SSLOptions.Method:= sslvSSLv23;
SSL.SSLOptions.Mode:= sslmUnassigned;
SSL.SSLOptions.VerifyMode:= [];
SSL.SSLOptions.VerifyDepth:= 0;
SSL.SSLOptions.SSLVersions := [sslvSSLv23, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
if AText <> '' then begin
JsonToSend := TStringStream.Create(Utf8Encode(AText));
end;
Result:= '';
if (URL <> '') then begin
if UpperCase(Verb) = 'GET' then begin
try
Result:= AHTTP.Get(URL);
except
on E: Exception do begin
Result:= '{"Error":"' + E.Message + '"}';
end;
end;
end
else begin
if UpperCase(Verb) = 'PUT' then begin
try
Result:= AHTTP.Put(URL, JsonToSend);
except
on E: Exception do begin
Result:= '{"Error":"' + E.Message + '"}';
end;
end;
end
else begin
if UpperCase(Verb) = 'POST' then begin
try
Result:= AHTTP.Post(URL, JsonToSend);
except
on E: Exception do begin
Result:= '{"Error":"' + E.Message + '"}';
end;
end;
end;
end;
end;
end;
SSL.Free;
AHTTP.Free;
end;
Un ejemplo de llamada y creación del JSON:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var AJSonStr: String;
AJSon: TMcJsonItem;
begin
AJSon:= TMcJsonItem.Create;
AJSon.Clear;
AJSon.Add('pinpad').AsString:= '*';
AJSon.Add('opType').AsString:= 'sale';
AJSon.Add('cardNumberHashDomain').AsString:= 'branch';
AJSon.Add('createReceipt').AsBoolean:= false;
AJSon.Add('executeOptions', jitObject);
AJSon.O['executeOptions'].Add('method').AsString:= 'pooling';
AJSon.Add('language').AsString:= 'es';
AJSon.Add('requestedAmount').AsNumber:= 200;
AJSon.Add('requireConfirmation').AsBoolean:= false;
AJSon.Add('transactionReference').AsString:= 'Operation N 45664';
AJSonStr:= AJSon.AsJSON;
AJSon.Free;
Caption:= GetResponse('POST', 'http://192.168.1.34:8887/transaction/start', AJSonStr);
end;
En el Caption del form tendrás la respuesta del equipo.
Espero te ayude!
Saludos
Lucho