Как добавить новую платежную систему ?

Платежных систем много и появляются новые или старые обновляют API.
Если Вы решите добавить, то это памятка для Вас.
Разберем на примере фрикассы.

Создайте папку с названием платежной системы в src\component\donate ,
В них создайте два файла route.php и pay.php с содержимым
PHP:
<?php

$routes = [
    [
        //Метод POST/GET
        "method"  => "POST",

        // Адрес
        // В разделе донат, пользователь будет выбирать платежную систему, через которую осуществить пожертвование.
        // Когда пользователь нажмет "Далее", будет отправлен запрос, для получения ссылки на сайт платежной системы.
        // Рекомендую оставить как есть, только заменить freekassa на название платежки.
        "pattern" => "/donate/transfer/freekassa/createlink",

        // Файл, в которой будет вызвана функция из call
        // Название файла, с классом и методом, где реализовано получение ссылки.
        "file"    => "pay.php",

        //Функция, которая обработкает когда прийдет запрос
        // В данной функции будет вызван класс freekassa из файла pay.php (что указан выше).
       // В классе freekassa будет вызван метод create_link()
       // Тут мы просто указали, имя класса и метода для получения ссылки платежки.
       // Рекомендую изменить название freekassa, на название платежной системы.
        "call"    => function() {
            (new freekassa())->create_link();
        },
    ],

   // Этот роутер для приема информации от платежной системы
    [
        // Метод получения информации, или GET или POST. Уже зависит от настройки в самой платежной системе.
        "method"  => "GET",

        // Адрес для уведомления от платежной системы, после зачисления доната.
        // В данном случае указывайте так ВАШСАЙТ.КОМ/donate/transfer/freekassa
        // Рекомендуется заменить freekassa на название вашей платежной системы
        "pattern" => "/donate/transfer/freekassa",
   
       // Файл реализации логики класса и метода transfer, где будет идти зачисление Донат Бонусов пользователю в личный кабинет.
        "file"    => "pay.php",

        // Название класса и метода, который будет срабатывать в случае, когда придет уведомление от платежки.
        // Рекомендуется заменить freekassa на название вашей платежной системы
        "call"    => function() {
            (new freekassa())->transfer();
        },
    ],
];
Если подвести итог, Вам нужно просто написать там название своей платежной системы вместо freekassa.


Теперь файл pay.php , где реализация всей логики.
Тут должно быть реализованы в классе freekassa два метода create_link и transfer
PHP:
<?php

use Ofey\Logan22\component\alert\board;
use Ofey\Logan22\component\lang\lang;
use Ofey\Logan22\model\donate\donate;
use Ofey\Logan22\model\user\auth\auth;

class freekassa {

    //Включена/отключена платежная система
    private static bool $enable = true;

    public static function isEnable(): bool{
       return self::$enable;
    }

    /**
     * Конфигурация
     * project_id - ID проекта
     * secret1 - секретный ключ №1
     * secret2 - секретный ключ №2
     */
    private $merchant_id      = 12345;
    private $secret_key_1     = '#######';
    private $secret_key_2     = '#######';
    private $currency_default = 'RUB';

    /*
     * Список IP адресов, от которых может прити уведомление от платежной системы.
     */
    private $allowIP = [
        '168.119.157.136',
        '168.119.60.227',
        '138.201.88.124',
        '178.154.197.79',
        '136.243.38.147',
        '136.243.38.149',
        '136.243.38.150',
        '136.243.38.151',
        '136.243.38.189',
        '136.243.38.108',
    ];

    /**
     * @return void
     * Проверка IP адреса
     */
    function allowIP(): void {
        if(!in_array($_SERVER['REMOTE_ADDR'], $this->allowIP)) {
            die("Forbidden: Your IP is not in the list of allowed");
        }
    }

