Создаем в корне сайта файл payeer_merchant.php, кодировка либо Windows 1251 либо UTF-8 без BOM.
Определяем, что будем писать код PHP - первоначальное содержимое файла
Для того, чтобы наш скрипт не запускался при посещении кем-либо делаем проверку IP адресов сервера оповещений Payeer
Мы будем запускать его при получении от сервера оповещений Payeer ID операции и подпись.
Добавляем в предыдущий код
Если сервер оповещений прислал ID платежа и подпись ($_POST['m_operation_id']) && isset($_POST['m_sign'])), начинаем проверку этих данных
Если секретное слово у Вас находится в файле _class.config.php, в данный момент уже нужно подключать классы, функции и базу игры
Далее формируем подпись из полученных данных от сервера оповещений Payeer и нашего секретного слова
В данный момент имеем код
Проверяем соответствие полученной подписи от сервера оповещений Payeer со сформированной нами, а также положительный статус платежа
Проверяем наличие ID платежа присланного сервером оповещений Payeer в нашей базе
Далее проверяем на отсутствие платежа в базе и, если платежа нет, выдаем для Payeer ошибку
Создаем массив данных платежа
Проверяем не оплачен ли уже данный платеж
Далее Вы производите начисление средств пользователю, бонусы, деревья, фрукты и т.п.
После Ваших кодов о зачислении средств поставьте в базе статус платежу на "оплачено"
В итоге получили код
Определяем, что будем писать код PHP - первоначальное содержимое файла
Код:
<?php
?>
Код:
<?php
if (!in_array($_SERVER['REMOTE_ADDR'], array('185.71.65.92', '185.71.65.189', '149.202.17.210'))) die('ERROR IP');
?>
Делаем чтобы наш скрипт пополнения запускался при наличии определенных данных. Также сделаем вывод ошибки при неполучении этих данных.die('ERROR IP') - останавливает выполнение скрипта и выдает текст 'ERROR IP' при несовпадении IP адреса
Мы будем запускать его при получении от сервера оповещений Payeer ID операции и подпись.
Добавляем в предыдущий код
Код:
if (isset($_POST['m_operation_id']) && isset($_POST['m_sign']))
{
}
else{
die('NO OPERATION ID OR SIGN');
}
Получаемdie('NO OPERATION ID OR SIGN'); - при отсутствии в оповещении сервера Payeer ID платежа либо подписи останавливает скрипт и выдает надпись 'NO OPERATION ID OR SIGN'.
Код:
<?php
if (!in_array($_SERVER['REMOTE_ADDR'], array('185.71.65.92', '185.71.65.189', '149.202.17.210'))) die('ERROR IP');
if (isset($_POST['m_operation_id']) && isset($_POST['m_sign']))
{
}
else{
die('NO OPERATION ID OR SIGN');
}
?>
Если секретное слово у Вас находится в файле _class.config.php, в данный момент уже нужно подключать классы, функции и базу игры
Код:
# Автоподгрузка классов
function __autoload($name){ include("classes/_class.".$name.".php");}
# Класс конфига
$config = new config;
# Функции
$func = new func;
# База данных
$db = new db($config->HostDB, $config->UserDB, $config->PassDB, $config->BaseDB);
Код:
$m_key = $config->secretW;
$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)));
Код:
<?php
if (!in_array($_SERVER['REMOTE_ADDR'], array('185.71.65.92', '185.71.65.189', '149.202.17.210'))) die('ERROR IP');
if (isset($_POST['m_operation_id']) && isset($_POST['m_sign']))
{
# Автоподгрузка классов
function __autoload($name){ include("classes/_class.".$name.".php");}
# Класс конфига
$config = new config;
# Функции
$func = new func;
# База данных
$db = new db($config->HostDB, $config->UserDB, $config->PassDB, $config->BaseDB);
$m_key = $config->secretW;
$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)));
}
else{
die('NO OPERATION ID OR SIGN');
}
?>
Код:
if ($_POST['m_sign'] == $sign_hash && $_POST['m_status'] == 'success')
{
}
echo $_POST['m_orderid'].'|error';
Теперь наш код выглядит следующим образомecho $_POST['m_orderid'].'|error'; - из документации Payeer. Данный текст об ошибке появляется при несоответсвии подписи либо при статусе платежа отличным от 'success'. Его считывает сервер оповещений Payeer и через некоторое время пытается выполнить повторный запрос к Вашему мерчанту.
Код:
<?php
if (!in_array($_SERVER['REMOTE_ADDR'], array('185.71.65.92', '185.71.65.189', '149.202.17.210'))) die('ERROR IP');
if (isset($_POST['m_operation_id']) && isset($_POST['m_sign']))
{
# Автоподгрузка классов
function __autoload($name){ include("classes/_class.".$name.".php");}
# Класс конфига
$config = new config;
# Функции
$func = new func;
# База данных
$db = new db($config->HostDB, $config->UserDB, $config->PassDB, $config->BaseDB);
$m_key = $config->secretW;
$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'].'|error';
}
else{
die('NO OPERATION ID OR SIGN');
}
?>
Код:
$order_id = intval($_POST['m_orderid']);
$db->Query("SELECT * FROM db_payeer_insert WHERE id = '".$order_id."'") or die('ERROR ORDER ID IN BASE');
Код:
if($db->NumRows() == 0){ echo $_POST['m_orderid'].'|error'; exit;}
Код:
$payeer_row = $db->FetchArray();
Код:
if($payeer_row['status'] > 0){ echo $_POST['m_orderid'].'|success'; exit;}
После Ваших кодов о зачислении средств поставьте в базе статус платежу на "оплачено"
Код:
$db->Query("UPDATE db_payeer_insert SET status = '1' WHERE id = '".$order_id."'");
Код:
<?php
if (!in_array($_SERVER['REMOTE_ADDR'], array('185.71.65.92', '185.71.65.189', '149.202.17.210'))) die('ERROR IP');
if (isset($_POST['m_operation_id']) && isset($_POST['m_sign']))
{
# Автоподгрузка классов
function __autoload($name){ include("classes/_class.".$name.".php");}
# Класс конфига
$config = new config;
# Функции
$func = new func;
# База данных
$db = new db($config->HostDB, $config->UserDB, $config->PassDB, $config->BaseDB);
$m_key = $config->secretW;
$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')
{
$order_id = intval($_POST['m_orderid']);
$db->Query("SELECT * FROM db_payeer_insert WHERE id = '".$order_id."'") or die('ERROR ORDER ID IN BASE');
if($db->NumRows() == 0){ echo $_POST['m_orderid'].'|error'; exit;}
$payeer_row = $db->FetchArray();
if($payeer_row['status'] > 0){ echo $_POST['m_orderid'].'|success'; exit;}
//Ваши зачисления, бонусы и т.п.
$db->Query("UPDATE db_payeer_insert SET status = '1' WHERE id = '".$order_id."'");
echo $_POST['m_orderid'].'|success';
exit;
}
echo $_POST['m_orderid'].'|error';
}
else{
die('NO OPERATION ID OR SIGN');
}
?>
Последнее редактирование: