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);
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.