    /**
     * @return void
     * Генерируем ссылку для перехода на сайт оплаты
     */
    function create_link(): void {
        // Проверка чтоб пользователь был авторизован, если нет
        // отправим ему сообщение -> https://github.com/Cannabytes/SphereWeb/blob/master/src/component/lang/package/ru.php#L303
 
        auth::get_is_auth() ?: board::notice(false, lang::get_phrase(234));
        filter_input(INPUT_POST, 'count', FILTER_VALIDATE_INT) ?: board::notice(false, "Введите сумму цифрой");

        $donate = include 'src/config/donate.php';
        $order_amount = $_POST['count'] * $donate['coefficient']['RUB'];
        $merchant_id = $this->merchant_id;
        $order_id = auth::get_email();
        $secret_word = $this->secret_key_1;
        $currency = $this->currency_default;
        $sign = md5($merchant_id . ':' . $order_amount . ':' . $secret_word . ':' . $currency . ':' . $order_id);
        $params = [
            'm'         => $merchant_id,
            'oa'        => (string)$order_amount,
            "currency"  => $currency,
            's'         => $sign,
            'o'         => $order_id,
            'us_userid' => auth::get_id(),
        ];
        echo "https://pay.freekassa.ru/?" . http_build_query($params);
    }

    //Получение информации об оплате
    function transfer(): void {
        $this->allowIP();

        $user_id = $_REQUEST['us_userid'];
        $amount = $_REQUEST['AMOUNT'];
        $MERCHANT_ID = $_REQUEST['MERCHANT_ID'];
        $MERCHANT_ORDER_ID = $_REQUEST['MERCHANT_ORDER_ID'];

        $sign = md5($MERCHANT_ID . ':' . $_REQUEST['AMOUNT'] . ':' . $this->secret_key_2 . ':' . $MERCHANT_ORDER_ID);

        if($sign != $_REQUEST['SIGN']){
            die('wrong sign');
        }

        // donate::currency необходима для конвертации валюты
        // к примеру пользователь оплатил в долларах, рубля, евро, гривне
        // мы используем внутренний курс, чтоб выдать N количество Донат Бонусов.
        $amount = donate::currency($amount, $_REQUEST['currency']);
        // auth::change_donate_point непосредственно зачисление в личный кабинет пользователю донат бонусов.
        auth::change_donate_point($user_id, $amount);
     
        echo 'YES';
    }
}

Отлично, теперь у Вас всё работает. Пробуйте проверяйте.

Если у Вас какие либо трудности, могу порекомендовать обратиться к тем кто занимается интеграцией с платжеными системами.
 
Последнее редактирование:
Тема была изменена, произведена доработка.
Теперь достаточно просто разместить файл с классом платежной системой, в html ничего дописывать не нужно.
 
Можно глупый вопрос? В настройках самой фрикассы указывать url оповещения мойсайт.ру/src/component/donate/freekassa/route.php? А url успешной\неудачной оплаты какие? Тоже на роутер кидать, или сделать отдельно ок.html и bad.html?
 
Есть варианты для UA и что-то для международной оплаты ?
Кто может помочь\проконсультировать ?
 
Есть варианты для UA и что-то для международной оплаты ?
Кто может помочь\проконсультировать ?
Попробуйте payeer, там своё апи простое есть и работает нормально. Единственное нет демо для теста работы скрипта после подключения, я помню закидывал им тогда и гонял пока не отладил все что было нужно.

Из минусов разве что, будет нужно игроку проходить верификацию перед тем как сможет пополнить.

Во всяком случае это лучше чем всякие однодневки.
Либо еще как совет, пройдитесь по серверам и посмотрите какой донат используют. Потом можно ли с этой системой работать и какие есть подводные камни.
 
Есть варианты для UA и что-то для международной оплаты ?
Кто может помочь\проконсультировать ?
Привет. Могу предложить USDT TRC20 P2P модуль для сферы. $2,5 в месяц без комиссий. Если интересно можно потестить как чё работает, будет где то к середине июня уже бета. ссылка ниже
 
Привет. Могу предложить USDT TRC20 P2P модуль для сферы. $2,5 в месяц без комиссий. Если интересно можно потестить как чё работает, будет где то к середине июня уже бета. ссылка ниже
P2P тоже в крипте ?
 
Назад
Сверху Снизу