Реклама ООО Таймвэб
Реклама ООО Таймвэб
Реклама ООО Таймвэб

Подключение Payeer с помощью PHP

4 комментария
Подключение Payeer с помощью PHP

Введение

Главная особенность Payeer – это возможность анонимной работы, то есть без верификации пользователя. В этой статье мы будем подключать получение платежей и массовые выплаты.

Создание мерчанта

Заходим на сайт https://payeer.com/ и входим в аккаунт. Далее переходим во вкладку "API". У нас открывается вкладка "Список мерчантов", и мы нажимаем кнопку "Добавить". Вводим название, секретный ключ и домен. Секретный ключ где-нибудь запишите/сохраните. Он нам в будущем понадобится. Нажимаем кнопку "Добавить". Теперь нас просят закинуть файл в корень сайта. Делаем это и нажимаем "Подтвердить". Далее заполним URL’ы успешной оплаты, неуспешной оплаты и обработчика.

Вот пример:

  • example.com/successful.php — URL успешной оплаты (на который перекинет, если оплата успешна);
  • example.com/fail.php — URL неуспешной оплаты (на который перекинет, если оплата неуспешна);
  • example.com/handler.php — URL обработчика (будет обрабатывать платёж).

Далее переходим во вкладку "Внешний вид" и выбираем, какие платежная системы будут доступны для оплаты, а также какие виды валют можно будет использовать.

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться

Подключение на сайт

Создадим простую форму покупки на HTML:

<?php


// Если нажата кнопка "Купить"

if (isset($_POST['submit'])) {

    // Если имя заполнено и выбран предмет

    if (!empty($_POST['name']) && !empty($_POST['select'])) {


        // Будем производить оплату


    }

    // Иначе

    else

    {

        // Если не заполнено имя

        if (empty($_POST['name'])) {

            echo "Вы не ввели имя";

        }

        //Если не выбран предмет

        else if (empty($_POST['select'])) {

            echo "Вы не выбрали предмет";

        }

     }

}


?>


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Payeer платежи</title>

</head>

<body>

    <form method="post" action="">

        <p>Введите имя:<input type="text" name="name"></p>

        <p>Что хотите купить?<select name="select">

            <option value="Iphone">Айфон</option>

            <option value="Car">Машина</option>

            <option value="Food">Еда</option>

        </select></p>

        <p><input type="submit" name="submit" value="Купить!"></p>

    </form>

</body>

</html>

Теперь займёмся тем, что будет происходить, если всё заполнено верно.

Сначала создадим форму подтверждения платежа:

if (!empty($_POST['name']) && !empty($_POST['select'])) {


        ?>

        

        <form   method="post"   action="https://payeer.com/merchant/">

            <input   type="hidden"   name="m_shop" value="<?=$m_shop?>">

            <input   type="hidden"   name="m_orderid"   value="<?=$m_orderid?>">

            <input   type="hidden"   name="m_amount"   value="<?=$m_amount?>">

            <input   type="hidden"   name="m_curr" value="<?=$m_curr?>">

            <input   type="hidden"   name="m_desc" value="<?=$m_desc?>">

            <input   type="hidden"   name="m_sign" value="<?=$sign?>">

            <input   type="submit"   name="m_process"   value="send" />

        </form>


        <?php

    }

Получается, что если все поля заполнены, то PHP добавляет эту форму на страницу.

Теперь сформируем цифровую подпись (добавляем  перед созданием формы):

    if (!empty($_POST['name']) && !empty($_POST['select'])) {


        $m_shop   = '12345';   // id мерчанта

        $m_orderid   = '1'; //   номер счета в системе учета мерчанта

        $m_amount   = number_format(100,   2, '.', ''); // сумма счета с двумя знаками после точки

        $m_curr   = 'USD';   // валюта счета

        $m_desc   = base64_encode('Test');   // описание счета, закодированное с помощью алгоритма base64

        $m_key   = 'Ваш секретный   ключ';

        $arHash   = array($m_shop, $m_orderid, $m_amount, $m_curr, $m_desc);//   Добавляем доп. параметры, если вы их задали

        if (isset($m_params)){  

            $arHash[]   = $m_params;

        }


        //   Добавляем   секретный ключ

        $arHash[]   = $m_key;


        //   Формируем   подпись

        $sign   = strtoupper(hash('sha256',   implode(":", $arHash)));


        ?>


        <form   method="post"   action="https://payeer.com/merchant/">

            <input   type="hidden"   name="m_shop" value="<?=$m_shop?>">

            <input   type="hidden"   name="m_orderid"   value="<?=$m_orderid?>">

            <input   type="hidden"   name="m_amount"   value="<?=$m_amount?>">

            <input   type="hidden"   name="m_curr" value="<?=$m_curr?>">

            <input   type="hidden"   name="m_desc" value="<?=$m_desc?>">

            <input   type="hidden"   name="m_sign" value="<?=$sign?>">

            <input   type="submit"   name="m_process"   value="send" />

        </form>


        <?php

    }

