Endpoint responsável por buscar uma chave RSA para encriptar os dados do cartão
O Card Hash é criado a partir de uma QueryString com valores URLencoded dos dados do cartão
card_number = 4901720077543335
card_expiration_date = 122013
card_cvv = 314
Neste caso a QueryString seria: card_number=4901720077543335&card_expiration_date=122013&card_cvv=314
Agora será necessário fazer uma criptografia pública com RSA e o padding PKCS1Padding usando a public_key que você recebeu na request passando a QueryString construída e converter o resultado para Base64
Você pode buscar um RSA Key para encriptar os dados do cartão para uma transação.
Gerando um Card Hash
O seu cardhash será compost por id + "" + encrypted_string_base64
ESSA CHAVE SERÁ VÁLIDA POR 90 SEGUNDOS APÓS A REQUISIÇÃO
Código de Exemplo em Php
<?
use GuzzleHttp\Client;
use phpseclib\Crypt\RSA;
// A sua Chave de integração belluno SANDBOX
$key = "";
$headers = array();
$headers['Content-Type'] = 'application/json';
$headers['Authorization'] = "Bearer " . $key;
$request = array();
$request["headers"] = $headers;
$client = new Client();
$response = $client->request(
'GET',
"https://ws-sandbox.bellunopag.com.br/transaction/card_hash_key",
$request
);
$responseDecoded = json_decode($response->getBody()->getContents());
$card_number = '4970100000000055';
$card_expiration_date = '112021';
$card_cvv = '123';
$stringHash = "card_number=$card_number&card_expiration_date=$card_expiration_date&card_cvv=$card_cvv";
$rsa = new RSA();
$rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
$rsa->loadKey($responseDecoded->rsa_public_key);
$crypto = $rsa->encrypt($stringHash);
$crypto_64 = base64_encode($crypto);
$card_hash = "" . $responseDecoded->id . "_" . $crypto_64 . "";
function getHashKey(uid) {
return $.ajax({
type: "GET",
url: `https://api.belluno.digital/link/${uid}/card_hash_key`,
headers: {
Authorization: "Basic acces_token",
},
dataType: "JSON",
success: function (response) { },
error: function (response) {
console.log(response);
},
});
}
function hash(id, public_key, card) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey(public_key);
card_string = `card_number=${card.number}&card_expiration_date=${card.expire}&card_cvv=${card.cv}`;
var encrypted = encrypt.encrypt(card_string);
hash = "" + id + "_" + encrypted;
return hash;
}
response = getHashKey();
card_hash = hash(response.id, response.public_key, {
number: '123...',
expire: '05/2026',
cv: '123'
});