rutrue / laravel-sms-mts
Пакет для отправки смс через шлюз МТС (Laravel)
dev-main
2025-05-19 23:43 UTC
Requires
- php: ^8.3
- illuminate/support: ^12.0
This package is auto-updated.
Last update: 2025-05-19 23:43:35 UTC
README
Пакет для интеграции с SMS MTS API в Laravel-приложениях. Поддерживает отправку SMS через Notification канал.
Установка
Установите пакет через Composer:
composer require rutrue/laravel-sms-mts
Опубликуйте конфигурационный файл:
php artisan vendor:publish --tag=sms-mts-config
Настройте .env
:
# Обязательные для всех методов SMS_MTS_AUTH_METHOD=token # или 'basic' для авторизации с логином и паролем SMS_MTS_SENDER_NAME=MTSM_Test # Имя отправителя # Для token-аутентификации SMS_MTS_TOKEN=your_api_token SMS_MTS_API_URL_TOKEN=https://api.mts.ru/client-omni-adapter_production/1.0.2/mcom/messageManagement/messages # Для basic-аутентификации SMS_MTS_LOGIN=your_login SMS_MTS_PASSWORD=your_password SMS_MTS_API_URL_BASIC=https://omnichannel.mts.ru/http-api/v1/messages # Настройки времени ожидания SMS_MTS_TIMEOUT=10 SMS_MTS_CONNECT_TIMEOUT=5
Использование
1. Через Facade
use RuTrue\SmsMts\Facades\SmsMts; // Отправка одного SMS SmsMts::send('79123456789', 'Ваше сообщение'); // Массовая отправка SmsMts::bulkSend([ ['phone' => '79123456789', 'message' => 'Сообщение 1'], ['phone' => '79234567890', 'message' => 'Сообщение 2'], ]);
2. Через Dependency Injection
use RuTrue\SmsMts\Contracts\SmsMtsDriverInterface; app(SmsMtsDriverInterface::class)->send('79123456789', 'Test message');
public function sendSmsDependency(SmsMtsDriverInterface $smsDriver) { return $smsDriver->send('79123456789', 'Test message'); }
3. Через Laravel Notifications
Создайте notification и настройте его содержимое:
php artisan make:notification OrderShipped
use Rutrue\SmsMts\Notifications\SmsMtsMessage; use Rutrue\SmsMts\Notifications\SmsMtsChannel; class OrderShipped extends Notification { public function via($notifiable) { return [SmsMtsChannel::class]; } public function toSmsMts($notifiable) { return new SmsMtsMessage( "Ваш заказ #{$notifiable->order_id} отправлен" ); } }
Настройте отправку:
$user->notify(new OrderShipped());
Обработка ошибок
Пакет выбрасывает исключения типа SmsMtsConfigurationException
и SmsMtsException
:
try { SmsMts::send('79123456789', 'Test'); } catch (\RuTrue\SmsMts\Exceptions\SmsMtsConfigurationException $e) { // Ошибки конфигурации logger()->error('MTS SMS Config Error: ' . $e->getMessage()); } catch (\RuTrue\SmsMts\Exceptions\SmsMtsException $e) { // Ошибки API logger()->error("MTS SMS Error [{$e->getCode()}]: " . $e->getMessage()); }
Тестирование
Mock-режим для тестов:
use RuTrue\SmsMts\Facades\SmsMts; SmsMts::shouldReceive('send') ->once() ->with('79123456789', 'Test message') ->andReturn(['status' => 'success']);
Примеры проведенных применений вместе
web.php
Route::get('/test-sms', [TestSmsController::class, 'sendSms']); Route::get('/test-sms-bulk', [TestSmsController::class, 'sendSmsBulk']); Route::get('/test-sms-dependency', [TestSmsController::class, 'sendSmsDependency']); Route::get('/test-sms-notification', [TestSmsController::class, 'sendSmsNotification']);
TestSmsController.php
<?php namespace App\Http\Controllers; use App\Models\User; use App\Notifications\OrderShipped; use Illuminate\Support\Facades\Log; use RuTrue\SmsMts\Facades\SmsMts; use RuTrue\SmsMts\Contracts\SmsMtsDriverInterface; use RuTrue\SmsMts\Notifications\SmsMtsChannel; class TestSmsController extends Controller { public function sendSms() { // Отправка одного SMS return SmsMts::send('79388780099', 'Одиночное сообщение'); } public function sendSmsBulk() { // Массовая отправка return SmsMts::bulkSend([ ['phone' => '79388780099', 'message' => 'Сообщение 1'], ['phone' => '79996502245', 'message' => 'Сообщение 2'], ]); } public function sendSmsDependency(SmsMtsDriverInterface $smsDriver) { // Отправка через внедрение return $smsDriver->send('79388780099', 'Привет! Это тестовое сообщение.'); } public function sendSmsNotification() { // отправляем как уведомление // Создаем или находим пользователя $user = User::firstOrCreate( ['email' => 'test@example.com'], [ 'name' => 'Test User', 'phone' => '79996502245', 'password' => bcrypt('password') ] ); try { // Вариант 1: Получаем результат через канал напрямую $notification = new OrderShipped('12345'); $channel = app(SmsMtsChannel::class); $apiResponse = $channel->send($user, $notification); // Логируем для проверки Log::info('SMS отправлено', [ 'phone' => $user->phone, 'api_response' => $apiResponse ]); return response()->json([ 'status' => 'success', 'message' => "SMS отправлено на номер: {$user->phone}", 'api_response' => $apiResponse ]); } catch (\Exception $e) { Log::error('Ошибка отправки SMS', [ 'phone' => $user->phone, 'error' => $e->getMessage() ]); return response()->json([ 'status' => 'error', 'message' => "Ошибка: " . $e->getMessage() ], 500); } } }
Troubleshooting
Ошибка аутентификации
- Проверьте
SMS_MTS_API_KEY
в.env
- Убедитесь, что ключ активен в личном кабинете MTS
SMS не доходят
- Проверьте баланс в кабинете MTS
- Убедитесь, что
sender_name
зарегистрирован в MTS - Убедитесь, что номер принадлежит провайдеру МТС (На другие номера SMS не дойдут, даже если API дал ответ OK и в ЛК отобразиться "Не отправлено")
Лицензия
Отсутствует