Автентифікація

Цей API використовує формат JSON для отримання тіл запитів і передавання відповідей.

API використовує RSA-підписи (передаються в заголовку x-sign) для перевірки походження запиту. Підпис створюється на основі тіла запиту, шифрується в base64 і перевіряється аналогічним способом.

Генерація підписів

echo -n '{
	"merchant_id": 2,
	"client_first_name": "Іванов",
	"client_last_name": "Іван",
	"client_patronymic": "Іванович",
	"client_phone": "+380982850654",
	"metadata": { "lol": "kek" },
	"callback_url": "https://example.com"
}' | openssl dgst -sha256 -sign key.pem | openssl enc -base64
<?php

$data = "Beeeeer is really good.. hic...";

// You can get a simple private/public key pair using:
// openssl genrsa 512 >private_key.txt
// openssl rsa -pubout <private_key.txt >public_key.txt

// IMPORTANT: The key pair below is provided for testing only.
// For security reasons you must get a new key pair
// for production use, obviously.

// IMPORTANT: When converting data into JSON in PHP,
// pay attention to the use of JSON_UNESCAPED_UNICODE flag.

$private_key = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4Z
RZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQJAL151ZeMKHEU2c1qdRKS9
sTxCcc2pVwoAGVzRccNX16tfmCf8FjxuM3WmLdsPxYoHrwb1LFNxiNk1MXrxjH3R
6QIhAPB7edmcjH4bhMaJBztcbNE1VRCEi/bisAwiPPMq9/2nAiEA3lyc5+f6DEIJ
h1y6BWkdVULDSM+jpi1XiV/DevxuijMCIQCAEPGqHsF+4v7Jj+3HAgh9PU6otj2n
Y79nJtCYmvhoHwIgNDePaS4inApN7omp7WdXyhPZhBmulnGDYvEoGJN66d0CIHra
I2SvDkQ5CmrzkW5qPaE2oO7BSqAhRZxiYpZFb5CI
-----END RSA PRIVATE KEY-----
EOD;
$public_key = <<<EOD
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6
zxqlVzz0wy2j4kQVUC4ZRZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQ==
-----END PUBLIC KEY-----
EOD;

$binary_signature = "";

// At least with PHP 5.2.2 / OpenSSL 0.9.8b (Fedora 7)
// there seems to be no need to call openssl_get_privatekey or similar.
// Just pass the key as defined above
openssl_sign($data, $binary_signature, $private_key, OPENSSL_ALGO_SHA1);

// Check signature
$ok = openssl_verify($data, $binary_signature, $public_key, OPENSSL_ALGO_SHA1);
echo "check #1: ";
if ($ok == 1) {
    echo "signature ok (as it should be)\n";
} elseif ($ok == 0) {
    echo "bad (there's something wrong)\n";
} else {
    echo "ugly, error checking signature\n";
}

$ok = openssl_verify('tampered'.$data, $binary_signature, $public_key, OPENSSL_ALGO_SHA1);
echo "check #2: ";
if ($ok == 1) {
    echo "ERROR: Data has been tampered, but signature is still valid! Argh!\n";
} elseif ($ok == 0) {
    echo "bad signature (as it should be, since data has beent tampered)\n";
} else {
    echo "ugly, error checking signature\n";
}

?>

Ключі

Merchant_id2

Приватний ключ мерчанта:

