Инструкция по интеграции собственной платежной формы и системы «Онлайн-платежи» от Kassa24 Business
ИНСТРУКЦИЯ ПО СОЗДАНИЮ КРИПТОГРАММЫ
1. Получить публичный ключ для шифрования. При кэшировании ключа хранить его не более суток (кэшировать не больше, чем на сутки).
https://ecommerce.pult24.kz/payment/getcert/pem - публичный ключ в PEM-формате;
https://ecommerce.pult24.kz/payment/getcert - публичный ключ в JWK-формате.
2. Сформировать JSON-строку согласно структуре:
для оплаты:
{
"cardholder": "iv viv",
"month": "10",
"pan": "5356502005228360",
"validity": "10/21",
"year": "2021",
"cvv": "111",
"ip": "192.168.0.1"
}
для выплат:
{
"pan": "5356502005228360"
}
3. Сформированная строка должна быть зашифрована с помощью алгоритма: RSA/NONE/OAEPWITHSHA-256ANDMGF1PADDING. Хэш-функция Sha256 должна использоваться как для OAEP, так и для MGF1.
4. Полученная строка представляет собой байтовый массив, содержащий зашифрованные данные.
5. Данную строку нужно энкодировать в BASE64 (Std.Encoding).
6. Криптограмму необходимо поместить в запрос на создание транзакции (см. пример создания транзакции с криптограммой). Криптограмма не должна сохраняться нигде в системе мерчанта.
7. При успешном создании транзакции вернется URL, куда необходимо перенаправить пользователя для прохождения процедуры 3DSecure, и ожидать поступления коллбэка со статусом транзакции.
Пример создания транзакции на оплату с криптограммой
{
"merchantId":"your_login",
"amount":12500,
"returnUrl":"https://yoursite.kz/payment/complete",
"description":"Test payment for youremail@example.com",
"callbackUrl":"hhttps://yoursite.kz/payment/callback",
"acquiringId":15,
"customerData":{
"phone":"77472392990",
“email”:some@email.com,
"cardData":"wnUx+rkFVhpaTvapu2etbfA7RKf6Hufl31p0517/jsFAS3uilcOqTy8Ir3hav9QoJSyhtG/syw8mwOIU/QNyzdL8uCDhRSJbLkT8f8KpKqrhxrT6e02zMiLrfTG8AdJGOiA9hBIVrRLyz+4URy0pgkFf03azfAedCBRwEHt7hr7zte3W69JNVWYBnSDyailC3nB9zaEEuqsS9UxlbwhMcRr+7e+O+bn1U2El3XzM9nEx/qoU2hRCHusW1s+rWDn/Ttn5eZNCwlyzOXXkGqPQZicpk2mvqE68VvXvRjVaGeIj+cp/Y74nT0jt8H355ST4Zc5A41ArSbyLRoxJUss2w/BPDovROa7chHPH3lv7Isg0UCVNzZ/nDPA+GJ/GrIw1wd12gLv9Ghg8fS2CIAXzuZV9yc+tAmBU4HWnnXKbgejQOHV42DNWGcyOkkuv6Tw7WGtAcAf8DHOOxDO74O7ffgddDypC2gFsjm1Uf+u34TsmZMoUBv/L04mqrkn2qAHfsW96mLuMhPt1fIze5fCkpFVYE5xOrI9d+4hORPs3DaVL0v/YMH41p9/9R+5VvkitZUxxpUC+UFJudnrRP2vc1KbEWcVZVcE78wu8wRo4BCUVUwVpnhHRLMG27VujxGyuVLtPxJsoT38oC7TuZeUbZbd0C9m6lZTvTJeNjYwXFNM="
},
"demo":true
}
Флаг DEMO на продакшене должен быть FALSE или отсутствовать.
В ответ на создание платежа будет возвращен номер выплаты/платежа в системе «Онлайн-платежи» и URL для перенаправления:
{
"url":"ecommerce.pult24.kz/payment/view?id=9876543210",
"id":"9876543210"
}
После этого приходит ответ (Callback). Пример присылаемого на callbackUrl запроса:
{
"orderId":"123",
"id":"123",
"account":"my@example.com",
"amount":10000,
"commission":100,
"commissionIncluded":true,
"attempt":1,
"returnUrl":"https://my.site.kz/",
"callbackUrl":"https://my.site.kz/",
"date":"2006-01-02T15:04:05",
"dateOut":"2006-01-02T15:04:05",
"status":1,
"errCode":0,
"errMessage":"Ошибок нет",
"metadata":{
"session":"3135c7fe-272f-46d0-a5f8-1ab2a59ac17c"
}
}
Пример создания транзакции на выплаты с криптограммой
{
"merchantId":"your_login",
"amount":12500,
"returnUrl":"https://yoursite.kz/payment/complete",
"description":"Test payment for youremail@example.com",
"callbackUrl":"hhttps://yoursite.kz/payment/callback",
"acquiringId":5,
"type":1,
"customerData":{
"phone":"77472392990",
“email”:some@email.com,
"cardData":"wnUx+rkFVhpaTvapu2etbfA7RKf6Hufl31p0517/jsFAS3uilcOqTy8Ir3hav9QoJSyhtG/syw8mwOIU/QNyzdL8uCDhRSJbLkT8f8KpKqrhxrT6e02zMiLrfTG8AdJGOiA9hBIVrRLyz+4URy0pgkFf03azfAedCBRwEHt7hr7zte3W69JNVWYBnSDyailC3nB9zaEEuqsS9UxlbwhMcRr+7e+O+bn1U2El3XzM9nEx/qoU2hRCHusW1s+rWDn/Ttn5eZNCwlyzOXXkGqPQZicpk2mvqE68VvXvRjVaGeIj+cp/Y74nT0jt8H355ST4Zc5A41ArSbyLRoxJUss2w/BPDovROa7chHPH3lv7Isg0UCVNzZ/nDPA+GJ/GrIw1wd12gLv9Ghg8fS2CIAXzuZV9yc+tAmBU4HWnnXKbgejQOHV42DNWGcyOkkuv6Tw7WGtAcAf8DHOOxDO74O7ffgddDypC2gFsjm1Uf+u34TsmZMoUBv/L04mqrkn2qAHfsW96mLuMhPt1fIze5fCkpFVYE5xOrI9d+4hORPs3DaVL0v/YMH41p9/9R+5VvkitZUxxpUC+UFJudnrRP2vc1KbEWcVZVcE78wu8wRo4BCUVUwVpnhHRLMG27VujxGyuVLtPxJsoT38oC7TuZeUbZbd0C9m6lZTvTJeNjYwXFNM="
},
"demo":true
}
Флаг demo на продакшене должен быть false или отсутствовать.
В ответ на создание платежа будет возвращен номер выплаты/платежа в системе «Онлайн-платежи» и URL для перенаправления:
{
"url":"ecommerce.pult24.kz/payment/view?id=9876543210",
"id":"9876543210"
}
После этого приходит ответ (Callback). Пример присылаемого на callbackUrl запроса:
{
"orderId":"123",
"id":"123",
"account":"my@example.com",
"amount":10000,
"commission":100,
"commissionIncluded":true,
"attempt":1,
"returnUrl":"https://my.site.kz/",
"callbackUrl":"https://my.site.kz/",
"date":"2006-01-02T15:04:05",
"dateOut":"2006-01-02T15:04:05",
"status":1,
"errCode":0,
"errMessage":"Ошибок нет",
"metadata":{
"session":"3135c7fe-272f-46d0-a5f8-1ab2a59ac17c"
}
}
Пример кода на PHP
$string = '{"pan":"4111111111112222"}';
$key = [
'e' => 'AQAB',
'kty' => 'RSA',
'n' => '2xt9VX-l0Dbm3hEX-47M_M1_s7IEhChG2rIlUvq2i1RBMpuB4TmUuCAfHvzs40alLSRIcvjUs6CnzwkJkx1g4USqmXdtxRo7u7EeItGiqmV8sMu6IJ9oCTAzUjbZeKluiY81tJrc9b8-6q4RfKXpyXhj2oByyLAbVwc-_vx19UoJ-P36CIyBaBf5Ri_-drUvKkz2Xt-ixffv5B8bNDjGbIXIhpaz_7nheflgMU4PsNa82DOkfmYZvfxXDTcOqATr0QDmTLsvLs_Tj9ttOeoHhDlckdOGXeAzwEzGBGAAsGhBwdIQ6Usx0RQMHZ5gpR251HtrxSOPgM1q5_NbAUG1R5WrURAmdkIYztAXjuPuZniSPGoBqumDw7b1r_W-NPAwBFJiQ2KnCYrMucitpVB07YNiVFSQ9egc8hKl1DzMzNehCAiKVLCzec_hyGEObYgUiQKqXTevdttPrWrEwFIHfv5QM0Ae9M7WhywbPS--k_rIj8K3jmKMh5sevrYNF6o68kK1nv2tuWSOVQfXqvQ-Kv2UhtNt6RXDsH1GgKNYYblAWCAN_wXVoNa2zcJVI6xN_-pqcfv2vGg7ZCc0Aoe4Zv1fz7gOD1BQ8PUSazP_UDVbjA4ehhhDXWr00PbbJioufP1M454gJfmGgVJ4Xcs_C_ueyp1w-8Kg-m1MHklFTN0',
];
$jwk = new JWK($key);
$rsa_oaep_256 = new RSAOAEP256();
$h =[];
$encrypted = $rsa_oaep_256->encryptKey($jwk, $string, [], $h);
echo base64_encode($encrypted);
Использовалась библиотека https://packagist.org/packages/web-token/jwt-encryption-algorithm-rsa