API FONDYВерсія 1.0

Покрокова інструкція з приймання платежів за допомогою FONDY JavaScript SDK для подальшого повторюваного виставлення рахунків в один клік

Перший платіж

1. Встановіть FONDY JavaScript SDK у ваш проект

Node

Якщо ви використовуєте Npm у вашому проекті, ви можете додати ipsp-js-sdk залежністю від package.json з наступною командою:

npm i --save ipsp-js-sdk

або додати залежність вручну:

{
  "dependency": {
    "ipsp-js-sdk":"^1.0"
  }
}

Bower

Якщо ви використовуєте Bower у вашому проекті, ви можете виконати наступну команду:

bower install ipsp-js-sdk

Вручну

Якщо ви не використовуєте NodeJS, ви можете завантажити the останню версію. Або клонуйте з GitHub останню версію для розробників

git clone git@github.com:cloudipsp/ipsp-js-sdk.git

Quick start

<script src="https://unpkg.com/ipsp-js-sdk@latest/dist/checkout.min.js"></script>

Детальна інструкція по встановленню: https://github.com/cloudipsp/ipsp-js-sdk.

2. Розробити html-форму кредитної картки за власним дизайном.

Базовий шаблон

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  </head>
  <body>
    <script src="https://unpkg.com/ipsp-js-sdk@latest/dist/checkout.min.js"></script>
    <script>
    $checkout('Api').scope(function(){
        this.request('api.checkout.form','request', { Parameters } ).done(function(model){
            model.sendResponse();
            console.log(model.attr('order'));
        }).fail(function(model){
            console.log(model.attr('error'));
        });
    });
    </script>
  </body>
</html>

Приклад базового шаблону: https://github.com/cloudipsp/ipsp-js-sdk#basic-template

3. Створіть замовлення за допомогою Integration Schema C для JavaScript SDK.

Додайте параметри required_rectoken=Y і server_callback_url у вашо запит на отримання повторюваного токена у зворотному виклику сервера (параметр rectoken).

Endpoint: https://pay.fondy.eu/api/checkout/token/ 

Запит

curl -i -X POST \
 -H "Content-Type:application/json" \
 -d \
'{
  "request": {
    "server_callback_url": "http://myshop/callback/",
    "order_id": "TestOrder_SDK1",
    "currency": "USD",
    "merchant_id": 1396424,
    "order_desc": "Test payment",
    "amount": 1000,
    "required_rectoken": "Y",
    "signature": "91ea7da493a8367410fe3d7f877fb5e0ed666490"
  }
}' \
 'https://pay.fondy.eu/api/checkout/token'

Normal response:

{
  "response":{
    "response_status":"success",
    "token":"afcb21aef707b1fea2565b66bac7dc41d7833390"
  }
}

Відповідь у випадку помилки

{
  "response":{
  "response_status":"failure",
  "error_message":"Parameter `amount` is mandatory",
  "error_code":"1008"
  }
}

Документація: /docs/page/3/?la=en#chapter-3-6-c.
Збережіть міжхостовий параметр token з відповіді.

4. Завантажте host-to-host token з кроку 3 у форму даних вашої картки..

Надішліть параметри

Параметри:

{
 "payment_system":"card",
 "token":"host-to-host generated token",
 "card_number":"16/19-digits number",
 "expiry_date":"Supported formats: MM/YY, MM/YYYY, MMYY, MMYYYY",
 "cvv2":"3-digits number"
 }

від форми картки до платіжного шлюзу за допомогою JavaScript API $checkout('Api').
Instruction: https://github.com/cloudipsp/ipsp-js-sdk#host-to-host-token

5. Use .on('success') and .on('error') JavaScript-відповіді для отримання результату обробки платежу.

success – замовлення схвалено і сума буде списана
error – замовлення відхилено і сума не буде списана

model.attr('error.message') міститиме локалізоване повідомлення про помилку у разі відхилення платежу. Інформація про статус замовлення та деталі замовлення будуть повернуті в model.data.order.order_data

JavaScript callback example:

console.log('success',JSON.stringify(model.attr("order").order_data));
{
  "rrn": "",
  "masked_card": "444455XXXXXX1111",
  "sender_cell_phone": "",
  "response_signature_string": "**********|10000|USD|10000|123456|444455|VISA|USD|06|444455XXXXXX1111|[]|1396424|Order_1396424_ZtP6E6IQMC_1520944420|approved|13.03.2018 14:33:40|85233820|card|success|0|client@example.com|0|purchase",
  "response_status": "success",
  "sender_account": "",
  "fee": "",
  "rectoken_lifetime": "",
  "reversal_amount": "0",
  "settlement_amount": "0",
  "actual_amount": "10000",
  "order_status": "approved",
  "response_description": "",
  "verification_status": "",
  "order_time": "13.03.2018 14:33:40",
  "actual_currency": "USD",
  "order_id": "Order_1396424_ZtP6E6IQMC_1520944420",
  "parent_order_id": "",
  "merchant_data": "[]",
  "tran_type": "purchase",
  "eci": "06",
  "settlement_date": "",
  "payment_system": "card",
  "rectoken": "",
  "approval_code": "123456",
  "merchant_id": 1396424,
  "settlement_currency": "",
  "payment_id": 85233820,
  "product_id": "",
  "currency": "USD",
  "card_bin": 444455,
  "response_code": "",
  "card_type": "VISA",
  "amount": "10000",
  "sender_email": "client@example.com",
  "signature": "b39ac49a1bdf4bbd7fc09e990fbba63197be67d0"
}

Приклад: https://jsfiddle.net/5v7jbwa2/

6. Опрацюйте кінцеву відповідь, отриману у вигляді серверних викликів до server_callback_url.

Формат фінальної відповіді: /docs/page/3/?la=en#chapter-3-2

Приклад відповіді:

success {
  "rrn": "",
  "masked_card": "444455XXXXXX1111",
  "sender_cell_phone": "",
  "response_signature_string": "**********|10000|USD|10000|123456|444455|VISA|USD|06|444455XXXXXX1111|[]|1396424|Order_1396424_ZtP6E6IQMC_1520944420|approved|13.03.2018 14:33:40|85233820|card|success|0|client@example.com|0|purchase",
  "response_status": "success",
  "sender_account": "",
  "fee": "",
  "rectoken_lifetime": "",
  "reversal_amount": "0",
  "settlement_amount": "0",
  "actual_amount": "10000",
  "order_status": "approved",
  "response_description": "",
  "verification_status": "",
  "order_time": "13.03.2018 14:33:40",
  "actual_currency": "USD",
  "order_id": "Order_1396424_ZtP6E6IQMC_1520944420",
  "parent_order_id": "",
  "merchant_data": "[]",
  "tran_type": "purchase",
  "eci": "06",
  "settlement_date": "",
  "payment_system": "card",
  "rectoken": "",
  "approval_code": "123456",
  "merchant_id": 1396424,
  "settlement_currency": "",
  "payment_id": 85233820,
  "product_id": "",
  "currency": "USD",
  "card_bin": 444455,
  "response_code": "",
  "card_type": "VISA",
  "amount": "10000",
  "sender_email": "client@example.com",
  "signature": "b39ac49a1bdf4bbd7fc09e990fbba63197be67d0"
}

Збережіть повторюваний токен з параметру rectoken та замаскований номер картки у форматі 4444 55XX XXXX 1111 з masked_card в callback

Періодичний платіж

Надішліть rectoken до endpoint https://pay.fondy.eu/api/recurring для здійснення періодичної оплати.

Документація: /docs/page/10/

Оплата в один клік

Виконайте кроки 1-3 з інструкції “Перший платіж”. Оптимізуйте дизайн форми картки для відображення замаскованої картки та запиту cvv2 у клієнта
Завантажте host-to-host token з кроку 3 та rectoken з остаточної відповіді в реквізитах вашої картки з.
У разі оплати в один клік rectoken буде використовуватися замість card_number і expiry_date

Надішліть параметри

 {
 "payment_system":"card",
 "token":"host-to-host generated token",
 "rectoken":"rectoken from final response",
 "cvv2":"3-digits number"
 }

Процес з кроком 5-6 для оплати в один клік, щоб отримати результат оплати у зворотному дзвінку

Додаткова документація:

Хочу приймати платежі з усього світу!