Advertisement
apog

send_sms_atirra.php

Dec 23rd, 2014
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.48 KB | None | 0 0
  1. #!/usr/bin/php
  2.  
  3. <?PHP
  4.  
  5. # Скрипт отправки SMS уведомлений о задолженности абонентам КТВ
  6. # Используется демон smsd (SMSTools)
  7. # Рассылку производить утром в начале рабочего дня
  8. # Если сегодня выходной или праздник, то рассылка не производится
  9. # Так же рассылка не производится, если на счете недостаточно средств для рассылки всем абонентам
  10.  
  11. require_once (dirname(__FILE__).'/config.php');
  12. require_once (dirname(__FILE__).'/lib/class_db.php');
  13. require_once (dirname(__FILE__).'/lib/str_func.php');
  14.  
  15. $fb_session = new fbsql_db(FB_HOST, FB_DB, FB_USER, FB_PASS, 'UTF8');
  16.  
  17. $day_of_month = date('j'); // текущее число месяца
  18. $day_of_week = date('w'); // текущий день недели: 0 - воскресенье, 6 - суббота
  19. $full_date = date('Y-m-d'); // текущая дата
  20. $log_file = "send_sms_atirra.log";
  21.  
  22. // Если сегодня суббота или воскресенье, то не производим рассылку
  23. if ($day_of_week > 0 and $day_of_week < 6) {
  24.     // Если сегодняшний день имеется в файле holiday.txt, то тоже не рассылаем SMS
  25.     $holiday = file('holiday.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // получаем содержимое файла в массив
  26.     if (!in_array($full_date, $holiday)) {
  27.     // Определяем максимальную сумму долга исходя из текущего дня месяца
  28.     if ($day_of_month < 10) {
  29.         $max_debt_sum = 340; // максимальная сумма долга с 1 по 10 число включительно
  30.     }
  31.     else {
  32.         $max_debt_sum = 200; // максимальная сумма долга для дней с 10-го и до конца месяца
  33.     }
  34.     // Сделаем запрос в БД
  35.     $sql = "select b.cc_value, a.debt_sum, a.account_no, a.cust_code, a.surname, a.initials
  36.             from customer_contacts b inner join customer a on (a.customer_id = b.customer_id)
  37.         where a.cust_state = 1 and
  38.             (b.cc_notice not like '!%' or b.cc_notice is null) and
  39.             (a.prepay = 0 or a.prepay is null) and
  40.             b.cc_type = 1 and
  41.             a.debt_sum > '$max_debt_sum'";
  42.     $fbres = $fb_session->select_assoc_all($sql);
  43.     // Количество SMS для рассылки
  44.     $count = count($fbres);
  45.     // Расчетная стоимость текущей рассылки (двойной тариф, т. к. сообщения более 70 знаков)
  46.     $cost_of_delivery = round($count*PRICE_OF_SMS*2,2);
  47.     // Текущий баланс на SIM'ке
  48.     $current_balance = round(file_get_contents('/opt/smsd_scripts/balance.txt'),2);
  49.     // Текущий баланс на SIM'ке за вычетом резерва, чтобы всегда оставались деньги на более важные SMS
  50.     $current_balance_without_reserve = round($current_balance-BALANCE_RESERVE,2);
  51.     // Формируем строку лога
  52.     $log_str = date("Y-m-d H:i:s").
  53.             " - Баланс перед рассылкой: ".$current_balance.
  54.             ", Количество SMS для рассылки: ".$count.
  55.             ", Расчетная стоимость текущей рассылки: ".$cost_of_delivery."\n";
  56.     file_put_contents($log_file, $log_str, FILE_APPEND | LOCK_EX);
  57.     // Проверим достаточно ли средств на балансе, чтобы произвести рассылку
  58.     if ($cost_of_delivery <= $current_balance_without_reserve) {
  59.         // Обходим массив
  60.         foreach($fbres as $row) {
  61.         $phone = $row['CC_VALUE'];
  62.         $debt_sum = round($row['DEBT_SUM'],0);
  63.         $ls = $row['ACCOUNT_NO'];
  64.         $message = iconv("UTF-8", "UCS-2BE",
  65.                 "ПРОВАЙДЕР уведомляет: Ваша задолженность за услуги кабельного ТВ:"
  66.                 .$debt_sum."р. Номер л/сч:".$ls.". Пожалуйста, погасите долг. Тел:+71234567890");
  67.         // Если формат номера телефона верный, то работаем с ним
  68.         if (strlen($phone) == 10 and substr($phone,0,1) == 9) {
  69.             $arr = array(
  70.                 "To: 7".$phone."\n",
  71.                 "Alphabet: UCS2\n",
  72.                 "UDH: false\n\n",
  73.                 $message);
  74.             // Путь и имя формируемого файла
  75.             $file = tempnam("/tmp", "sms_7".$phone."_");
  76.             // Записываем массив в sms-файл
  77.             file_put_contents($file, $arr, LOCK_EX);
  78.             // Меняем владельца файла
  79.             chown($file, "smsd");
  80.             // Перемещаем готовый файл в spool для отправки абоненту
  81.             rename($file, "/var/spool/sms/outgoing/".basename($file));
  82.             // Формируем строку лога
  83.             $log_str = date("Y-m-d H:i:s").
  84.                 " - Л/С: ".$row['ACCOUNT_NO'].
  85.                 ", Абонент: ".$row['SURNAME']." ".$row['INITIALS'].", ".$row['CUST_CODE'].
  86.                 ", Долг: ".round($row['DEBT_SUM'], 0).
  87.                 " руб., Тел: ".$phone."\n";
  88.             file_put_contents($log_file, $log_str, FILE_APPEND | LOCK_EX);
  89.         } // проверка формата номера телефона
  90.         else {
  91.             $log_str = date("Y-m-d H:i:s").
  92.                 " - Неверный формат номера телефона. Л/С: ".$row['ACCOUNT_NO'].
  93.                 ", Абонент: ".$row['SURNAME']." ".$row['INITIALS'].", ".$row['CUST_CODE'].
  94.                 ", Долг: ".round($row['DEBT_SUM'], 0).
  95.                 " руб., Тел: ".$phone."\n";
  96.             file_put_contents($log_file, $log_str, FILE_APPEND | LOCK_EX);
  97.             // Отправляем себе письмо с сообщением о неверном формате номера
  98.             $body = "В Атирре неверно внесен номер телефона.".PHP_EOL
  99.                 ."Дата: ".$full_date.PHP_EOL
  100.                 ."Лицевой счет абонента: ".$row['ACCOUNT_NO'].PHP_EOL
  101.                 ."Номер телефона: ".$phone;
  102.             mailinform($body);
  103.         }
  104.         } // конец обхода массива
  105.     } // проверка баланса
  106.     else {
  107.         $log_str = date("Y-m-d H:i:s").
  108.             " - Недостаточно средств на балансе. Рассылка не произведена\n";
  109.         file_put_contents($log_file, $log_str, FILE_APPEND | LOCK_EX);
  110.         // Отправляем себе письмо с сообщением, что необходимо пополнить баланс на SIM'ке
  111.         $body = "Средств на номере +70987654321 недостаточно для рассылки SMS.".PHP_EOL
  112.         ."Дата: ".$full_date.PHP_EOL
  113.         ."Текущий баланс: ".$current_balance." руб.".PHP_EOL
  114.         ."Резерв баланса: ".BALANCE_RESERVE." руб.".PHP_EOL
  115.         ."Количество SMS для доставки: ".$count.PHP_EOL
  116.         ."Стоимость доставки 1-й SMS: ".round(PRICE_OF_SMS*2, 2)." руб.".PHP_EOL
  117.         ."Расчетная стоимость текущей рассылки: ".$cost_of_delivery." руб.".PHP_EOL.PHP_EOL
  118.         ."Рассылка не произведена.";
  119.         mailinform($body);
  120.     }
  121.     } // проверка праздничных дней
  122.     // else { echo "Сегодня праздник".PHP_EOL; }
  123. } // проверка дня недели
  124. // else { echo "Сегодня не рабочий день".PHP_EOL; }
  125. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement