Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как доработать скрипт
 
 автор: kyljapin   (06.09.2013 в 18:08)   письмо автору
 
 

Добрый день! Помогите разобраться есть код обработчика:

Дайджест запроса рассчитывается из параметров запроса, которые задаются в строго указанном порядке:
md5 = unique + country + operator + number + phone + message + secret_key

полученный результат посылается для проверки целостности в параметре hash


Код - обработчик с использованием секретного кода и проверкой целостности запроса



<?php

if(isset($_POST['unique'], $_POST['country'], $_POST['operator'], $_POST['number'], $_POST['phone'], $_POST['message'], $_POST['hash']))
{

$number = array("1234", "5678");

if(!in_array($_POST['number'], $number))
{
exit('Сообщение отправлено не на тот номер');
}

$secret_key = '6dfgmEW98vmWEbdfe3';

$md5 = md5($_POST['unique'].$_POST['country'].$_POST['operator'].$_POST['number'].$_POST['phone'].$_POST['message'].$secret_key);

if(strcasecmp($md5, $_POST['hash']) == 0)
{
header("Content-Type: text/plain; charset=utf-8");
exit('Благодарим за участие! Ваш код: 1234');
}
}

?>



Любой ответ со статусом 200 считается успешным; ответ направляется абоненту. Система поддерживает повторную отправку запроса в случае, если при его передаче произошло одно из следующих событий:
• Время ожидания ответа от внешнего сервера истекло. Максимальное время ожидания ответа 20 секунд;
• Web-сервером возвращен код ошибки, т.е. любой код, отличный от 200;
• Ответ был некорректным: отсутствовал текст ответного сообщения.


Нужно чтобы из этого обработчика две переменные $_POST['phone'], $_POST['message'] отправлялись на EMAIL. Подскажите как сделать. Заранее спасибо.

  Ответить  
 
 автор: confirm   (06.09.2013 в 18:23)   письмо автору
 
   для: kyljapin   (06.09.2013 в 18:08)
 

strcasecmp($md5, $_POST['hash']) - это как понимать, 6dfgmEW98vmWEbdfe3 и 6dfgmew98vmwebdfe3 одно и тоже?

А для отправки почтой воспользуйтесь функцией mail.

  Ответить  
 
 автор: kyljapin   (06.09.2013 в 19:55)   письмо автору
 
   для: confirm   (06.09.2013 в 18:23)
 

это полностью рабочий скрипт обработчик sms агрегатора payy я не могу к нему прикрепить функцию mail у меня или приходит нормальный ответ или приходит на почту то что нужно не могу добиться то что мне надо. готов дать вознаграждение за помощь. Пишите мне.

  Ответить  
 
 автор: confirm   (06.09.2013 в 20:04)   письмо автору
 
   для: kyljapin   (06.09.2013 в 19:55)
 

Не знаю какой смысл вы вкладываете в "рабочий", но функции strcasecmp побоку регистр. Возникает вопрос - зачем при этом указывать для сравнения 6dfgmEW98vmWEbdfe3?
И вообще, хватит простого сравнения.

Что касается почты, то в чем именно проблема? Из "функцию mail у меня или приходит нормальный ответ или приходит на почту то что нужно" следует, что проблем нет.

Вы свой код отправки почты покажите.

  Ответить  
 
 автор: kyljapin   (06.09.2013 в 20:15)   письмо автору
 
   для: confirm   (06.09.2013 в 20:04)
 

просто я до этого работал у a1 agregator и у меня тоже был обработчик

<?
// адрес на который будет приходить почта
$TO_EMAIL = 'email куда отправляется почта';
// адрес от имени которого будет отправляться смс, обязательно вместо example.com должен быть хост на котором стоит скрипт
$FROM_EMAIL = 'от кого почта';
$RESPONSE = array();
$RESPONSE[]= "smsid:".$_GET['smsid'];
$RESPONSE[]= "status:reply";
$RESPONSE[]= "content-type:text/plain/ran";
$RESPONSE[]= "";

$param = explode(' ',$_GET['msg']);
$phone = $_GET['user_id'];
$cost = $_GET['cost'];
$cost_rur = $_GET["cost_rur"];
array_shift($param);
$content = join(' ',$param);
$RESPONSE[] = 'www.smsku.ru';