-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDUWbv9cOyjT/e6
vszSjHs0WBCsn4Fe1cicKmry01sIdBiLtRA8z16MTPJKB8YwgkUfSR81OUL4pie1
mVUga2SxzEd+7VL0eNzYqMSYgvHLj7Gak/JpitzHKnQ+jBmce6eGCSNlaLD10cKs
LrmkR3ha1Etrlj0mZrLqKjJNtKN0VfFit9rWvQrsR2krx9uI+pY2sDMyjiz0IZ/f
fMgao3Zw1EZ+OdcuwxRyve7XMvgMS89MSZnNbp00UiCIcdRUyrUgYAiyAYlBjOJD
MmiXmp0t12HzavBgWpNd3168iIh1wf4Mq7z8tWQmkmbLbWSQk5DOECFa1v7nhS+s
cEz9E/x9AgMBAAECggEAK+Lpy8zRU0U9LS6utRsMgXpr48lJWviy77eCh/Hvf/VC
d2kx1GeFIljqwCsQJkleEMOze/P8J9hrH4hzg/I+CtLtuclBmj36YpqqmtyBLXFi
otBNystEqrLW+HBLAMC7lCOCWbyDyiISajRz8IRG1vrGJZOUysFx25xh7hZVq76Q
wB38GVd2XE5VMxqltw5h2/+URlcISFD8E8e9fml0ICEUCQcMX6w9kyWM5BKXVpA2
pScBsCwnv/+JiSPKLuMPIjiwgOMjxJi9tp6mjQUr7AA/nZVfiGl/08gO9RsGome+
thtC5TRzQxszGb2ldX/JniNCgmrAnrcQT+HhyW5ULwKBgQD5Tsej0yM0vpnv/uaO
FBn15MvmXmr7bISCvW3czF8f4FqJ+vaXBgDAG31OiWajFt8i35EdOSoyylfRzB1l
1DL2gPVUPHjxc0Akjdpxbu+G7u1eYfHwAf+wT58a5LL3RG9oX+AfGmX74mAJAjFr
ICBT4Z8/X+tmT5seDzp7RZZNpwKBgQDaDPznEUsVTTNFYRYrzz1av7JD0If1xMpE
/VGftaxni4d27/pLwpINb+fvIuAHLfcA51rO+4/0IXgqmoxVbWAqtdYaikY61qdY
Txf28DLJCIY08KDVFxIRT0pVpPkO3U1PJmSvBw5VO3v4l9LCk8yWsZYrw9a9Davi
lxxxHngROwKBgQCei9kueEG1c1lWZRaeWG5CEGUTdgw3JMYIlwtdFaORFA7AHRfg
53JmuZSw83SQVyVEekVA/m+1qTS8OUCg15gpZ82c6nBHrPGnzYaUCObPOvc9xLAl
4D+JErmuUq71zVHEYOSZIyKkU0ybrgdbhyzH635owUlk4U9WiHy6lICHlQKBgQDW
Q7L0IBMmwHCkOU2/COriVMKITs57G8Ai4MWnaa8bJImdvxy1+2DnYVKIsz1u8KTq
N20NPTdsjsL1Il7JxyubbIkSFVQDl1Bjv3zuA4Pz9bNjLBzup7fyWHbUB8NQ7vd7
0l9XeliEOmqMkivhVbjRT3ogUVWe+mMvyouBQI59ZwKBgQDuUdKsLY10DJfxcqld
Z4q4qJPoQxSjmI7OSLnszms0wYoy5osJfcYtKH/S6P9w3XRzUTiMHutHK1Q5dHyR
oNt8Im+Yj+5xQpY8TCBPqn0DnsOUTrQLWhdt0jn15GarFUkLhqITGqDEf4IqH1RV
iwnfkeQttN0i4IatEQcKB6/glQ==
-----END PRIVATE KEY-----

Публічний ключ мерчанта:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvApYbp4iwR0X41BoR/Wc
axCiFB9L8NJ6K9i/x8iJX530SalRgHs/I6d0hixgVKcfVLu2u2lpaVbus4IBAOMa
/tV+G0Ku8Ojl1YOhpxiOP5sEu5uQpAg3++j3t+ws+jSx6LkQjE7c+gNjsUDFa2bz
YMiPVDHZ0fCaYCRjYNsqsntNKMOSMRXxGnLGGlYJFUh0x7VjQCaNJNidOxSoH9qY
KaUnBfIGzE2Qix0etJwe3zpNVHTeH0bdejFbxfwHqunvrcLwIKnBVckLboeJ3eqe
vKxwy4rMYjJcYjepOiGzoDmCxwC6hucY1Gjv/VqI+sMo1bxjf0RPgQdTD51PEBZJ
QwIDAQAB
-----END PUBLIC KEY-----