Не забудьте проставить $m_shop и $m_key.

Так как у нас в форме 3 вещи (айфон, машина и еда), то давай создадим для них стоимости.

После проверки на то, всё ли заполнено, создаём переменную и ставим её значение:

    $summ = 0;


// Если выбрали айфон

    if($_POST['select'] == 'Iphone') {

        $summ = 1000;

    }

// Если выбрали машину

    else if ($_POST['select'] == 'Car') {

        $summ = 5000;

    }

// Если выбрали еду

    else if ($_POST['select'] == 'Food') {

        $summ = 50;

    }

А также меняем $m_amount на

$m_amount   = number_format($summ,   2, '.', ''); // сумма счета с двумя знаками после точки

Теперь при заполнении формы у нас появляется кнопка "send":

Заполнить форму PayeerИ только при нажатии на неё перекидывает на страницу оплаты.

Это очень неудобно, давайте сделаем, чтобы она нажималась автоматически:

добавляем форме id="payeer_form_real" и style="display:none" и ниже формы вставляем скрипт, который автоматически нажмет на кнопку для перехода на платежную систему.

<script type="text/javascript">

document.getElementById('payeer_form_real').submit();

</script>

Теперь при нажатии кнопки купить мы сразу переходим на страницу оплаты!

Вот полный блок того, что мы сейчас изменили:

    if (!empty($_POST['name']) && !empty($_POST['select'])) {


        $summ = 0;


        // Если выбрали айфон

        if($_POST['select'] == 'Iphone') {

            $summ = 1000;

        }

        // Если выбрали машину

        else if ($_POST['select'] == 'Car') {

            $summ = 5000;

        }

        // Если выбрали еду

        else if ($_POST['select'] == 'Food') {

            $summ = 50;

        }


        $m_shop   = '12345';   // id мерчанта

        $m_orderid   = '1'; //   номер счета в системе учета мерчанта

        $m_amount   = number_format($summ,   2, '.', ''); // сумма счета с двумя знаками после точки

        $m_curr   = 'USD';   // валюта счета

        $m_desc   = base64_encode('Test');   // описание счета, закодированное с помощью алгоритма base64

        $m_key   = '';

        $arHash   = array($m_shop, $m_orderid, $m_amount, $m_curr, $m_desc);//   Добавляем доп. параметры, если вы их задали

        if (isset($m_params)){  

            $arHash[]   = $m_params;

        }


        //   Добавляем   секретный ключ

        $arHash[]   = $m_key;


        //   Формируем подпись

        $sign   = strtoupper(hash('sha256',   implode(":", $arHash)));


        ?>


        <form style="display:none" id="payeer_form_real" method="post"   action="https://payeer.com/merchant/">

            <input   type="hidden"   name="m_shop" value="<?=$m_shop?>">

            <input   type="hidden"   name="m_orderid"   value="<?=$m_orderid?>">

            <input   type="hidden"   name="m_amount"   value="<?=$m_amount?>">

            <input   type="hidden"   name="m_curr" value="<?=$m_curr?>">

            <input   type="hidden"   name="m_desc" value="<?=$m_desc?>">

            <input   type="hidden"   name="m_sign" value="<?=$sign?>">

            <input   type="submit"   name="m_process"   value="send" />

        </form>


<script type="text/javascript">

document.getElementById('payeer_form_real').submit();

</script>


        <?php

    }

При успешной оплате нас перекинет на example.com/success.php.

При неуспешной на example.com/fail.php.

А также нужно создать обработчик (example.com/handler.php).

Давайте создадим его в корне сайта!

В success.php вы должны создать страницу, которая будет сообщать человеку, что оплата прошла. Например, выводить информацию о том, что товар куплен.

В fail.php вы должны создать страницу, которая будет сообщать человеку, что оплата не прошла. Например, выводить текст о том, что оплата не прошла.