$subject = 'сообщение абоненту';
$message = " Телефон Абонента: $phone\n Ваш доход с этого SMS: $cost_rur\n SMS было отправлено на номер: ".$_GET['num']."\n SMS было отправлено на префикс: ".$_GET['msg']."\n SMS надежность: ".$_GET['ran']."\n Текст SMS: $content";
/*
remove alfa
$headers =
'From: '.$FROM_EMAIL . "\r\n" .
'To: '.$TO_EMAIL. "\r\n" .
'X-Mailer: PHP/' . phpversion();

@mail($TO_EMAIL, $subject, $message, $headers);
*/
$headers = "Content-type: text/plain; charset=windows-1251 \r\n";
$headers .= "From: ".$FROM_EMAIL."\r\n";
@mail($TO_EMAIL, $subject, $message, $headers);
echo join("\n",$RESPONSE);


сейчас вынужден перейти к другому агрегатору а у него другой обработчик описаный выше. 6dfgmEW98vmWEbdfe3 это секретный код для проверки. я не могу соединить эти два кода.

  Ответить  
 
 автор: confirm   (06.09.2013 в 20:26)   письмо автору
 
   для: kyljapin   (06.09.2013 в 20:15)
 

Код нужно обрамлять не тегом [b] а [cоde].

strcasecmp - прочтите о функции, и поймите, что ваше сравнение это несуразица.

mail - а это о функции mail. Этот код отправки, то что и надо и нужно добавить еще данные, или же отправляться должно иное?

Указанная в заголовке кодировка почтового отправления не определяет кодировку аргумента subject, ее необходимо кодировать.

  Ответить  
 
 автор: kyljapin   (06.09.2013 в 21:28)   письмо автору
 
   для: confirm   (06.09.2013 в 20:26)
 

не знаю что я делаю не так так как самоучка но
<?php
// адрес на который будет приходить почта
$TO_EMAIL = 'kyljapin@ngs.ru,79130060362@sms.mtslife.ru';
// адрес от имени которого будет отправляться смс, обязательно вместо example.com должен быть хост на котором стоит скрипт
$FROM_EMAIL = 'admin@smsku.ru';
$subject = 'Получена sms';
$message = " Телефон Абонента: $phone\n Текст SMS: $message";
/*
remove alfa
$headers =
'From: '.$FROM_EMAIL . "\r\n" .
'To: '.$TO_EMAIL. "\r\n" .
'X-Mailer: PHP/' . phpversion();

@mail($TO_EMAIL, $subject, $message, $headers);
*/
$headers = "Content-type: text/plain; charset=windows-1251 \r\n";
$headers .= "From: ".$FROM_EMAIL."\r\n";
@mail($TO_EMAIL, $subject, $message, $headers);
echo join("\n",$RESPONSE);
if(isset($_POST['unique'], $_POST['country'], $_POST['operator'], $_POST['number'], $_POST['phone'], $_POST['message'], $_POST['hash']))
{

$number = array("4443", "5678");

if(!in_array($_POST['number'], $number))
{
exit('Сообщение отправлено не на тот номер');
}

$secret_key = 'TDUTYBQREKZGBY';

$md5 = md5($_POST['unique'].$_POST['country'].$_POST['operator'].$_POST['number'].$_POST['phone'].$_POST['message'].$secret_key);

if(strcasecmp($md5, $_POST['hash']) == 0)
{
header("Content-Type: text/plain; charset=utf-8");
exit('Ваше сообщение принято www.smsku.ru');
}
}
?>

этот скрипт отправляет емайл что пришла смс но без необходимых данных и идет ответ абоненту с ошибкой warning: join() [function.join: invalid arguments passed in /home/h
а если так
<?php

if(isset($_POST['unique'], $_POST['country'], $_POST['operator'], $_POST['number'], $_POST['phone'], $_POST['message'], $_POST['hash']))
{

$number = array("4443", "5678");

if(!in_array($_POST['number'], $number))
{
exit('Сообщение отправлено не на тот номер');
}

$secret_key = 'TDUTYBQREKZGBY';

$md5 = md5($_POST['unique'].$_POST['country'].$_POST['operator'].$_POST['number'].$_POST['phone'].$_POST['message'].$secret_key);

if(strcasecmp($md5, $_POST['hash']) == 0)
{
header("Content-Type: text/plain; charset=utf-8");
exit('Ваше сообщение принято www.smsku.ru');
}
}
// адрес на который будет приходить почта
$TO_EMAIL = 'kyljapin@ngs.ru,79130060362@sms.mtslife.ru';
// адрес от имени которого будет отправляться смс, обязательно вместо example.com должен быть хост на котором стоит скрипт
$FROM_EMAIL = 'admin@smsku.ru';
$subject = 'Получена sms';
$message = " Телефон Абонента: $phone\n Текст SMS: $message";
/*
remove alfa
$headers =
'From: '.$FROM_EMAIL . "\r\n" .
'To: '.$TO_EMAIL. "\r\n" .
'X-Mailer: PHP/' . phpversion();

@mail($TO_EMAIL, $subject, $message, $headers);
*/
$headers = "Content-type: text/plain; charset=windows-1251 \r\n";
$headers .= "From: ".$FROM_EMAIL."\r\n";
@mail($TO_EMAIL, $subject, $message, $headers);
echo join("\n",$RESPONSE);
?>

ответ абоненту правильный но не приходит сообщение мне.

  Ответить  
 
 автор: confirm   (06.09.2013 в 21:37)   письмо автору
 
   для: kyljapin   (06.09.2013 в 21:28)
 

Я же вам сказал чем обрамлять код, ну неужели не видно, что читать его невозможно?

Ругается потому, что здесь echo join("\n",$RESPONSE); несоответствующий аргумент $RESPONSE.

А чтобы во второй отправке была почта и вам, нужно посылать еще одно письмо, на ваш адрес.

Еще раз повторяю - аргумент subject нужно кодировать, иначе нет гарантии, что пользователь прочтет его.

<?
$subject 
'=?windows-1251?b?' base64_encode('Получена sms') . '?=';

  Ответить  
 
 автор: confirm   (06.09.2013 в 21:24)   письмо автору
 
   для: kyljapin   (06.09.2013 в 20:15)
 

Мне кажется, что и прочитав, вы не поймете сути своей ошибки. Поэтому начнем с того, что "а" не равна "А". Это значит, что применение в паролях (и прочих секретиков) символов в различном регистре увеличивает количество вариантов таких ключей.
Что происходит у вас. Вы сравниваете хеш, в котором нет символов верхнего регистра, но тем не менее вы на это не обращаете внимания. Другими словами вы позволяете взломщику обходится гораздо меньшими вариантами подбора ключа, так как для 90779ceaea517750f9c683725d92ac63, например, нужно угадать только символы, не важно в каком регистре робот их подставит. А надо проверять на идентичность.
<?
if(isset($_POST['unique'], $_POST['country'], $_POST['operator'], $_POST['number'], $_POST['phone'], $_POST['message'], $_POST['hash'])) {
   
   if(!
in_array($_POST['number'], array("1234""5678"))) exit('Сообщение отправлено не на тот номер');
   
   if(
$_POST['hash'] == md5($_POST['unique'].$_POST['country'].$_POST['operator'].$_POST['number'].$_POST['phone'].$_POST['message'].'6dfgmEW98vmWEbdfe3')) {
       
header("Content-Type: text/plain; charset=utf-8");
       exit(
'Благодарим за участие! Ваш код: 1234');
   }
}

Кстати, ищется значение из "1234" или "5678", а сообщается почему-то о 12234.

  Ответить  
 
 автор: kyljapin   (06.09.2013 в 21:34)   письмо автору
 
   для: confirm   (06.09.2013 в 21:24)
 

Это вы не понимаете сути моего вопроса. В коде который вы смотрите мне ничего менять не надо там просто обработчик мне нужна только информация телефон абонента и сообщение. Я занимаюсь смс рассылкой спортивных соревнований и мне нужно оперативно узнавать номер абонента и его сообщение на что подписался. А во втором случае я работаю с газетой и проводим конкурсы и им необходимо знать номер телефона и сообщение (ответ на вопрос) абонента. Вот мне и нужно эти параметры отправить на емайл.

  Ответить  
 
 автор: confirm   (06.09.2013 в 21:38)   письмо автору
 
   для: kyljapin   (06.09.2013 в 21:34)
 

Причем тут газета, SMS или еще что-то, если я вам говорю, что с "секретом" у вас полная туфта, тем более, что хеш вы передаете формой. Это вы понимаете?

  Ответить  
 
 автор: kyljapin   (06.09.2013 в 21:45)   письмо автору
 
   для: confirm   (06.09.2013 в 21:38)
 

Если вы имеете ввиду секрет array("1234", "5678" так это короткие номера на которые отправляется смс. мне она не нужна я по ней не проверяю. или про какой секрет? мне нужно только чтобы из самого первого скрипта на почту отправлялось два параметра $_POST['phone'], $_POST['message'], и все.

  Ответить  
 
 автор: confirm   (06.09.2013 в 21:50)   письмо автору
 
   для: kyljapin   (06.09.2013 в 21:45)
 

Я имею ввиду хеш, который вы сравниваете не на идентичность, а лишь бы одни и те же символы в нем были. Перечитайте еще раз внимательно что я написал.

  Ответить  
 
 автор: kyljapin   (06.09.2013 в 21:58)   письмо автору
 
   для: confirm   (06.09.2013 в 21:50)
 

6dfgmEW98vmWEbdfe3 это секретный код который указываешь в личном кабинете агрегатора который влияет на
Дайджест запроса рассчитывается из параметров запроса, которые задаются в строго указанном порядке:
md5 = unique + country + operator + number + phone + message + secret_key

полученный результат посылается для проверки целостности в параметре hash
и вообще обработчик может быть и простой и тот который я написал при поступлении смс к обработчику передается
Обращение к динамическому обработчику осуществляется посредством отправки HTTP запроса методом POST

Смс биллинг передает обработчику следующие параметры:

переменная | описание |тип | пример значения

phone | Номер абонента |string | 756263466XX
message | Сообщение, отправленное абонентом |string | Текст сообщения
country | Код страны |integer | 1234
operator | Краткое название оператора |integer | 4567
number | Короткий номер на который было отправлено SMS |integer | 7890
unique | Уникальный ID SMS в нашей базе |integer | 1234
hash | дайджест запроса |string | d2c12fd82ddaa2da1e675c70228d33a1

Ответ должен быть Content-Type text/plain и кодировке utf-8.


а там ты как хочешь так и обрабатывай. Я просто в этом пока ноль поэтому взял за аналог ихний скрипт.

  Ответить  
 
 автор: confirm   (06.09.2013 в 22:00)   письмо автору
 
   для: kyljapin   (06.09.2013 в 21:58)
 

Ничего вы не понимаете. Впрочем делайте как хотите, не мне же это надо, так что доказывать вам, что у вас туфта, впустую тратить время.

  Ответить  
 
 автор: kyljapin   (06.09.2013 в 22:03)   письмо автору
 
   для: confirm   (06.09.2013 в 22:00)
 

понятно. А вы мне за вознаграждение сможете сделать?

  Ответить  
 
 автор: confirm   (06.09.2013 в 22:04)   письмо автору
 
   для: kyljapin   (06.09.2013 в 22:03)
 

Что именно?

  Ответить  
 
 автор: kyljapin   (06.09.2013 в 22:11)   письмо автору
 
   для: confirm   (06.09.2013 в 22:04)
 

рабочий скрипт чтобы отправлял правильно ответное смс
header("Content-Type: text/plain; charset=utf-8");
exit(здесь любой текст');

а также отправлял на емайл две переменные $_POST['phone'], $_POST['message'] ссылка на документацию http://docs.payy.ru/tech/sms-billing/example/

  Ответить  
 
 автор: confirm   (06.09.2013 в 22:19)   письмо автору
 
   для: kyljapin   (06.09.2013 в 22:11)
 

Как говорила одна известная певица - "Я на короткие расстояния не езжу".
Это значит, что если вознаграждение это электронные деньги, не важно какие, то нет, мне они не нужны. Пусть за них кто либо другой работает.
Если "работа", это только добавить нужное, и при этом знать, что остальное в коде мягко выражаясь "хлам", и на него нужно закрыть глаза, то тоже нет. Писать что-то, стараться, когда рядом не понять что, какой смыл.
Если же править чтобы было как положено, то это подразумевает большую работу, нежели вы предполагаете.
Впрочем что нужно сделать, я вам уже практически сказал - отправлять второе письмо на ваш адрес. В переменную $message добавить нужные вам поля. Вот и вся работа.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования