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.

PROPRIEDADETIPOTAMANHOOBRIGATÓRIODESCRIÇÃO
cardInfo.cardHashTexto-NãoHash 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" } } } }

Did this page help you?