Ver Mensaje Individual
  #1  
Antiguo 30-11-2023
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.467
Reputación: 21
newtron Va camino a la fama
Petición HTTP

Hola a tod@s.


Estoy intentando comunicarme con un "PinPad" (lector de tarjetas de crédito) y para eso me dicen que tengo que hacer una llamada con el siguiente formato:



El tema es que estoy un poco liado porque para esto imagino que tendría que usar un objeto HTTPClient insertando un JSONObject con el cuerpo del mensaje y tengo un par de problemas:


- No sé cómo crearlo teniendo en cuenta de que hay en medio una especie de array en el elemento "executeOptions".
- De todas formas he hecho una llamada de pruebas con un json que seguramente no valdrá, pero por si acaso, y el "PinPad" ni se inmuta y ya no sé si es que estoy haciendo algo mal o me estoy equivocando al poner ip o puerto o qué pasa.


El código que estoy usando es uno que he pillado de un ejemplo que puso nuestro compañero Keys y lo he tuneado:
Código Delphi [-]
procedure TForm2.Button2Click(Sender: TObject);var
  sAux,Enviar: String;
  LRequest: THTTPClient;

  LResponse: TStringStream;
  JSONData: TJSONObject;
  StringStream: TStringStream;
  valido : Boolean;
  vJSONArray: TJSONArray;
  JSONDataArray: TJSONObject;
begin

  LRequest := THTTPClient.Create;
  LResponse := TStringStream.Create;

  vJSONArray := TJSONArray.Create;
  JSONDataArray := TJSONObject.Create;
  JSONDataArray.AddPair('method','polling');
  vJSONArray.AddElement(JSONDataArray);

  //Objeto JSON para enviar los datos
  JSONData := TJSONObject.Create;
  JSONData.AddPair('pinpad', '*');
  JSONData.AddPair('opType','sale');
  JSONData.AddPair('cardNumberHashDomain','branch');
  JSONData.AddPair('createReceipt',TJSONFalse.Create);
  JSONData.AddPair('executeOptions', vJSONArray);
  JSONData.AddPair('language','es');
  JSONData.AddPair('requestedAmount',TJSONNumber.Create(200));
  JSONData.AddPair('requireConfirmation',TJSONFalse.Create);
  JSONData.AddPair('transactionReference','Operación N 256498');

  try

    Lrequest.ContentType := 'application/json';

    StringStream := TStringStream.Create(JSONData.ToString, TEncoding.UTF8);

    LRequest.Post('http://192.168.1.34:8887/transaction/start', StringStream , LResponse);

    JSONData := TJSONObject.ParseJSONValue(LResponse.DataString) as TJSONObject;

    if Assigned(JSONData) then begin

    end;

    JsonData.destroy;
    LResponse.Free;
    LRequest.Free;
    StringStream.Destroy;
  except
    JsonData.destroy;
    LResponse.Free;
    LRequest.Free;
    StringStream.Destroy;
  end;


end;


A ver si algún amable forero me pueda dar luz.


Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita