Получение карты
Метод для получения токена карты по проведенной транзакции.
URL
Метод: GET
- Production:
https://api.pay.kvell.groupv1/customers/{customer_key}/orders/{transaction}
- Stage:
https://api.pay.stage.kvell.group/v1/customers/{customer_key}/orders/{transaction}
Параметры запроса
Название | Тип данных | Обязательно | Описание |
---|---|---|---|
customer_key |
string | Да | Идентификатор покупателя в системе продавца |
transaction |
string | Да | Уникальный номер транзакции на стороне мерчанта |
Заголовки запроса
Название | Тип данных | Обязательно | Описание |
---|---|---|---|
X-Api-Key |
string | Да | Уникальный идентификатор магазина |
X-Signature |
string | Да | Подпись |
Подпись X-Signature
формируется конкатенацией X-Api-Key
, customer_key
и secret_key
. Формируется sha256
от полученной строки:
где secret_key
- секретный ключ, который находится в настройках магазина мерчанта;
Ответ запроса
Параметры ответа
Название |
Тип данных | Описание |
---|---|---|
customer_key |
string | Идентификатор покупателя в системе продавца |
customer_card_token |
string | Токен привязанной карты |
pan_mask |
string | Маска карты |
holder |
string | Имя держателя карты |
expire |
string | Срок действия карты в формате YYYY-MM |
transaction |
string | Уникальный номер транзакции на стороне мерчанта |
pan_hash_encrypted |
string | Зашифрованный хэш карты sha256(pan) с помощью публичного ключа магазина в base64-формате |
Пример ответа
{
"customer_key": "bind_card_test",
"customer_card_token": "4VNSbS7nF410G8WLEhUUUnflH2UKvWlHxIzN3Jr9JJs",
"pan_mask": "411111******1111",
"holder": "IVAN IVANOV",
"expire": "2028-12",
"transaction": "563bb54d-ed4c-4ca1-84a3-6a35c0178cf5",
"pan_hash_encrypted": "EPNS42BPO6yazHvd6BKd...ObPg6EKv7mYKUy7zc8s="
}
Примеры кода
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import serialization, hashes
import base64
# Чтение приватного ключа из PEM-файла
with open("private_key.pem", "rb") as key_file:
private_key = serialization.load_pem_private_key(
key_file.read(),
password=None
)
# Пример зашифрованного SHA256(PAN) (в base64)
encrypted_base64 = "base64_строка_от_pan_hash_encrypted"
encrypted_bytes = base64.b64decode(encrypted_base64)
# Расшифровка с использованием RSA-OAEP + SHA256
decrypted = private_key.decrypt(
encrypted_bytes,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Расшифрованный SHA256(PAN):", decrypted.decode())
const forge = require('node-forge');
const fs = require('fs');
// Чтение приватного ключа из PEM-файла
const privateKeyPem = fs.readFileSync('privatekey.pem', 'utf8');
const privateKey = forge.pki.privateKeyFromPem(privateKeyPem);
// Пример зашифрованного SHA256(PAN) (в base64)
const encryptedBase64 = 'base64_строка_от_pan_hash_encrypted';
const encryptedBytes = forge.util.decode64(encryptedBase64);
// Расшифровка с использованием RSA-OAEP + SHA256
const decryptedBytes = privateKey.decrypt(encryptedBytes, 'RSA-OAEP', {
md: forge.md.sha256.create(),
mgf1: {
md: forge.md.sha256.create()
}
});
console.log("Расшифрованный SHA256(PAN):", decryptedBytes);