В handler.php пишем:

<?php

//   Отклоняем   запросы с   IP-адресов, которые   не принадлежат Payeer

if   (!in_array($_SERVER['REMOTE_ADDR'],   array('185.71.65.92', '185.71.65.189','149.202.17.210')))   return;


if  (isset($_POST['m_operation_id'])   && isset($_POST['m_sign'])) {

    $m_key   = 'Ваш секретный ключ';  


    //   Формируем   массив для генерации подписи

    $arHash   = array($_POST['m_operation_id'],$_POST['m_operation_ps'],$_POST['m_operation_date'],$_POST['m_operation_pay_date'],$_POST['m_shop'],$_POST['m_orderid'],$_POST['m_amount'],$_POST['m_curr'],$_POST['m_desc'],$_POST['m_status']);  


    //   Если были переданы дополнительные параметры, то добавляем их в массив

    if   (isset($_POST['m_params']))

    {

        $arHash[]   = $_POST['m_params'];

    }  


    //   Добавляем в массив секретный ключ

    $arHash[]   = $m_key;


    //   Формируем подпись

    $sign_hash   = strtoupper(hash('sha256',   implode(':', $arHash)));  


    //   Если подписи совпадают и статус платежа "Выполнен"

    if   ($_POST['m_sign']   == $sign_hash &&   $_POST['m_status'] ==   'success')

    {  


        //   Здесь можно пометить счет как оплаченный или зачислить денежные средства вашему клиенту  


        //   Возвращаем, что платеж был успешно обработан

        exit($_POST['m_orderid'].'|success');

    }  

    

    //   В противном случае возвращаем ошибку

    exit($_POST['m_orderid'].'|error');}

Не забудьте указать секретный ключ в $m_key.

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

О создании и работе с базами данных вы можете прочитать в моей прошлой статье, поэтому подключение к БД комментировать не буду.

Создадим таблицу items с одним полем count:

Сервер localhostИ в поле, где платёж помечается как выполненный:

        $host = 'localhost';

        $user = 'intzet_test';

        $password = '12345';

        $db = 'intzet_test';

        $charset = 'utf8';

        $dsn = "mysql:host=$host;dbname=$db;charset=$charset";

        $pdo = new PDO ($dsn,$user,$password);  


        $sql = 'INSERT INTO `items` (`count`) VALUES (:count);';

        $query = $pdo -> prepare($sql);

        $query -> execute(['count' => 1])

Мы будем вставлять запись с цифрой 1, если что-то купили.

Возвращаемся к index.php и изменяем валюта на RUB и вместо:

        $summ = 0;

        // Если выбрали айфон

        if($_POST['select'] == 'Iphone') {

            $summ = 1000;

        }

        // Если выбрали машину

        else if ($_POST['select'] == 'Car') {

            $summ = 5000;

        }

        // Если выбрали еду

        else if ($_POST['select'] == 'Food') {

            $summ = 50;

        }

пишем $summ = 1;

Это нужно, чтобы мы сами могли совершить платёж и проверить работоспособность.

До оплаты:

Результат оплаты БДПосле оплаты:

БД после оплатыПрием платежей работает. Всё, что было показано выше, только пример, чтобы вы поняли, как подключать эту платежную систему. Вы можете сами придумать, как её использовать.

Массовые выплаты

Заходим на https://payeer.com/, далее во вкладку "API" → "Массовые выплаты". Нажимаем кнопку "Добавить".

Вводим название, секретный ключ и айпи (можно не трогать). Секретный ключ где-нибудь запишите/сохраните. Он нам в будущем понадобится.

Далее скачаем PHP-класс для работы с Payeer выплатами. Скачать его можно на странице "Массовые выплаты" → "Документация" → "Скачать".

Помещаем его в корень сайта.

Создадим новый файл payout.php в корне сайта.

В него:

<?php

// Создаём переменную

$cash = 2;


?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>payout</title>

</head>

<body>

    <!-- Выводим её на экран -->

    <?=$cash?>

    

</body>

</html>

Переходим на http://example.com/payout.php и видим только цифру 2. Это и будет наш баланс, который мы будем выводить.

Создадим кнопку для вывода денег + проверки:

<form method="POST" action="">

<input type="submit" name="submit" value="Вывести">

</form>

И в PHP-теги (после определения переменной):

// Авторизуемся

$accountNumber = '123'; //Ваш номер счета в системе Payeer

$apiId = '123'; // id апи-пользователя, выдается при добавлении API

$apiKey = '123'; //секретный ключ апи-пользователя


require_once('cpayeer.php');

$payeer = new CPayeer($accountNumber, $apiId, $apiKey);

if ($payeer->isAuth())

{

    echo "Вы успешно авторизованы";

}

else

{

    echo '<pre>'.print_r($payeer->getErrors(), true).'</pre>';

}


// Проверка, существует ли аккаунт

if ($payeer->isAuth())

{

    if($payeer->checkUser(array(

        'user' => 123, // тут вместо 123 нужно указать аккаунт того, кому делается выплата

    )))

    {

        echo 'exists';


        // Если существует, делаем тут выплату

        if ($payeer->isAuth())

        {

            $initOutput = $payeer->initOutput(array(

                'ps' => '1136053',

                //'sumIn' => 1,

                'curIn' => 'RUB',

                'sumOut' => $cash, // сумма, которую переводим

                'curOut' => 'RUB',

                'param_ACCOUNT_NUMBER' => 123 // тут вместо 123 нужно указать номер получателя

            ));


            if ($initOutput)

            {

                $historyId = $payeer->output();

                if ($historyId > 0)

                {

                    echo "Выплата успешна";


                }

                else

                {

                    echo '<pre>'.print_r($payeer->getErrors(), true).'</pre>';

                    echo "Выплата неуспешна";

                }

            }

            else

            {

                echo '<pre>'.print_r($payeer->getErrors(), true).'</pre>';

            }

        }

        else

        {

            echo '<pre>'.print_r($payeer->getErrors(), true).'</pre>';

            echo "Нет аутентификации";

        }


        // Закончили делать выплату

    }

    else

    {

        echo 'not found';

    }

}

else

{

    echo '<pre>'.print_r($payeer->getErrors(), true).'</pre>';

}

После этого выведет: transferHimselfForbidde, если вы пробовали вывести деньги себе. Для других Payeer аккаунтов всё сработает.

Примеры таких проверок можно посмотреть здесь: https://payeer.com/ru/account/api/

А описания здесь: https://payeerru.docs.apiary.io/#reference/0

Заключение

Я надеюсь, что вам помогла моя статья, и вы теперь можете самостоятельно делать выплаты или пополнения с помощью Payeer.

Коды:

index.php: https://pastebin.com/FXjwaNxM

payout.php: https://pastebin.com/fzcJvSEC

handler.php: https://pastebin.com/3buDMAdn

Спасибо вам за внимание!

Виртуальный сервер и VDS

echo -e "Все про серверы, сети, хостинг и еще раз серверы" >/dev/pts/0

Комментарии

Дмитрий Никулин -2
04 июня в 2022
вот тут сразу видно объеснили так объеснили и все понятно. спасибо тому человеку за пример
Дмитрий Никулин -2
04 июня в 2022
есть специалисты по настройки фреекассы . я вот для мобитвы поставил фреекассу ну игра мобитва мне ненужна так как она на джс. и я в этом не че непонимаю особенно в плане анимаций и поставил мобитву как пример чтоб по ней поставить фрекассу в др игру каторой щас занимаюсь. и хз стоит ли вообще с фрекассой связываться. люди на форумах пишут то что они типо банят если денег много там. а так на мобитве все работает и все зачисляеться даже можно купить ребот ивент клинок к примеру сумма каторого состовляет 150 р. или можно поставить свой товар . так же приходит извещения что ты если купил платину то приходит что вам начисленно платины и сумма . а если предмет то пишет какой придмет. ну опять же она мне ненужна так как мороки будит больше. если кому нужна то могу скинуть двиг или дать ссылку на скачку . и очень нужна ваша помощь по обработчику фреекассы. да и кстати мобитву отдам с рабочай фрекассой только зарегаетесь секрет ключь свой впишите и айди магазина. буду ждать ответа может мне повезет и найдуться добрые люди
Подскажите пожалуйста, как реализовать оплату с произвольной суммой? Например через input, куда пользователь сам внесёт сумму для оплаты!
sanek42 -1
28 янв в 2023
Здравствуйте! Расскажите, пожалуйста, как распарсить и вот это вот: $_POST["m_params"]
Модератор
Пришел кот и стер лапкой этот комментарий
С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
С помощью соцсетей
У меня уже есть аккаунт Войти
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте