112 lines
3.5 KiB
Markdown
112 lines
3.5 KiB
Markdown
# SMSc - Отправка SMS через smsc.ru
|
||
|
||
Пакет `smsc` предоставляет простой способ отправки SMS через сервис [smsc.ru](https://smsc.ru) на языке Go.
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
go get git.gm6.ru/icewind/smsc
|
||
```
|
||
|
||
## Использование
|
||
|
||
```go
|
||
package main
|
||
|
||
import (
|
||
"git.gm6.ru/icewind/smsc"
|
||
)
|
||
|
||
func main() {
|
||
// Создание запроса на отправку SMS
|
||
req := smsc.RequestSMS{
|
||
ApiKey: "ваш_api_ключ", // Замените на ваш реальный API-ключ
|
||
Phone: "+79991234567", // Номер получателя
|
||
Message: "Привет от Go!", // Текст сообщения
|
||
}
|
||
|
||
// Отправка SMS
|
||
resp := smsc.SendSMS(req)
|
||
|
||
// Проверка результата
|
||
if resp.Error != "" {
|
||
// Обработка ошибки
|
||
panic(resp.Error)
|
||
}
|
||
|
||
// Успешная отправка
|
||
fmt.Printf("SMS отправлена. ID: %d, Количество сообщений: %d\n", resp.ID, resp.Cnt)
|
||
}
|
||
```
|
||
|
||
## Функции
|
||
|
||
### `SendSMS(req RequestSMS) ResponseSMS`
|
||
Отправляет SMS через сервис smsc.ru.
|
||
|
||
**Параметры:**
|
||
- `req` — структура `RequestSMS` с данными для отправки.
|
||
|
||
**Возвращает:**
|
||
- `ResponseSMS` — ответ от сервера, включая `ID` и `Cnt`, или ошибку.
|
||
|
||
## Структуры
|
||
|
||
### `RequestSMS`
|
||
|
||
| Поле | Тип | Описание | JSON-тег |
|
||
|-----------|--------|------------------------------|--------------|
|
||
| `ApiKey` | string | API-ключ от smsc.ru | `apikey` |
|
||
| `Phone` | string | Номер телефона получателя | `phones` |
|
||
| `Message` | string | Текст сообщения | `mes` |
|
||
|
||
### `ResponseSMS`
|
||
|
||
| Поле | Тип | Описание | JSON-тег |
|
||
|-----------|-----|---------------------------------|----------|
|
||
| `ID` | int | Уникальный идентификатор SMS | `id` |
|
||
| `Cnt` | int | Количество отправленных SMS | `cnt` |
|
||
| `Error` | string | Описание ошибки (если есть) | `error` |
|
||
| `ErrorCode`| int | Код ошибки | `error_code` |
|
||
|
||
## Обработка ошибок
|
||
|
||
Если произошла ошибка при отправке, поле `Error` в `ResponseSMS` будет содержать описание ошибки.
|
||
|
||
```go
|
||
resp := smsc.SendSMS(req)
|
||
if resp.Error != "" {
|
||
log.Printf("Ошибка: %s (код: %d)\n", resp.Error, resp.ErrorCode)
|
||
}
|
||
```
|
||
|
||
## Тестирование
|
||
|
||
Для тестирования функции `SendSMS` можно использовать реальные вызовы (интеграционные тесты). Пример теста:
|
||
|
||
```go
|
||
func TestSendSMS(t *testing.T) {
|
||
req := RequestSMS{
|
||
ApiKey: "ваш_api_ключ",
|
||
Phone: "+79991234567",
|
||
Message: "Тестовое сообщение",
|
||
}
|
||
|
||
resp := SendSMS(req)
|
||
|
||
if resp.Error != "" {
|
||
t.Errorf("Ошибка при отправке SMS: %s", resp.Error)
|
||
}
|
||
|
||
if resp.ID == 0 {
|
||
t.Error("Ожидался ненулевой ID")
|
||
}
|
||
}
|
||
```
|
||
|
||
> **Внимание:** Не забудьте заменить `ваш_api_ключ` на реальный ключ и убедитесь, что номер телефона корректен.
|
||
|
||
## Лицензия
|
||
|
||
MIT
|