Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
InfoЦей функціонал буде активовано після вашого запиту в груповому
Info

Цей функціонал буде активовано після вашого запиту в груповому чаті.


Зміст

Table of Contents
minLevel1
maxLevel2
include
outlinefalse
indent0px
stylecircle
exclude
typelist
class
printablefalse

Опис

Регулярный платеж позволяет проводить списание без участия плательщика.

В запросе используется ранее сохраненная карта в виде Регулярний платіж дозволяє робити списання коштів без участі платника.

В запиті використовується раніше збережена картка у вигляді зашифрованого CARD_TOKEN, который можно получить из callback при первой Оплата картой или Верификации карты.

Дополнительно рекомендуем ознакомиться с разделом /wiki/spaces/docs/pages/1323303006

Требования

  • Уведомить клиентов об условиях подписки и регулярных списаниях

  • Получить согласие клиентов на регулярные списания

  • Получить согласие клиентов с условиями договора публичной оферты

  • Рекомендуем дать возможность отмены подписки клиентом на сайте или приложении

  • Согласно правил МПС разрешается 1 попытка списания в день

  • Разместить договор публичной оферты

  • Разместить логотипы платежных систем Visa и Mastercard

  • Добавить логотипы PSP Platon

    який можна отримати при першій транзакції по картці.


    Вимоги

    Include Page
    Вимоги до сайтів та додатків
    Вимоги до сайтів та додатків

    API параметри

    HTTP METHOD: POST

    API ENDPOINT: https://secure.platononline.com/post-unq/

    Параметр

    Значення

    Опис

    Особливості

    action

    Status
    colourGreen
    titleобов'язковий

    SALE

    Код платіжного метода

    client_key

    Status
    colourGreen
    titleобов'язковий

    String

    API ключ мерчанта

    Ключ надається на пошту мерчанту

    order_id

    Status
    colourGreen
    titleобов'язковий

    String

    ID оплати в системі мерчанта

    Max 32 символи

    order_amount

    Status
    colourGreen
    titleобов'язковий

    Number

    Сума оплати

    Tip

    Вірний варіант

    1000.00

    Warning

    Невалідні варіанти

    1000
    1000.0
    1,000.0
    1,000.00

    order_currency

    Status
    colourGreen
    titleобов'язковий

    UAH

    Валюта

    Info

    Оплата можлива лише в національній валюті гривні

    order_description

    Status
    colourGreen
    titleобов'язковий

    String

    Опис

    Max 255 символів

    card_token

    Status
    colourGreen
    titleобов'язковий

    String

    Токен картки

    card_token з callback першої оплати

    payer_email

    Status
    colourGreen
    titleобов'язковий

    String

    Пошта платника

    Info

    Валідна пошта

    Info

    Без пробілів

    payer_ip

    Status
    colourGreen
    titleобов'язковий

    Number

    IP-адрес платника

    В форматі "ХХХ.ХХХ.ХХХ.ХХХ"

    Note

    IPv6 не підтримується

    term_url_3ds

    Status
    colourGreen
    titleобов'язковий

    String

    Посилання куди перейде платник після проби оплати (успішної чи невдалої)

    ext3

    Status
    colourGreen
    titleобов'язковий

    recurring

    Ознака регулярної оплати

    hash

    Status
    colourGreen
    titleобов'язковий

    String

    Контрольний підпис

    Code Block
    languagephp
    md5(
      strtoupper(
        strrev($payer_email).
        $client_pass.
        strrev($card_token)
      )
    )
    Info

    Если при первоначальном запросе на оплату не был указан email, то следует указать пустое значение для email.

    async

    Status
    colourYellow
    titleне обов'язковий

    Y
    N

    Включити асинхронний режим

    В асинхронному режимі обов'язкове використання коллбеків.
    Стандартне значення N

    channel_id

    Status
    colourYellow
    titleне обов'язковий

    String

    Додатковий платіжний канал

    Дозволяє відправити оплати на інший банківський термінал

    payer_first_name

    Status
    colourYellow
    titleне обов'язковий

    String

    Ім'я платника

    Max 32 символи без пробілів

    payer_last_name

    Status
    colourYellow
    titleне обов'язковий

    String

    Прізвище платника

    Max 32 символи без пробілів

    payer_address

    Status
    colourYellow
    titleне обов'язковий

    String

    Адреса платника

    Max 256 символів

    payer_country

    Status
    colourYellow
    titleне обов'язковий

    String

    Країна платника

    В форматі "ХХ"
    Max 2 символи
    Вкажіть NA, якщо немає даних

    payer_state

    Status
    colourYellow
    titleне обов'язковий

    String

    Штат платника

    В форматі "ХХ"
    Max 2 символи
    Вкажіть NA, якщо немає даних

    payer_city

    Status
    colourYellow
    titleне обов'язковий

    String

    Місто платника

    Max 32 символи
    Вкажіть NA, якщо немає даних

    payer_zip

    Status
    colourYellow
    titleне обов'язковий

    String

    Поштовий індекс платника

    Max 32 символи
    Вкажіть NA, якщо немає даних

    payer_phone

    Status
    colourYellow
    titleне обов'язковий

    Number

    Номер телефону платника

    В форматі “380XXXXXXXXX”
    Max 32 символів

    customer_wallet

    Status
    colourYellow
    titleне обов'язковий

    String

    Номер електронного гаманця платника

    Поле обов'язкове для типів бізнесу пов'язаних з віртуальними активами

    auth

    Приклад запиту

    status
    Expand
    colourYellow
    title
    не обов'язковий

    Y
    N

    HOLD коштів

    Стандартне значення N

    Приклад запиту

    Expand
    titleПриклад запиту на PHP
    Code Block
    languagephp
    <?php
      $client_pass='***';
      $data['action']='SALE';
      $data['client_key']='***';
      $data['order_id']='458-3453';
      $data['order_amount']='1000.00';
      $data['order_currency']='UAH';
      $data['order_description']='test';
      $card$data['card_token'] = '*****';
      $data['payer_first_namephone']='Ivan380111111111';
      $data['payer_last_nameemail']='Ivanovsale@gmail.com';
      $data['payer_phoneip']='+380111111111213.186.115.164';
      $data['payer_email']='sale@gmail.com';
      $data['payer_ip']='213.186.115.164';
      $data['term_url_term_url_3ds']='http://google.com';
      $data['ext3hash']='recurring';
      $hash = md5(
                strtoupper(
                  strrev($data['payer_email']).
                  $client_pass.
                  strrev($card$data['card_token'])
                )
              );
    ?>
    $url 
    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>sale</title>
      </head>
      <body onload="javascript:document.forms[0].submit()">
        <form action="https://secure.platononline.com/post-unq/" method="post">
          <input type="hidden" name="action" value="<?=$data['action']?>" />
          <input type="hidden" name="client_key" value="<?=$data['client_key']?>" />
          <input type="hidden" name="order_id" value="<?=$data['order_id']?>" />
          <input type="hidden" name="order_amount" value="<?=$data['order_amount']?>" />
          <input type="hidden" name="order_currency" value="<?=$data['order_currency']?>" />
          <input type="hidden" name="order_description" value="<?=$data['order_description']?>" />
          <input type="hidden" name="card_token" value="<?=$card_token ?>" />
          <input type="hidden" name="payer_first_name" value="<?=$data['payer_first_name']?>" />
          <input type="hidden" name="payer_last_name" value="<?=$data['payer_last_name']?>" />
          <input type="hidden" name="payer_phone" value="<?=$data['payer_phone']?>" />
          <input type="hidden" name="payer_email" value="<?=$data['payer_email']?>" />
          <input type="hidden" name="payer_ip" value="<?=$data['payer_ip']?>" />
          <input type="hidden" name="term_url_3ds" value="<?=$data['term_url_3ds']?>" />
          <input type="hidden" name="ext3" value="<?=$data['ext3']?>" />
          <input type="hidden" name="hash" value="<?=$hash?>" />
        </form>                                            
      </body>
    </html>
    Iframe
    scrollingno
    srchttps://devplaton.com.ua/invoices/postman-test.html
    frameborderhide
    styleheight: 260px;

    Тестування

    В цілях тестування використовуйте card_token отриманий з коллбека успішної транзакції по одному з вказаних методів:

    • IE оплата карткою

    • Верифікація картки

    • C2A оплата

    • Виплата на картку по повному номеру картки

    Перевірка платежів

    Expand
    titleСписок методів отримання результату транзакцій
    Include PageОтримання результату транзакціїОтримання результату транзакції

    Callback

    Expand
    titleОсобливості роботи з Callback
    Include PageРобота з CallbackРобота з Callback Expand
    titleБезпека
    Include PageБезпекаБезпека

    Синхронний режим:

    Стандартний режим. Передавати async = N не потрібно.

    При успешній оплаті (синхронний режим):

    Expand
    titleResponse при успішній оплаті
    Code Block
    languagejson
    {
      "action":"SALE",
      "result":"SUCCESS",
      "status":"SETTLED",
      "order_id":"4385302",
      "trans_id":"28261-34099-19648",
      "descriptor":null,
      "trans_date":"2020-02-25 06:50:09"
    }

    Параметр

    Описание

    action

    SALE

    result

    SUCCESS

    status

    SETTLED (PENDING, если в запросе было указано auth = Y)

    order_id

    Уникальный ордер ID транзакции в системе мерчанта

    trans_id

    Уникальный ордер ID транзакции в системе Platon

    trans_date

    Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

    descriptor

    NULL

    Expand
    titleCallback при успішній оплаті
    Code Block
    languagephp
    array (
      'action' => 'SALE',
      'result' => 'SUCCESS',
      'status' => 'SETTLED',
      'order_id' => '4385323',
      'trans_id' => '28261-47789-28578',
      'trans_date' => '2020-02-25 07:12:58',
      'descriptor' => NULL,
      'hash' => '********************************',
    )

    Параметр

    Описание

    action

    SALE

    result

    SUCCESS

    status

    SETTLED (PENDING, если в запросе было указано auth = Y)

    order_id

    Уникальный ордер ID транзакции в системе мерчанта

    trans_id

    Уникальный ордер ID транзакции в системе Platon

    trans_date

    Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

    descriptor

    NULL

    card_hash

    Уникальное зашифрованное значение номера карты, которое будет возвращаться в коллбеке при оплате, верификации, погашении и выплате средств на карту.

    Этот параметр даст вам возможность в вашей системе:

    • Привязать карту под клиента.

    • Проверить не использовал ли другой клиент эту же карту.

    • Проверить какие кредиты, товары и услуги погашаются данной картой.

    • Отслеживать мошенничество, когда клиент использует ту же карту с другого аккаунта, например, чтобы повторно воспользоваться акцией.

    Info

    Если вы хотите использовать данный функционал, пожалуйста, сообщите нам для его включения.

    hash

    Зашифрованная подпись для проверки достоверности коллбека

    Code Block
    md5(
      strtoupper(
        strrev(email).
        client_pass.
        trans_id.
        strrev(
          substr(card,0,6).
          substr(card,-4)
        )
      )
    )
    Info

    Внимание! Если при запросе на оплату не был указан email, то при проверке hash в подписи Callback следует указать пустое значение для email.

    При невдалій оплаті (синхронний режим):

    Expand
    titleResponse при невдалій оплаті
    Code Block
    languagejson
    {
      "action":"SALE",
      "result":"DECLINED",
      "status":"DECLINED",
      "order_id":"4092002",
      "trans_id":"28076-29879-99538",
      "trans_date":"2020-02-03 20:49:47",
      "decline_reason":"Declined by processing"
    }

    Параметр

    Описание

    action

    SALE

    result

    DECLINED

    status

    DECLINED

    order_id

    Уникальный ордер ID транзакции в системе мерчанта

    trans_id

    Уникальный ордер ID транзакции в системе Platon

    trans_date

    Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

    descriptor

    NULL

    decline_reason

    Причина отмены транзакции

    Expand
    titleCallback при невдалій оплаті
    Code Block
    languagephp
    array (
      'action' => 'SALE',
      'result' => 'DECLINED',
      'status' => 'DECLINED',
      'order_id' => '4092002',
      'trans_id' => '28076-29879-99538',
      'trans_date' => '2020-02-03 20:49:47',
      'decline_reason' => 'Declined by processing',
      'hash' => '********************************',
    )

    Параметр

    Описание

    action

    SALE

    result

    DECLINED

    status

    DECLINED

    order_id

    Уникальный ордер ID транзакции в системе мерчанта

    trans_id

    Уникальный ордер ID транзакции в системе Platon

    trans_date

    Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

    descriptor

    NULL

    decline_reason

    Причина отмены транзакции

    hash

    Зашифрованная подпись для проверки достоверности коллбека

    Code Block
    md5(
      strtoupper(
        strrev(email).
        client_pass.
        trans_id.
        strrev(
          substr(card,0,6).
          substr(card,-4)
        )
      )
    )
    Info

    Внимание! Если при запросе на оплату не был указан email, то при проверке hash в подписи Callback следует указать пустое значение для email.

    Асинхронний режим:

    Цей режим активується при передачі async = Y. В цьому режимі обов'язково необхідно використовувати callback.

    Проміжна відповідь (асинхронний режим):

    Expand
    titleResponse про прийняття запиту на обробку
    Code Block
    languagejson
    {
      "action":"SALE",
      "result":"ACCEPTED",
      "order_id":"4385302",
      "trans_id":"28261-34099-19648",
      "trans_date":"2020-02-25 06:50:09"
    }

    Параметр

    Описание

    action

    SALE

    result

    ACCEPTED

    order_id

    Уникальный ордер ID транзакции в системе мерчанта

    trans_id

    Уникальный ордер ID транзакции в системе Platon

    trans_date

    Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

    При успешній оплаті (асинхронний режим):

    Expand
    titleCallback при успішній оплаті
    Code Block
    languagephp
    array (
      'action' => 'SALE',
      'result' => 'SUCCESS',
      'status' => 'SETTLED',
      'order_id' => '4385323',
      'trans_id' => '28261-47789-28578',
      'trans_date' => '2020-02-25 07:12:58',
      'descriptor' => NULL,
      'recurring_token' => '01e00c2b39bb3b933723307c442efd02',
      'card_token' => '8ef3111ac1093f6ccb817acef7f0845601d0994689a5f57949f94b0d086c7fe2',
      'hash' => '********************************',
    )
    Info

    Для проверки достоверности полученного callback, рекомендуем сверять подпись hash по формуле md5(strtoupper(strrev(email).client_pass.trans_id.strrev(substr(card,0,6).substr(card,-4)))).

    Внимание! Если при первоначальном запросе на оплату, когда был получен токен не был указан email, то при проверке sing в подписи коллбека следует указать пустое значение для email.

    Параметр

    Описание

    action

    SALE

    result

    SUCCESS

    status

    SETTLED (PENDING, если в запросе было указано auth = Y)

    order_id

    Уникальный ордер ID транзакции в системе мерчанта

    trans_id

    Уникальный ордер ID транзакции в системе Platon

    trans_date

    Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

    descriptor

    NULL

    recurring_token

    Зашифрованный токен карты для последующих транзакций по rc_token

    card_token

    Зашифрованный токен карты для последующих транзакций по card_token

    hash

    Зашифрованная подпись для проверки достоверности коллбека

    При невдалій оплаті (асинхронний режим):

    Зашифрованная подпись для проверки достоверности коллбека
    Expand
    titleCallback при невдалій оплаті
    Code Block
    languagephp
    array (
      'action' => 'SALE',
      'result' => 'DECLINED',
      'status' => 'DECLINED',
      'order_id' => '4092002',
      'trans_id' => '28076-29879-99538',
      'trans_date' => '2020-02-03 20:49:47',
      'decline_reason' => 'Declined by processing',
      'hash' => '********************************',
    )
    Info

    Для проверки достоверности полученного callback, рекомендуем сверять подпись hash по формуле md5(strtoupper(strrev(email).client_pass.trans_id.strrev(substr(card,0,6).substr(card,-4)))).

    Внимание! Если при первоначальном запросе на оплату, когда был получен токен не был указан email, то при проверке sing в подписи коллбека следует указать пустое значение для email.

    Параметр

    Описание

    action

    SALE

    result

    DECLINED

    status

    DECLINED

    order_id

    Уникальный ордер ID транзакции в системе мерчанта

    trans_id

    Уникальный ордер ID транзакции в системе Platon

    trans_date

    Время проведения транзакции в формате UTC (YYYY-MM-DD HH-MM-SS)

    descriptor

    NULL

    decline_reason

    Причина отмены транзакции

    hash

    = 'https://secure.platononline.com/post-unq/';
    $crq = curl_init();
    curl_setopt($crq, CURLOPT_URL, $url);
    curl_setopt($crq, CURLOPT_HEADER, 0);
    curl_setopt($crq, CURLOPT_POST, 1);
    curl_setopt($crq, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($crq, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($crq, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($crq, CURLOPT_POSTFIELDS, http_build_query($data));
    $result = curl_exec($crq);
      if (curl_errno($crq)) {
        echo 'ERROR: '.curl_error($crq);
      }else{
        echo $result;
      }
    curl_close($crq);
    Info

    Postman Collection


    Тестування

    В цілях тестування використовуйте card_token отриманий з коллбека успішної транзакції по одному з вказаних методів:

    • IE оплата карткою

    • Верифікація картки

    • C2A оплата

    • Виплата на картку по повному номеру картки


    Перевірка платежів

    Expand
    titleСписок методів отримання результату транзакцій
    Include Page
    Отримання результату транзакції
    Отримання результату транзакції

    Callback

    Expand
    titleОсобливості роботи з Callback
    Include Page
    Робота з Callback
    Робота з Callback
    Expand
    titleБезпека
    Include Page
    Безпека
    Безпека

    Синхронний режим

    Стандартний режим. Передавати async = N не потрібно.


    Асинхронний режим

    Цей режим активується при передачі async = Y. В цьому режимі обов'язково необхідно використовувати callback.


    Include Page
    Callback / Response - SALE без 3DS
    Callback / Response - SALE без 3DS

    Протерміновані токени

    Note

    Якщо у відповіді на запит ви отримали одну з вказаних нижче помилок, вам необхідно видалити цей протермінований токен:

    • {"result":"ERROR","error_message":"Invalid card_exp_month, card_exp_year"}

    • {"result":"ERROR","error_message":"Invalid card_exp_month"}

    • {"result":"ERROR","error_message":"Initial transaction too old"}

    Warning

    Ці card_token заблоковані та не підлягають відновленню по причині блокування / закінчення терміну дії картки.

    Tip

    Необхідно отримати новий card_token провівши нову оплату чи верифікацію.


    Помилки запитів

    Expand
    titleСписок помилок та рішень
    Include Page
    Помилки та рішення при запитах
    Помилки та рішення при запитах