Введение
Главная особенность 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":
И только при нажатии на неё перекидывает на страницу оплаты.
Это очень неудобно, давайте сделаем, чтобы она нажималась автоматически:
добавляем форме 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:
И в поле, где платёж помечается как выполненный:
$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
Спасибо вам за внимание!
Комментарии