Перейти к основному контенту

Инструкция по интеграции собственной платежной формы и системы «Онлайн-платежи» от 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