Autorização com cardHash
O que é cardHash?
É a criptografia dos dados de cartões através da criptografia RSA. Mais especificamente RSA com padding “RSA_PKCS1_PADDING” e chave de 2048 bits. Com a finalidade de ter maior segurança no transporte de dados do cartão.
Então, os dados número, código, mês e ano de vencimento do cartão passam pela criptografia RSA, depois são convertidos para Base64, concatenados com o SessionKey. E por fim no campo do payload onde ficam os dados da compra, o campo cardInfo armazena o cardHash que é composto pelos dados do cartão criptografados seguindo o passo a passo acima.
Podemos dividir o uso em etapas para que funcione corretamente.
1. Obter autorização
Para se obter a autorização, existem dois modos. O primeiro é pelo portal do Gateway, e a segunda forma é solicitando via e-mail
2. Obter chave pública e chave de sessão
Após obter a autorização, deve se usá-la para obter a chave pública e a chave de sessão (sessionKey). Usando a autorização no cURL como no exemplo a seguir:
curl --location --request GET 'https://apidemo.gate2all.com.br/v2/checkout/generate/public-key' \
--header 'Authorization: Basic OTI5QTQ5OUQyNUQ0QzVEQjM5OUM6NzJCRUM0MDY4NTM4MENBNTYxNkU='
REQUISIÇÃO
GET
/v2/checkout/generate/publick-key
RESPOSTA
{
"publicKey": "----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArxaaBmRymdHfOzRXISKh9/YQfLLkcJXZzEtb5PNeWVxcpTU9Yym8Lsbq8UWtpZ6tkmHYCiwprRlBMZWbXUzaa3kSHNOXBR3y6u5kRSEcNJ/5Z3XCuczhjwD8NsxXDfB2kWxtKkKkqMFWpvk1yr2XBQtclUIDCH1EUTVEWdIiqAn1l6rZn9EIr/zjqVZDOiQqjkGzZo+Q/XeWld1z7/0ILNUvy0qj08/1v8N5nvTVW8J3DtZtl9XCBkjQdfKDmBmXLHi+wrM9UzfcmsCDjve6wquDxvnS/IXgeNefzZrlG6UML/sveTsexMOrTwP1GyinWzgqQGLR0E8ahILGhdQh+wIDAQAB\n-----END PUBLIC KEY-----",
"sessionKey": "d3fd3ef020ae48b7967236156ec35a2f"
}
O Card Hash gerado tem por padrão a vida de 10 minutos, porém isso pode ser alterado no momento em que a requisição for feita, onde o mínimo de tempo é de 1 minuto e o máximo é de 30 minutos. Para alterar o tempo de vida, basta adicionar o seguinte parâmetro, "?ttl=número desejado" após o "/public-key". Por exemplo, esse terá vida de 15 minutos:
REQUISIÇÃO
GET
/v2/checkout/generate/public-key?ttl=15
O cURL para a requisição:
curl --location --request GET 'https://apidemo.gate2all.com.br/v2/checkout/generate/public-key?ttl=15' \
--header 'Authorization: Basic OTI5QTQ5OUQyNUQ0QzVEQjM5OUM6NzJCRUM0MDY4NTM4MENBNTYxNkU='
Enviar o hash gerado, na transação
Após fazer a configuração e criptografar os dados do cartão, é necessário enviar na transação o hash gerado no campo:
cardInfo.cardHash
REQUISIÇÃO
POST
/v1/transactions
Os dados do cartão serão enviado criptografados no campo cardHash.
PROPRIEDADE | TIPO | TAMANHO | OBRIGATÓRIO | DESCRIÇÃO |
---|---|---|---|---|
cardInfo.cardHash | Texto | - | Não | Hash com os dados do cartão criptografados. |
{
"referenceId": "19893211234",
"amount": "1000",
"description": "Mouse sem fio",
"payment": {
"card": {
"type": 1,
"capture": false,
"installments": 1,
"interestType": 3,
"authenticate": 3,
"softDescriptor": "Pagamento GATE2all",
"cardInfo": {
"cardHash": "{hash-gerado-pela-lib}"
}
}
}
}
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
URL obj = new URL("https://api.gate2all.com.br/v1/transactions");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("content-type", "application/json");
con.setRequestProperty("authenticationApi", "demo");
con.setRequestProperty("authenticationKey", "demo");
String body = "{"
+ "\"referenceId\": \"123456789\","
+ "\"amount\": \"1000\","
+ "\"description\": \"TV LG 42\","
+ " \"payment\": {"
+ " \"card\": {"
+ " \"type\": 1,"
+ " \"capture\": true,"
+ " \"installments\": 1,"
+ " \"interestType\": 3,"
+ " \"softDescriptor\": \"EC02\","
+ " \"cardInfo\": {"
+ " \"cardHash\": \"{hash-gerado-pela-lib}\""
+ " }"
+ " }"
+ " }"
+ " "
+ "}";
con.setDoOutput(true);
DataOutputStream dos = new DataOutputStream(con.getOutputStream());
dos.writeBytes(body);
dos.flush();
dos.close();
Scanner scanner = new Scanner(new BufferedReader(new InputStreamReader(con.getInputStream())));
String response = scanner.nextLine();
scanner.close();
System.out.println(response);
RESPOSTA
A resposta retornará todos os campos (como ocorre na autorização).
{
"transactionId": "5a51ae6b-e91e-4b38-b596-e2acb77dca43",
"referenceId": "1489093308860",
"description": "Mouse sem fio",
"amount": "1000",
"status": 5,
"dtTransaction": "2020-12-09T18:01:17",
"payment": {
"card": {
"type": 1,
"installments": 1,
"capture": false,
"authenticate": 3,
"softDescriptor": "Pagamento GATE2all",
"interestType": 3,
"integrationType": 1,
"provider": "CIELO",
"providerVersion": "3.0",
"providerReference": "10069930690009510E9A",
"providerCode": "00",
"providerMessage": "Transação autorizada",
"saveCard": true,
"cardInfo": {
"number": "402400******2927",
"expirationMonth": "04",
"expirationYear": "2026",
"cvv": "***",
"brand": "VISA"
}
}
}
}
Updated over 1 year ago