====== SMS Pilot ====== Отправка SMS от службы [[http://www.smspilot.ru/|SMS Pilot]] Удобно для России и других стран СНГ\\ ===== Описание ===== Данный скрипт предназначен для отправки SMS сообщения абоненту после пополнения счета.\\ ===== Создание файла и директории ===== Создать директорию /var/mikbill/custom_scripts/sms/smspilot, в нем создать файл **sms.php** с содержимым: 1 ) { $uid = $_SERVER["argv"][1]; } if ( $uid==0 ) { die(); } // скрипту разрешено работать только из консоли! $is_console = PHP_SAPI == 'cli' || (!isset($_SERVER['DOCUMENT_ROOT']) && !isset($_SERVER['REQUEST_URI'])); if( $is_console ) { // полный путь к конфигурационному файлу $config_file='/var/www/mikbill/admin/app/etc/config.xml'; if (file_exists($config_file)) { // подтянем настройки $xml = simplexml_load_file($config_file); $TIME_ZONE = (string) $xml->parameters->timezone; $CONF_MYSQL_HOST = (string) $xml->parameters->mysql->host; $CONF_MYSQL_USERNAME = (string) $xml->parameters->mysql->username; $CONF_MYSQL_PASSWORD = (string) $xml->parameters->mysql->password; $CONF_MYSQL_DBNAME = (string) $xml->parameters->mysql->dbname; } else { die("config not found"); } // временная зона if(isset($TIME_ZONE)) { date_default_timezone_set($TIME_ZONE); } else { date_default_timezone_set('Europe/Kiev'); } // пробуем подключиться к базе try { $db = new PDO( "mysql:host={$CONF_MYSQL_HOST};dbname={$CONF_MYSQL_DBNAME}", $CONF_MYSQL_USERNAME, $CONF_MYSQL_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES koi8r") ); } catch (PDOException $e) { print "Error!: " . $e->getMessage(); die(); } // запрос на получение данных об абоненте $sth = $db->prepare('SELECT uid, deposit, sms_tel as phone FROM users WHERE `uid`=:uid'); $sth->bindParam(':uid', $uid, PDO::PARAM_INT); $sth->execute(); $user = $sth->fetch(PDO::FETCH_ASSOC); // если абонент нашелся if( !empty($user) ) { // оркуглим баланс до двух знаков $deposit = floor($user['deposit'] * 100) / 100; // заменим значением баланса переменную в тексте сообщения $TEXT = str_replace("%deposit%", $deposit, $TEXT); // уберем лишнее из номера $pattern = "|[^\d\(\)-+]|"; $replacement = ""; $phone=preg_replace($pattern, $replacement, $user['phone']); // проверяем номер, дополняем если не хватает if ( strlen($phone) == 10 ){ $recipient = "7{$phone}"; } if ( (strlen($phone) < 9) or (strlen($phone) > 12) ){ die("phone number error: {$phone}"); } if ( strlen($phone) == 11 ){ $recipient = "{$phone}"; } // отправляем запрос $response = send_sms($API_URL, $SMSPILOT_APIKEY, $recipient, $TEXT, $SENDER_NAME); var_dump($response); } else { die("user not found: {$uid}"); } } function send_sms( $api, $key, $to, $text, $from = '' ) { $apiurl = $api .'?send='.urlencode($text) .'&to='.$to .'&from='.$from .'&apikey='.$key; $result = file_get_contents( $apiurl ); if ($result) { if (substr($result,0,6) == 'ERROR=') { return substr($result, 6); } elseif (substr($result,0,8) == 'SUCCESS=') { $success = substr($result,8,($p = strpos($result,"\n"))-8); return $success; } else { return 'UNKNOWN RESPONSE'; } } else { return 'CONNECTION ERROR'; } } В данном файле заменить данные значения и текст смс на свои.\\ // Данные для отправки сообщения $SMSPILOT_APIKEY = "APIKEY"; // Имя отправителя (в sms) $SENDER_NAME = "ISP company"; // Текст sms $TEXT = "Счет пополнен успешно. Ваш баланс: %deposit% руб."; ===== Подключение к ивенту платежей ===== В скрипте **mikbill_payment_event.sh** ( находится в /var/www/mikbill/admin/sys/scripts )\\ в конец файла необходимо добавить: cd /var/mikbill/custom_scripts/sms/smspilot php ./sms.php $2 >> /var/mikbill/sms/send.log Таким образом, после каждого платежа, биллинг будет вызывать данный скрипт а он в свою очередь запустит скрипт отправки sms передав на него uid абонента ($2).\\ Лог работы скрипта sms будет сохранятся в /var/mikbill/sms/send.log