====== 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