|
|
|
| Добрый день! Помогите разобраться есть код обработчика:
Дайджест запроса рассчитывается из параметров запроса, которые задаются в строго указанном порядке:
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. Подскажите как сделать. Заранее спасибо. | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 18:08)
| | strcasecmp($md5, $_POST['hash']) - это как понимать, 6dfgmEW98vmWEbdfe3 и 6dfgmew98vmwebdfe3 одно и тоже?
А для отправки почтой воспользуйтесь функцией mail. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2013 в 18:23)
| | это полностью рабочий скрипт обработчик sms агрегатора payy я не могу к нему прикрепить функцию mail у меня или приходит нормальный ответ или приходит на почту то что нужно не могу добиться то что мне надо. готов дать вознаграждение за помощь. Пишите мне. | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 19:55)
| | Не знаю какой смысл вы вкладываете в "рабочий", но функции strcasecmp побоку регистр. Возникает вопрос - зачем при этом указывать для сравнения 6dfgmEW98vmWEbdfe3?
И вообще, хватит простого сравнения.
Что касается почты, то в чем именно проблема? Из "функцию mail у меня или приходит нормальный ответ или приходит на почту то что нужно" следует, что проблем нет.
Вы свой код отправки почты покажите. | |
|
|
|
|
|
|
|
для: 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 это секретный код для проверки. я не могу соединить эти два кода. | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 20:15)
| | Код нужно обрамлять не тегом [b] а [cоde].
strcasecmp - прочтите о функции, и поймите, что ваше сравнение это несуразица.
mail - а это о функции mail. Этот код отправки, то что и надо и нужно добавить еще данные, или же отправляться должно иное?
Указанная в заголовке кодировка почтового отправления не определяет кодировку аргумента subject, ее необходимо кодировать. | |
|
|
|
|
|
|
|
для: 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);
?>
ответ абоненту правильный но не приходит сообщение мне. | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 21:28)
| | Я же вам сказал чем обрамлять код, ну неужели не видно, что читать его невозможно?
Ругается потому, что здесь echo join("\n",$RESPONSE); несоответствующий аргумент $RESPONSE.
А чтобы во второй отправке была почта и вам, нужно посылать еще одно письмо, на ваш адрес.
Еще раз повторяю - аргумент subject нужно кодировать, иначе нет гарантии, что пользователь прочтет его.
<?
$subject = '=?windows-1251?b?' . base64_encode('Получена sms') . '?=';
|
| |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2013 в 21:24)
| | Это вы не понимаете сути моего вопроса. В коде который вы смотрите мне ничего менять не надо там просто обработчик мне нужна только информация телефон абонента и сообщение. Я занимаюсь смс рассылкой спортивных соревнований и мне нужно оперативно узнавать номер абонента и его сообщение на что подписался. А во втором случае я работаю с газетой и проводим конкурсы и им необходимо знать номер телефона и сообщение (ответ на вопрос) абонента. Вот мне и нужно эти параметры отправить на емайл. | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 21:34)
| | Причем тут газета, SMS или еще что-то, если я вам говорю, что с "секретом" у вас полная туфта, тем более, что хеш вы передаете формой. Это вы понимаете? | |
|
|
|
|
|
|
|
для: confirm
(06.09.2013 в 21:38)
| | Если вы имеете ввиду секрет array("1234", "5678" так это короткие номера на которые отправляется смс. мне она не нужна я по ней не проверяю. или про какой секрет? мне нужно только чтобы из самого первого скрипта на почту отправлялось два параметра $_POST['phone'], $_POST['message'], и все. | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 21:45)
| | Я имею ввиду хеш, который вы сравниваете не на идентичность, а лишь бы одни и те же символы в нем были. Перечитайте еще раз внимательно что я написал. | |
|
|
|
|
|
|
|
для: 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.
а там ты как хочешь так и обрабатывай. Я просто в этом пока ноль поэтому взял за аналог ихний скрипт. | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 21:58)
| | Ничего вы не понимаете. Впрочем делайте как хотите, не мне же это надо, так что доказывать вам, что у вас туфта, впустую тратить время. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2013 в 22:00)
| | понятно. А вы мне за вознаграждение сможете сделать? | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 22:03)
| | Что именно? | |
|
|
|
|
|
|
|
для: 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/ | |
|
|
|
|
|
|
|
для: kyljapin
(06.09.2013 в 22:11)
| | Как говорила одна известная певица - "Я на короткие расстояния не езжу".
Это значит, что если вознаграждение это электронные деньги, не важно какие, то нет, мне они не нужны. Пусть за них кто либо другой работает.
Если "работа", это только добавить нужное, и при этом знать, что остальное в коде мягко выражаясь "хлам", и на него нужно закрыть глаза, то тоже нет. Писать что-то, стараться, когда рядом не понять что, какой смыл.
Если же править чтобы было как положено, то это подразумевает большую работу, нежели вы предполагаете.
Впрочем что нужно сделать, я вам уже практически сказал - отправлять второе письмо на ваш адрес. В переменную $message добавить нужные вам поля. Вот и вся работа. | |
|
|
|
|