Нужно разработать сайт, или сделать разовую поддержку сервера? Или перенести сайт?

Технический специалист всегда поможет, расскажет, исправит неисправляемое.

Сделай заказ прямо сейчас

PHP Класс для приёма платежей через Тинькофф банк

Некая вводная информация

PHP класс для приёма платежей от Тинькофф банка позволит вам в разы сократить время на подключение и полный разбор всей документации Тинькофф банка и свою разработку скриптов которые будут обрабатывать платежи.

Также хочу выделить хорошую и быструю поддержку банка, как обычную поддержку, так и техническую — способная адекватно и чётко ответить на ваши вопросы, а также решить некие проблемы связанные с использованием АПИ банка.

Однако в процессе ярой разработки у АПИ вылетела 500 ошибка, что позволила мне посмотреть как и что работает. Ознакомиться с данной информацией вы можете здесь — https://pastebin.com/fhLNhYS0, В основном Jettyspringframework (Java)

Говоря о рекуррентных платежах, при подключении вас попросят:

  1. При оформлении оплаты и выбора тарифа, клиент должен понимать, что оформляет  подписку.
  2. Это должно указываться на сайте или должна быть техническая возможность выбора оформления подписки/рекуррентных платежей.
  3. Также должна присутствовать политика возврата (условия и сроки) и процедура принятия обращений клиентов.

При тестировании тест-кейсов в личном кабинете не используйте рекуррентные платежи. Сумма в чеке Receipt.Amount высчитывается как Price * Quantity. Запросы все посылаются через POST CURL запрос указывать Content-Type Json очень важно, также и отправлять через json_encode

Перейдём к готовому классу PHP

Принцип использования класса:

1. Создаете файл tinkoff.params.php, желательно подключить базу через PDO.

<?php
use NeatekTinkoff\NeatekTinkoff\NeatekTinkoff;
require_once 'tinkoff.class.php';
$tinkoff = new NeatekTinkoff(
    array(
        array(
            'TerminalKey' => '', // Терминал
            'Password'    => '', // Пароль
        ),
        array(
            // Подключение к БД через PDO
            'db_name' => '',
            'db_host' => '',
            'db_user' => '',
            'db_pass' => '',
        ),
    )
);

2. Создаете index.php для перекидывания на платёж, только уберите SetRecurrent() если не нужны рекуррентные платежи.

<?php
require_once 'tinkoff.params.php';
$tinkoff->AddMainInfo(
    array(
        'OrderId'     => 1, // Не будет работать при подключении к БД, будет автоматически ставиться свой номер заказа из базы данных, рекомендуется всегда оставлять значение = 1 при использовании PDO DB
        'Description' => 'Описание заказа до 250 символов', // Описание заказа
        'Language'    => 'ru', // Язык интерфейса Тинькофф
    )
);
$tinkoff->SetRecurrent(); // Указать что рекуррентный платёж, можно не указывать
$tinkoff->AddItem(
    array(
        'Name'     => 'Название товара 128 символов', // Максимум 128 символов
        'Price'    => 100, // В копейках
        "Quantity" => (float) 1.00, // Вес или количество
        "Tax"      => "none", // В чеке НДС
    )
);
$tinkoff->SetOrderEmail('neatek@icloud.com'); // Обязательно указать емайл
//$tinkoff->SetOrderMobile('+79999999999'); // Установить мобильный телефон
$tinkoff->SetTaxation('usn_income'); // Тип налогообложения 
//$tinkoff->DeleteItem(0); // Можно удалить товар по индексу
$tinkoff->Init(); // Инициализация заказа, и запись в БД если прописаны настройки
$tinkoff->doRedirect(); // Переадресация на оплату заказа

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

3. Обработка нотификаций (уведомлений)

<?php
require_once 'tinkoff.params.php';
$tinkoff->getResultResponse(); // Ответ на нотификации

4. Рекуррентные платежи, можете указать что угодно здесь.

<?php 
require_once 'tinkoff.params.php';
$recurrents = $tinkoff->getLatestForRecurrent();
if (!empty($recurrents)) {
    foreach ($recurrents as $column => $client) {
        /**
         * Params for Init *
         */        $params = array(
            // Сумма всех Items.Amount 
             'Amount'      => (string)$client['Amount'],
            // Номер заказа берется из DB
             'OrderId'     => (string)$client['order_id'],
            // из DB
             'Description' => $client['Description'],
        );
        $params['DATA'] = (object) array(
            'Email' => $client['Email'],
        );
        $params['Receipt'] = (object) array(
            // Береться из DB
             'Email'    => $client['Email'],
            // Налогообложение
             'Taxation' => 'usn_income',
            // С предметами в чеке, можно добавить что вам нужно
             'Items'    => array(
                (object) array(
                    'Name'     => 'Описание товара 128 символов',
                    'Price'    => $client['Amount'],
                    "Quantity" => 1.00,
                    // Amount = Price * Quantity
                    "Amount"   => $client['Amount'],
                    "Tax"      => "none",
                ),
            ),
        );

        /**
         * Charge - повторый платёж *
         */        $tinkoff->Charge($tinkoff->Init($params, '[Automatic]'), $client);
    }
}

В принципе всё.

Подробнее познакомиться с PHP Классом для API банка Tinkoff
https://github.com/neatek/Tinkoff-PHP-Class

Оцените данную статью

КолДваТриЧетыреОтлично! (5 оценок, средне: 5,00 из 5)