billing:preferences:smspilot

SMS Pilot

Отправка SMS от службы SMS Pilot Удобно для России и других стран СНГ

Данный скрипт предназначен для отправки SMS сообщения абоненту после пополнения счета.

Создать директорию /var/mikbill/custom_scripts/sms/smspilot, в нем создать файл sms.php с содержимым:

<?php
/**
 * @name sms.php
 * @version 3.03.03
 * @description Скрипт для отправки сообщений о пополнении баланса
 */
 
// Данные для отправки сообщения
$SMSPILOT_APIKEY = "APIKEY";
// Имя отправителя (в sms)
$SENDER_NAME = "ISP company";
// Текст sms
$TEXT = "Счет пополнен успешно. Ваш баланс: %deposit% руб.";
// куда будем отправлять запрос
$API_URL = "http://smspilot.ru/api.php";
 
if ( $_SERVER["argc"] < 2 ) {
	die();
}
 
if ( $_SERVER["argc"] > 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

  • billing/preferences/smspilot.txt
  • Последнее изменение: 4 лет назад
  • alexd