Для отправки SMS-сообщений со своего сайта можно воспользоваться сервисом SMS Aero.
Для начала работы с сервисом потребуется регистрация на сайте, далее в разделе «Подписи» нужно добавить подпись и дождаться её модерации и пополнить баланс.
Для доступа к методам API, в качестве логина используется e-mail указанный при регистрации. Ключ можно получить в разделе «Настройки» - «API и SMPP».
Далее можно обращаться к методам сервиса, например через PHP Curl:
Документация: https://smsaero.ru/description/api/#send-sms
$login = 'Логин(email)';
$key = 'Ключ';
$sign = 'Подпись';
$phone = '+7 (903) 123-45-67';
$text = 'Текст SMS';
$phone = preg_replace('/[^0-9]/', '', $phone);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $login . ':' . $key);
curl_setopt($ch, CURLOPT_URL, 'https://gate.smsaero.ru/v2/sms/send?number=' . $phone . '&text=' . urlencode($text) . '&sign=' . $sign);
$res = curl_exec($ch);
curl_close($ch);
$array = json_decode($res, true);
print_r($array);
В случаи успешной отправки, ответ будет следующим:
array(
[success] => true
[data] => array(
[id] => 686483623
[from] => Подпись
[number] => 79031234567
[text] => Текст SMS
[status] => 8
[extendStatus] => moderation
[channel] => FREE SIGN
[cost] => 2.69
[dateCreate] => 1604507019
[dateSend] => 1604507019
)
[message] => null
)
Или в случаи ошибки, например «недостаточно средств»:
array(
[success] => false
[data] => null
[message] => Not enough money.
)
Документация: https://smsaero.ru/description/api/#get-balance
$login = 'Логин(email)';
$key = 'Ключ';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $login . ':' . $key);
curl_setopt($ch, CURLOPT_ENCODING, 'application/json');
curl_setopt($ch, CURLOPT_URL, 'https://gate.smsaero.ru/v2/balance');
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);
if ($res['success']) {
echo $res['data']['balance'];
} else {
echo 'Ошибка: ' . $res['message'];
}
Результат:
109,24
Для удобства можно использовать небольшой класс для отправки SMS.
<?php
class Sms
{
private static $login = 'Логин(email)';
private static $key = 'Ключ';
private static $from = 'Подпись';
public static function getBalance()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, self::$login . ':' . self::$key);
curl_setopt($ch, CURLOPT_ENCODING, 'application/json');
curl_setopt($ch, CURLOPT_URL, 'https://gate.smsaero.ru/v2/balance');
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);
if ($res['success']) {
echo $res['data']['balance'];
} else {
echo 'Ошибка: ' . $res['message'];
}
}
public static function send($number, $text)
{
if (!empty($number)) {
$numbers = explode(',', $number);
foreach ($numbers as $row) {
$row = preg_replace('/[^0-9]/', '', $row);
if (!empty($row)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, self::$login . ':' . self::$key);
curl_setopt($ch, CURLOPT_URL, 'https://gate.smsaero.ru/v2/sms/send?number=' . $row . '&text=' . urlencode($text) . '&sign=' . self::$from);
$res = curl_exec($ch);
curl_close($ch);
// Лог для отладки
$log = date('Y-m-d H:i:s') . "\r\n";
$log .= $res;
file_put_contents(__DIR__ . '/log_sms.txt', $log . "\r\n\r\n", FILE_APPEND);
}
}
}
}
}