Вход Регистрация
Файл: 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);
}
?>
Онлайн: 0
Реклама