Existe uma falha de segurança na API Java 3.0 da Cielo que expõe dados da resposta de uma transação.
O método parseResponse da calsse AbstractSaleRequest<Request, Response> chama o sysout com a string do corpo da resposta.
A chamada desse método imprime campos como nome do cliente que consta no cartão de crédito, números do cartão com apenas 6 dígitos omitidos, data de vencimento da cartão e ID do pagamento, entre outros.
Em tempos de LGPD, é inadimissível que isso seja exposto.
Abri um chamado pelo suporte da Cielo mas não surtiu efeito. Abri uma issue no github e até agora não responderam. A API parece abandonada e, portanto, deveria, ao menos, ser considerada depreciada.
A solução foi utilizar a API Rest, que não apresenta essa falha.
Segue o código do método.
/**
* Just decode the JSON into a Sale or create the exception chain to be
* thrown
*
* @param statusCode
* The status code of response
* @param responseBody
* The response sent by Cielo
* @return An instance of Sale or null
* @throws CieloRequestException
*/
private Response parseResponse(int statusCode, String responseBody, Class<Response> responseClassOf)
throws CieloRequestException {
Response response = null;
Gson gson = new Gson();
System.out.println(responseBody);
switch (statusCode) {
case 200:
case 201:
response = gson.fromJson(responseBody, responseClassOf);
break;
case 400:
CieloRequestException exception = null;
CieloError[] errors = gson.fromJson(responseBody, CieloError[].class);
for (CieloError error : errors) {
System.out.printf("%s: %s", "Cielo Error [" + error.getCode() + "]", error.getMessage());
exception = new CieloRequestException(error.getMessage(), error, exception);
}
throw exception;
case 404:
throw new CieloRequestException("Not found", new CieloError(404, "Not found"), null);
default:
System.out.printf("%s: %s", "Cielo", "Unknown status: " + statusCode);
}
return response;
}