Файл: pay/core.php
Строк: 176
<?php
require_once("config.php");
/**
* 1. Функция ядра process() делает обработку параметров
*
* 2. Если все параметры переданы и их значения корректны, то вызывается функция logSMS и SMS логируется.
* При этом статус SMS ставится как $STATUS_SMS_RECEIVED.
* В противном случае скрипт отсылает сообщение об ошибке и завершает свою работу.
*
* 3. Вызывается фунция deliverSMS(&$message), которая должна быть реализована продавцом в файле delivery.php.
* Если эта фунция вернула true, что означает успешную обработку SMS, то статус SMS в БД меняется на $STATUS_SMS_DELIVERED.
* В любом случае в ответ отсылается содержимое параметра $message,
* которое может содержать описание ошибки или любую другую информацию.
*
* 4. Не используйте echo в своих скриптах – вывод echo будет направлен в ответ на мобильный телефон донатора!
* Вместо этого используйте параметр $message функции deliverSMS
*
* 5. Кодировка ваших скриптов должна быть Windows-1251!
*
*
* function deliverSMS(&$message)
* {
* //реализация
* }
*
* deliverSMS возвращает true в случае успешеной обработки SMS, в противном случае возвращает false.
* Для описания ошибок и сообщений используйте параметр $message и не исползуйте echo!.
* Вот список глобальных переменных, доступных при доставке SMS
*
* $smsId -- ID SMS
* $amountUSD -- Стоимость SMS в USD
* $amount -- Стоимость SMS
* $hash -- Контрольная сумма SMS
* $text -- Текст SMS (без префикса)
* $prefix -- префикс SMS
* $number -- номер телефона, на который была послана SMS
* $phone -- номер телефона, с которого была послана SMS
* $date -- дата SMS
* $op -- ID Оператора
* $country -- Код страны (например ru)
* $eup -- end user price принимает значения 0.49 0.99 1.49 1.99 2.49 итд с шагом 0.5
*
* */
//Минимальный ID английского оператора
static $START_OPERATOR_EN_ID = 20401;
static $MESSAGES_RU =
array
(
"error"=>"Произошла ошибка при обработке SMS"
);
static $MESSAGES_EN =
array
(
"error"=>"Error in processing SMS"
);
function getLocalizedMessage($messageId, $ru)
{
global $MESSAGES_RU, $MESSAGES_EN;
$messages = null;
if($ru)
{
$messages = $MESSAGES_RU;
}
else
{
$messages = $MESSAGES_EN;
}
$ret = "";
if(array_key_exists($messageId, $messages))
{
return $messages[$messageId];
}
return $ret;
}
static $STATUS_SMS_RECEIVED = 0;
static $STATUS_SMS_DELIVERED = 1;
$smsId = null;
$amountUSD = null;
$hash = null;
$text = null;
$prefix = null;
$number = null;
$phone = null;
$date = null;
$op = null;
$amount = null;
$country = null;
$eup = null;
function readParam($paramName)
{
$ret = null;
if(isset($_REQUEST[$paramName]))
{
$ret = $_REQUEST[$paramName];
}
return $ret;
}
function process()
{
global $smsId, $amount, $amountUSD, $hash, $text, $prefix, $phone, $number, $date, $op, $country, $SECRET_KEY, $eup;
$smsId = readParam("smsid");
if($smsId == null)
{
error(1);
}
$amountUSD = readParam("amountUSD");
if($amountUSD == null)
{
error(2);
}
$amountUSD = floatval($amountUSD);
if($amountUSD <= 0)
{
error(3);
}
$amount = readParam("amount");
if($amount == null)
{
error(4);
}
$amount = floatval($amount);
if($amount <= 0)
{
error(5);
}
$country = readParam("country");
if($country == null)
{
error(6);
}
$hash = readParam("hash");
if($hash == null)
{
error(7);
}
$text = readParam("text");
if($text != null)
{
$text = rawurldecode($text);
}
$prefix = readParam("prefix");
if($prefix == null)
{
error(8);
}
$phone = readParam("phone");
if($phone == null)
{
error(9);
}
$number = readParam("number");
if($number == null)
{
error(10);
}
$date = readParam("date");
if($date == null)
{
error(11);
}
else
{
$date = rawurldecode($date);
}
$op = readParam("op");
if($op == null)
{
error(12);
}
$eup = readParam("EUP");
//Проверка контрольной суммы
$hash2 = "$smsId$prefix$op$text$number$SECRET_KEY";
$hash2 = md5($hash2);
if($hash2 != $hash)
{
error(13);
}
if(smsExists($smsId))
{
error(14);
}
logSMS();
$message = null;
$success = deliverSMS($message);
if($success)
{
onSMSDelivered($smsId);
}
echo $message;
}
function isRussianOperator()
{
$op = 0;
$paramName = "op";
if(isset($_REQUEST[$paramName]))
{
$op = $_REQUEST[$paramName];
}
$op = intval($op);
global $START_OPERATOR_EN_ID;
return $op < $START_OPERATOR_EN_ID;
}
function error($errorCode = null)
{
global $DEBUG_FLAG;
$msg = null;
if($DEBUG_FLAG && $errorCode != null)
{
$msg = "Error code: $errorCode";
}
else
{
$msg = getLocalizedMessage("error", isRussianOperator());
}
echo $msg;
die();
}
function mssql_escape_string($str)
{
$str = str_replace("'", "''", $str);
return $str;
}
function openSQLConnection($data)
{
$db_host = $data["host"];
$db_user = $data["login"];
$db_pass = $data["pass"];
$db_name = $data["db"];
mssql_connect($db_host, $db_user, $db_pass) or die(mssql_get_last_message());
mssql_select_db($db_name) or die(mssql_get_last_message());
}
function smsExists($smsId)
{
global $SQL_SERVER_SMS;
openSQLConnection($SQL_SERVER_SMS);
$smsId = mssql_escape_string($smsId);
$query = "select 1 from nextpay_sms where id = '$smsId'";
$res = mssql_query($query) or die(mssql_get_last_message());
$ret = mssql_num_rows($res) != 0;
mssql_close();
return $ret;
}
function logSMS()
{
global $SQL_SERVER_SMS;
openSQLConnection($SQL_SERVER_SMS);
global $smsId, $amount, $amountUSD, $hash, $text, $prefix, $phone, $number, $date, $op, $country, $eup;
$smsId = mssql_escape_string($smsId);
$amount = mssql_escape_string($amount);
$amountUSD = mssql_escape_string($amountUSD);
$hash = mssql_escape_string($hash);
$text = mssql_escape_string($text);
$prefix = mssql_escape_string($prefix);
$phone = mssql_escape_string($phone);
$number = mssql_escape_string($number);
$date = mssql_escape_string($date);
$op = mssql_escape_string($op);
$country = mssql_escape_string($country);
if($eup == null)
{
$eup = 'NULL';
}
else
{
$eup = floatval($eup);
}
global $STATUS_SMS_RECEIVED;
$status = $STATUS_SMS_RECEIVED;
$query = "insert into nextpay_sms
(id,
amount,
amount_usd,
hash,
text,
prefix,
number,
phone,
sms_date,
op,
date_created,
last_modified,
status,
country,
eup)
values
('$smsId',
$amount,
$amountUSD,
'$hash',
'$text',
'$prefix',
'$number',
'$phone',
'$date',
'$op',
GETDATE(),
GETDATE(),
$status,
'$country',
$eup)";
mssql_query($query) or die(mssql_get_last_message());
mssql_close();
}
function setSMSStatus($id, $status)
{
global $SQL_SERVER_SMS;
openSQLConnection($SQL_SERVER_SMS);
$id = mssql_escape_string($id);
$status = mssql_escape_string($status);
$query = "update nextpay_sms set status = '$status', last_modified=GETDATE() where id='$id'";
mssql_query($query) or die(mssql_get_last_message());
mssql_close();
}
function onSMSDelivered($id)
{
global $STATUS_SMS_DELIVERED;
setSMSStatus($id, $STATUS_SMS_DELIVERED);
}
?>