Всем здрасти, вешал на свой проект этот магазинчик, решил поделится своим скриптом, можете организовать на своем сайте покупку чего-либо, а так-же бонусом вывод (!!!) денег для пользователей, так-же в автоматическом режиме. Для чего это нужно? Приведу свой проект как пример. Есть онлайн игра, в которой игроки покупают за реальные деньги виртуальную валюту. С помощью мерчанта я это настроил в автоматическом режиме (по мимо этого, юзеры регистрируются на платежке как мои рефералы и в будущем так-же приносят мне доход). Так-же, организован рефбек 20%. К примеру, ВАСЯ привел игрока ФЕДЯ. Сам ВАСЯ не вложил в проект ни копейки, а ФЕДЯ вложил 1000 рублей. ВАСЯ получает сразу же бонусом 200 рублей на вывод (напомню, вывод происходит так-же в автоматическом режиме, я теряю не много, а игрок может тупо приводить рефералов и зарабатывать реальные деньги). Вообщем, хватит лирики, начнем. Идем на сайт платежки - http://payeer.com, регистрируемся, получаем кошелек. Заходим в раздел "Магазин", жмем кнопку "Добавить магазин": Заполняем поля, название - произвольно, секретный ключ можете ввести свой, можете оставить дефолтный. Ну и ссылку на сайт: Далее, подтверждаем домен. Нам предлагают скачать файл и залить его в корневой каталог сайта. Тут, надеюсь все и так понятно. Заливаем, подтверждаем. Едем дальше. Нам нужно создать 3 странички. На первую будет кидать пользователя в случае успешной оплаты, на вторую - в случае ошибки, и третья - обработчик. Называем файлы как угодно но указываем точный путь до файлов, выкладываю листинг, с моего проекта. SUCCESS.PHP: <?php /* Гет данные которые получаем в случае успешной оплаты и можем использовать: m_operation_id=120902924 - Айди операции m_operation_date=11.01.2016%2006:21:21 - Дата заказа m_operation_pay_date=11.01.2016%2006:21:31 - дата оплаты m_orderid=1 - ордер айди (номер чека в нашем магазине) m_amount=0.01 - сумма m_curr=RUB - рубли m_status=success - успешная ли оплата ------------------ Обязательно сделать проверку, есть ли в нашей базе такой order ID, если есть - останавливаем скрипт, если нету - добавляем order id в базу, добавляем туда же дату \ время оплаты счета, сумму которую купили, успешно или нет (были ли ошибки какие-то). Далее, начисляем игроку его плюшки, тому кто привел игрока начисляем бонус, выводим сообщение об успешном пополнении счета. */ echo "Успешно пополнили счет на <b>".$_GET['m_amount']."</b> екр!<br>"; echo "Сохраните эту информацию, до поступления екров на Ваш счет:<br><br>"; echo "ID операции: ".$_GET['m_operation_id']."<br>"; echo "Сумма екров: ".$_GET['m_amount']."<br>"; echo "Номер чека : ".$_GET['m_orderid']."<br>"; echo "Дата заказа: ".$_GET['m_operation_date']."<br>"; echo "Дата оплаты: ".$_GET['m_operation_pay_date']."<br>"; echo "<hr>"; ?> <a href="http://site.ru/"><b>[Вернуться на сайт]</b></a> PHP <?php /* Гет данные которые получаем в случае успешной оплаты и можем использовать: m_operation_id=120902924 - Айди операции m_operation_date=11.01.2016%2006:21:21 - Дата заказа m_operation_pay_date=11.01.2016%2006:21:31 - дата оплаты m_orderid=1 - ордер айди (номер чека в нашем магазине) m_amount=0.01 - сумма m_curr=RUB - рубли m_status=success - успешная ли оплата ------------------ Обязательно сделать проверку, есть ли в нашей базе такой order ID, если есть - останавливаем скрипт, если нету - добавляем order id в базу, добавляем туда же дату \ время оплаты счета, сумму которую купили, успешно или нет (были ли ошибки какие-то). Далее, начисляем игроку его плюшки, тому кто привел игрока начисляем бонус, выводим сообщение об успешном пополнении счета. */ echo "Успешно пополнили счет на <b>".$_GET['m_amount']."</b> екр!<br>"; echo "Сохраните эту информацию, до поступления екров на Ваш счет:<br><br>"; echo "ID операции: ".$_GET['m_operation_id']."<br>"; echo "Сумма екров: ".$_GET['m_amount']."<br>"; echo "Номер чека : ".$_GET['m_orderid']."<br>"; echo "Дата заказа: ".$_GET['m_operation_date']."<br>"; echo "Дата оплаты: ".$_GET['m_operation_pay_date']."<br>"; echo "<hr>"; ?> <a href="http://site.ru/"><b>[Вернуться на сайт]</b></a> FAIL.PHP: (на самом деле, я ни разу не встречался с этой страницей, т.к. все ошибки обрабатывает сам магазин и в случае не оплаты закроет сессию пользователю, но раз просят, сделаем)... <? echo "Какая-то ошибка!"; ?> PHP <? echo "Какая-то ошибка!"; ?> STATUS.PHP: <?php if ($_SERVER['REMOTE_ADDR'] != '37.59.221.230') 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'], $m_key); $sign_hash = strtoupper(hash('sha256', implode(':', $arHash))); if ($_POST['m_sign'] == $sign_hash && $_POST['m_status'] == 'success') { echo $_POST['m_orderid'].'|success'; exit; } echo $_POST['m_orderid'].'|error'; } ?> PHP <?php if ($_SERVER['REMOTE_ADDR'] != '37.59.221.230') 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'], $m_key); $sign_hash = strtoupper(hash('sha256', implode(':', $arHash))); if ($_POST['m_sign'] == $sign_hash && $_POST['m_status'] == 'success') { echo $_POST['m_orderid'].'|success'; exit; } echo $_POST['m_orderid'].'|error'; } ?> И так, 3 файла есть, но это не все. Нам надо создать страничку, где пользователь выбирает, сколько и чего он покупает, сколько это будет стоить и сколько в итоге получит. PAY_IN.PHP: <form method="POST" action="check.php"> 1 екр = 0.5 рублей<br> // Да-да, цену на свой товар мы будем считать, делить... Укажите сумму (в екрах): <input type="text" name="m_amount" value="0"> <input type="submit" name="m_process" value=" Купить екр " /> </form> PHP <form method="POST" action="check.php"> 1 екр = 0.5 рублей<br> // Да-да, цену на свой товар мы будем считать, делить... Укажите сумму (в екрах): <input type="text" name="m_amount" value="0"> <input type="submit" name="m_process" value=" Купить екр " /> </form> Как мы видим, данные из формы отправляются на страничку check.php, в которой забиты данные, куда будут направляться денюжки, считать сумму ну и выведет некоторую информацию пользователю. CHECK.PHP: <?php $bd_order_id = 50; // тут настраиваем импорт из базы id последнего чека, для примера запишем номер чека 50... $login_id = "pers_id_536798"; // Наша переменная, которая содержит информацию о логине покупателя $ekr = $_POST['m_amount'] / 2; // 1 екр = 0.5 рублей // То, что ввели до этого в форму делим на два = получаем цену нашего товара... $m_shop = ' ******** '; // ID вашего магазина $m_orderid = $bd_order_id + 1; // берем наш номер чека и добавляем +1, в файл success.php обязательно добавьте обновление ячейки с номером последнего чека, обновляем этой переменной... $m_amount = number_format($ekr, 2, '.', ''); // PAYEER принимает формат только в виде 1.00 \ 1.50 \ 10.00 , так что придаем такой вид сумме в рублях (или долларах).. $m_curr = 'RUB'; // Собственно, какую валюту принимаем.. USD - доллары, EUR - еврики.. $m_desc = base64_encode('Paid '.$_POST['m_amount'].' ekr for '.$login_id); // Описание к чеку, так и не разобрался с кириллицей... $m_key = ' ******** '; // наш секретный ключ $arHash = array( $m_shop, $m_orderid, $m_amount, $m_curr, $m_desc, $m_key ); $sign = strtoupper(hash('sha256', implode(':', $arHash))); ?> <form method="GET" 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?>"> <?php echo "Покупка <b>".$_POST['m_amount']."</b> екров на сумму <b>".$m_amount."</b> рублей.<br>"; ?> <input type="submit" name="m_process" value=" Оплатить " /> </form> PHP <?php $bd_order_id = 50; // тут настраиваем импорт из базы id последнего чека, для примера запишем номер чека 50... $login_id = "pers_id_536798"; // Наша переменная, которая содержит информацию о логине покупателя $ekr = $_POST['m_amount'] / 2; // 1 екр = 0.5 рублей // То, что ввели до этого в форму делим на два = получаем цену нашего товара... $m_shop = ' ******** '; // ID вашего магазина $m_orderid = $bd_order_id + 1; // берем наш номер чека и добавляем +1, в файл success.php обязательно добавьте обновление ячейки с номером последнего чека, обновляем этой переменной... $m_amount = number_format($ekr, 2, '.', ''); // PAYEER принимает формат только в виде 1.00 \ 1.50 \ 10.00 , так что придаем такой вид сумме в рублях (или долларах).. $m_curr = 'RUB'; // Собственно, какую валюту принимаем.. USD - доллары, EUR - еврики.. $m_desc = base64_encode('Paid '.$_POST['m_amount'].' ekr for '.$login_id); // Описание к чеку, так и не разобрался с кириллицей... $m_key = ' ******** '; // наш секретный ключ $arHash = array( $m_shop, $m_orderid, $m_amount, $m_curr, $m_desc, $m_key ); $sign = strtoupper(hash('sha256', implode(':', $arHash))); ?> <form method="GET" 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?>"> <?php echo "Покупка <b>".$_POST['m_amount']."</b> екров на сумму <b>".$m_amount."</b> рублей.<br>"; ?> <input type="submit" name="m_process" value=" Оплатить " /> </form> И так, скрипт обработал всю информацию, подготовил новую форму которую уже отправляет на сервер PAYEER. Пользователь жмет оплатить, и покидает (временно) наш сайт... там оплачивает покупку, и попадает на SUCCESS.PHP Чуть не забыл, идем в наш магазин, раздел "внешний вид" и подключаем \ отключаем платежные системы, которые нам нужны (это если у покупателя нету в новосозданном кошельке payeer рублей, он может оплатить с другой платежки). У себя я оставил только эти: PAYEER, ****, Банковские карты, Мобильный платеж. Для любителей экзотики есть даже биткоины =) Теперь, нам надо отправить магазин на модерацию (иначе он будет работать только для вас, в тестовом режиме). Модерация проходит за день-два. На этом все, проверяйте работу скрипта. Пишите тут, будем разбираться если что не получится. Код голый, без оформления, так что вполне легко адаптируется под любой сайт, форму можно добавить на любую вашу страничку. Конечно, не маловажный фактор - работа с вашей базой данных, придется вести учет чеков, поэтому создавайте себе таблицу и работайте с ней. Если не умеете, это вам не надо. Если считаете что надо, пишите в ЛС, помогу за пару рублей. А еще лучше - погуглите, ничего сложного там нет, уроков работы с MySQL - миллионы в интернете. Всем спасибо за внимание, надеюсь кому-то это будет полезно. Статья моя, писал специально для LOLZTEAM! Копирайты и все такое %) На днях напишу, как сделать вывод денег из нашего магазина пользователям в автоматическом режиме. Такое мало где встречается, но поверьте, шанс заработать и тут-же вывести себе на кошелек деньги - ОЧЕНЬ привлекает посетителей)) Главное придумать хорошую схему.
Привет. Вопрос есть по поводу магазина. Все поставил, все настроил, все работает. Единственное не пойму где собственно пользователю товар отдавать или его баланс на сайте пополнять? Деньги прошли, с его счета снялись - успех, в итоге даст страницу SUCCESS. Логично было бы начислять средства или отдавать товар в файле STATUS: <?php if ($_SERVER['REMOTE_ADDR'] != '37.59.221.230') 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'], $m_key); $sign_hash = strtoupper(hash('sha256', implode(':', $arHash))); if ($_POST['m_sign'] == $sign_hash && $_POST['m_status'] == 'success') { echo $_POST['m_orderid'].'|success'; ВОТ ТУТ НАЧИСЛЯЕМ БАЛАНС ИЛИ ОТДАЕМ ТОВАР!!! exit; } echo $_POST['m_orderid'].'|error'; } ?> Но вот проблемка у меня. Пока тестовый режим прохожу. к месту в коде, который я пометил как "ВОТ ТУТ НАЧИСЛЯЕМ БАЛАНС ИЛИ ОТДАЕМ ТОВАР!!!" видимо обращение с PAYEER идет несколько раз. Потому что там у меня стоит код, который пишет лог в БД о покупках с их порядковыми номерами, датами и видами. Один раз тестовую оплату провел - одна запись, сидишь куришь - еще одна запись такая же появилась, потом еще, чай допил а там еще 5 записей. Я уже ничего не тестирую а записи летят! И кстати летят они без логина человека, который сделал покупку. Не определяется сессией логин почему то. Может из-за того, что это с IP PAYEER обращение идет к файлу STATUS? Надеюсь понятно объяснил проблему.