Рассылка СМС-уведомлений силами UTM5
Рассылка СМС-уведомлений силами UTM5
Добрый день. Интересуют варианты реализации СМС рассылки (предупреждение о балансе, поздравление с праздниками, возможно и произвольные сообщения) силами UTM5. Кто реализовывал, подскажите "что почем" =) Спасибо.
Код: Выделить всё
<?
$smshost="gate.mobilmoney.ru";
$smspage="sms.php";
$smslogin="*******";
$smspassword="******";
$thresholdbalance="35";
$message1="На Вашем счету ";
$message2="р.не забудьте пополнить счет интернета дог№";
// База utm.
$dbhostname="localhost";
$dbusername="root";
$dbpassword="";
$dbname="UTM5";
function sms_log($str) {
$datenow=date("d:m:y G:i:s");
$file = fopen ("/netup/utm5/log/sms.log","a+");
fputs($file,"$datenow $str\n");
fclose($file);
};
$html.='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 //EN" "http://www.w3.org/TR/html4/strict.dtd">';
$html.='<html>';
$html.=' <head>';
$html.=' <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >';
$html.=' <title>SMS SENDER</title>';
$html.=' <link rel="stylesheet" type="text/css" href="style.css" title="style"/>';
$html.=' </head>';
$html.=' <body>';
function http_post($host,$page,$data)// $host="www.ya.ru" $page="/post/test.php
{
//открываем сокет к http://$host на 80-й порт с таймаутом в 30 секунд
$socket = fsockopen($host, 80, $errno, $errstr, 30);
//если fsockopen вернула false, то завершаем работу скрипта и выводим текст и номер ошибки
if(!$socket)die("$errstr($errno)");
//пишем в сокет метод, URI и протокол
fwrite($socket, "POST ".$page." HTTP/1.1\r\n");
//а также имя хоста
fwrite($socket, "Host: ".$host."\r\n");
//теперь отправляем заголовки
//Content-type должен быть applicaion/x-www-form-urlencoded
fwrite($socket,"Content-type: application/x-www-form-urlencoded\r\n");
//размер передаваемых данных передаем в заголовке Content-length
fwrite($socket,"Content-length:".strlen($data)."\r\n");
//типы принимаемых данных. */* означает, что принимаем все типы данных
fwrite($socket,"Accept:*/*\r\n");
//представимся оперой
fwrite($socket,"User-agent:Opera 10.00\r\n");
fwrite($socket,"Connection:Close\r\n");
fwrite($socket,"\r\n");
//теперь передаем данные
fwrite($socket,"$data\r\n");
fwrite($socket,"\r\n");
//теперь читаем и выводим ответ
$answer = '';
while(!feof($socket)){
$answer.= fgets($socket, 4096);
}
////echo $answer;
//закрываем сокет
fclose($socket);
}
/* Create connection */
mysql_connect($dbhostname,$dbusername,$dbpassword) OR DIE("Не могу создать соединение ");
mysql_select_db($dbname) or die(mysql_error());
$xml.="<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
$xml.="<request method=\"SendSMSFull\">\r\n";
$xml.="<login>".$smslogin."</login>\r\n";
$xml.="<pwd>".$smspassword."</pwd>\r\n";
mysql_query("UPDATE accounts SET sms_sended='0' WHERE accounts.balance>'".$thresholdbalance."';");
$smscnt=0;
$res=mysql_query("SELECT accounts.id, users.login, users.mobile_telephone, accounts.balance FROM users LEFT JOIN accounts ON accounts.id=users.basic_account WHERE users.web_page='1' AND accounts.balance<'".$thresholdbalance."' AND accounts.sms_sended!='1' AND users.is_deleted='0';");
while ($row=mysql_fetch_row($res))
{
if(!preg_match('/^\+7[0-9]{10}$/',$row[2]))
continue;
$balance=round($row[3],2);
$xml.=" <originator num_message=\"".$smscnt."\">Ultra</originator>\r\n";
$xml.=" <phone_to num_message=\"".$smscnt."\">".$row[2]."</phone_to>\r\n";
$xml.=" <message num_message=\"".$smscnt."\">".$message1."".$balance."".$message2."".$row[1]."</message>\r\n";
$xml.=" <sync num_message=\"".$smscnt."\">".date("ymd").$row[0]."</sync>\r\n";
mysql_query("UPDATE accounts SET sms_sended='1' WHERE id='".$row[0]."';");
$smscnt++;
sms_log("$row[1];$row[2];$balance");
}
$xml.="</request>\r\n";
http_post($smshost,$smspage,$xml);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$html.='<p>'.$xml.'</p>';
$html.=' </body>';
$html.='</html>';
mysql_close();
?>
Последний раз редактировалось ronin Пн апр 09, 2012 23:41, всего редактировалось 1 раз.
Проверяем у кого баланс больше $thresholdbalance, ставим ему sms_sended='0', т.е. еще не отправляли, затем у кого баланс меньше $thresholdbalance и web_page=1 и sms_sended не =1, им отправляем смс и ставим им sms_sended=1,
там строчка неправильная, $res=mysql_query("SELECT accounts.id, users.login, users.mobile_telephone, accounts.balance FROM users LEFT JOIN accounts ON accounts.id=users.basic_account WHERE users.web_page='1' AND accounts.balance<'".$thresholdbalance."' AND accounts.sms_sended!='1' AND users.is_deleted='0';");
там строчка неправильная, $res=mysql_query("SELECT accounts.id, users.login, users.mobile_telephone, accounts.balance FROM users LEFT JOIN accounts ON accounts.id=users.basic_account WHERE users.web_page='1' AND accounts.balance<'".$thresholdbalance."' AND accounts.sms_sended!='1' AND users.is_deleted='0';");
Тестирую скрипт, ругается на 95 строку, в кодинге не силён(
UPD: почитал доку смсгейта, понял что можно и опустить эту строку, закомментил.
Скрипт выдаёт:
Версия utm 008u8
Код: Выделить всё
</date>\r\n";
UPD: почитал доку смсгейта, понял что можно и опустить эту строку, закомментил.
Скрипт выдаёт:
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<response method="ErrorSMS">
<msg>Incorrect XML data!</msg>
</response> %
Версия utm 008u8