Курс: Продающий лендинг для вашего бизнеса Бесплатно
Создайте сайт с нуля за 40 минут и запустите продажи

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

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

Введение

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

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

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

Вот пример:

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

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

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

Создадим простую форму покупки на 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

Комментарии

С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
С помощью соцсетей
У меня уже есть аккаунт Войти
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте