Назад

Оплата по смс

Автор: Kill Spirit: Дата: 05.10.2010

By poiunty

By land game

В этой статье я расскажу вам,как можно реализовать у себя на сайте смс оплату.

------
Начнем со скриптов:
mysql_a1a.php - отвечает за подключение к базе данных(a1a)

mysql_game.php - отвечает за подключение к базе данных(игры)

a1a.php - обработчик(работает с информацией,которая идет к нам от a1a)

donate.php - обработчик(кроном запускаем,если есть запись в базе,обрабатываем информацию и начисляем бонусы).Запускается кроном

bonus.txt - NPC,который в игре выдает бонусы(чисто символический пример)

Вы можете использовать платформу,которую предлагают разработчики.Но в силу того,что она упорно не работает на nginx без apache(mod_rewrite) мне пришлось написать простенький обработчик(a1a.php),его я тоже выложу,мб у кого-то тоже будет такая проблема как и у меня(web без mod_rewrite).

Если вы поставили платформу - использовать этот скрипт не надо.Хотя можете не ставить платформу,а воспользоваться этим обработчиком.

mysql_game.php


mysql_connect('host','user','pass');
mysql_select_db('game_base');
mysql_query("SET NAMES 'cp1251'");
?>


mysql_a1a.php:

mysql_connect('host','user','pass');
mysql_select_db('a1a_base');
mysql_query("SET NAMES 'cp1251'");
?>


a1a.php:

//by poiuty (land game)
//Получаем данные.
$smsid = $_GET['smsid'];
$date = $_GET['date'];
$country_id = $_GET['country_id'];
$msg = $_GET['msg'];
$msg_trans = $_GET['msg_trans'];
$operator_id = $_GET['operator_id'];
$user_id = $_GET['user_id'];
$cost_rur = $_GET['cost_rur'];
$cost = $_GET['cost'];
$test = $_GET['test'];
$num = $_GET['num'];
$try = $_GET['try'];
$ran = $_GET['ran'];
$skey = $_GET['skey'];
$sign = $_GET['sign'];
//Подключаемся к базе и записываем их
include('/путь_до_файла/mysql_a1a.php');
$query = "INSERT INTO `a1a_system_stat`(`date`,`country_id`,`msg`,`msg_trans`,`operator_id`,`user_id`,`cost_rur`,`cost`,
`test`,`num`,`try`,`ran`,`skey`,`sign`) VALUES ('$date','$country_id','$msg','$msg_trans','$operator_id','$user_id',
'$cost_rur','$cost','$test','$num','$try','$ran','$skey','$sign')";
if($result = mysql_query($query)){
echo "smsid:$smsid\n";
echo "status:reply\n";
echo "\n";
echo "Usluga oplachena.\n";
}else{
echo $query;
}
?>


структура БД:
CREATE TABLE IF NOT EXISTS `a1a_system_stat` (
`id` int(11) NOT NULL auto_increment,
`script_id` int(11) NOT NULL,
`msg` text,
`user_id` varchar(20) default NULL,
`num` int(11) default NULL,
`cost` varchar(20) default NULL,
`cost_rur` varchar(20) default NULL,
`skey` varchar(33) default NULL,
`operator_id` int(11) default NULL,
`date` datetime default NULL,
`smsid` int(11) NOT NULL,
`msg_trans` text,
`operator` varchar(200) default NULL,
`test` int(1) default NULL,
`ran` int(2) default NULL,
`try` int(11) default NULL,
`country_id` int(11) default NULL,
`sign` varchar(33) default NULL,
`state` int(1) NOT NULL,
UNIQUE KEY `id` (`id`),
KEY `script_id` (`script_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=49;



donate.php: Этот файл запускается кроном.

include('/путь_до_файла/mysql_a1a.php');
$query = "SELECT `msg`,`cost_rur`,`id` FROM `a1a_system_stat` WHERE `state` = '0'";
if(!$result = mysql_query($query)){
echo"Не получилось=(";
break;
}
if($result = mysql_query($query)){
$row = mysql_fetch_assoc($result);
$userid_one = strip_tags(htmlspecialchars($row['msg']));
$donate = intval($row['cost_rur']);
$id = $row['id'];
}
echo $query;
if($donate > 0){

//Удаляем запись
$query = "UPDATE `a1a_system_stat` set `state` = '1' WHERE `id` ='$id'";
if(!$result = mysql_query($query)){
echo"не получилось!";
}

//Отделяем префикс(в данном случае это "#real-ro "(подробнее читайте про substr в мане php.Если совсем ничего не поняли напишите в этой теме.)
$userid = substr($userid_one, 9, strlen($userid_one)-1);

//Узнаем сколько donate points у нас на акке
//Добавьте колонку donate в таблицу login(`donate` int(20) NOT NULL)
include('/путь_до_файла/mysql_game.php');
$query = "SELECT `donate` FROM `login` WHERE `userid` = '$userid'";
if($result = mysql_query($query)){
$row = mysql_fetch_assoc($result);
$points = $donate+$row['donate points'];
}

//Начисляем пойнты.
$query = "UPDATE `login` set `donate` = '$points' WHERE `userid` ='$userid'";
if(!$result = mysql_query($query)){
echo"не получилось!";
}
?>


bonus.txt:
prontera,50,50,1 script Бонус 88,{
mes"Что-то хотите купить?";
switch(select("Да")){
//Обнулим.
set .dp,0;
//Получили данные о счете.
query_sql "SELECT `donate` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",.dp;
//Если .dp=0 значит надо пополнить счет
if(.dp==0){mes"Пополните счет";close;}
//Вычитаем.
set .dp,.dp-1;
//Перезаписываем в базу.
query_sql "UPDATE `login` SET `donate` = '"+.dp+"' WHERE `account_id` = '"+getcharid(3)+"'";
//Выдаем.
getitem 606,1;
mes"Пока!";
}
}


Немного описания:
a1a.php принимает информацию от a1a.(для безопасности ограничьте доступ к нему,разрешите только с 213.248.50.104,78.108.178.206,88.214.194.119(уточните в тех под) Записывает в базу.Дальше donate.php чекает записи (можно сделать не кроном,а например как-только информация была записана в базу - вызвать donate.php,тем самым не нужно запускать скрипт кроном) и начисляет пойнты.В игре с помощью НПС игрок получает бонусы.

Автор: : Дата: 01.01.1970