Шифрование платежной карты
В целях обеспечения безопасности данные платежной карты шифруются с использованием RSA PKCS1
Для шифрования необходимо:
Запрос GET https://prapi.tarlanpayments.kz/card/api/v1/encryption/public-key Запрос GET https://sandboxapi.tarlanpayments.kz/card/api/v1/encryption/public-key для получения publick_key с помощью которого шифруются данные карт используя алгоритм RSA PKCS1
Формируем JSON. Для приема денежных средств необходимы все данные карты:
{"pan":"4049121234345656","exp_month":"04","exp_year":"26","cvc":"123","full_name":"Test test"}
Для вывод денежных средств необходимы только pan карты:{"pan":"4049121234345656"}
Шифруем получившийся объект используя алгоритм RSA PKCS1 и публичный ключ
Получившийся шифр кодируем в base64
Пример ответа GET https://prapi.test-tarlanpayments.kz/card/api/v1/encryption/public-key
{
"status": true,
"message": "Success",
"result": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxTl2VCVIQ3R6WWexWfEt\n80+mwQLOwVRSsmmoFZhYnuCgtdthJlb4CJ+LTup19ttHdU0h43r3W4urNDWWFuxf\nlKsIuuztP4Zc44TV4gG7YkHmz+iP90JrYzhE4yMaMYv0jTJ1lXBGTHk+Sfoa2nGg\nIdB/onVGfX27W7yjv62yZ/7V/GZljxP/8V3x/KRm/i05B4hsSE3DWw2AX+dOtvSj\n/JYXu713nGh4lsj9/CABT/GHkwY33e14YwXAS4P7f/ixGdcFudKU1QxIorFqOK0W\nDURmfnnoBuL1ailkHWb8LIu7FXUEbKi0QpmKsV5UnFWNuIQKtE/Mt+P6UJ/oGtdc\nHQIDAQAB\n-----END PUBLIC KEY-----"
}
<?php
function encryptCard($pan) {
$panData = json_encode(['pan' => $pan]);
// Получаем публичный ключ
$response = file_get_contents('https://prapi.tarlanpayments.kz/card/api/v1/encryption/public-key');
if ($response === FALSE) {
throw new Exception('Can not get public key');
}
$responseJson = json_decode($response, true);
if (!isset($responseJson['result'])) {
throw new Exception('Invalid response format');
}
$publicKeyPem = $responseJson['result'];
// Декодируем публичный ключ из формата PEM
$publicKey = openssl_pkey_get_public($publicKeyPem);
if ($publicKey === FALSE) {
throw new Exception('Failed to parse public key');
}
// Шифруем данные с использованием публичного ключа
$encryptedCard = '';
if (!openssl_public_encrypt($panData, $encryptedCard, $publicKey)) {
throw new Exception('Failed to encrypt data');
}
// Возвращаем зашифрованную строку в формате base64
return base64_encode($encryptedCard);
}
try {
$pan = '4049121234345656'; // Пример PAN, который можно заменить на любой другой
$encryptedCard = encryptCard($pan);
echo "Encrypted Card: " . $encryptedCard . PHP_EOL;
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . PHP_EOL;
}
?>
Last updated