SMS сервисы для ленивых

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Существует множество смс сервисов и для удобства я написал библиотеку, которая позволяет упростить работу с ними по сравнению с решением от ZennoLab.

Какие сервисы на данный момент поддерживаются:
  • Sms-activate
  • SmsHub
  • Vak Sms
  • Sim Sms
  • 5 Sim
  • Sms Aktiwator
Давайте рассмотрим что умеет библиотека.

1. Получаем номер
Идентификатор для страны и для сервиса искать не нужно, они уже находятся внутри кода.
Можно получить множество параметров о полученном номере в зависимости от того, какие функции поддерживает смс сервис
C#:
//Получаем api ключ из настроек зеннопостера
string apiKey = SupportClass.GetSmsServiceApiKey("FiveSimSms");
//Создаем информацию о сервисе
FiveSimService fiveSimService = new FiveSimService(apiKey);
//Создаем задачу, которая будет хранить всю информацию о текущем статусе работы с определенным номером
FiveSimTask fiveSimTask = new FiveSimTask(fiveSimService);
//Получаем смс и возвращает true или false в зависимости от того получен смс или нет
//Также можно посмотреть ошибку
bool gotSms = fiveSimTask.GetNewPhone(WebService.Facebook, Country.Russia, out SmsServiceException exception);
//Если номер не получен, то генерируем полученную ошибку (можно тут любую логику прописать)
if (!gotSms)
    throw exception;
//Просматриваем информацию о полученном номере

//Получаем id
string id = fiveSimTask.Id; //141776002
//Номера телефона
string phone = fiveSimTask.Phone; //79309535975
//Телефон без кода страны
string phoneWithoutCountryCode = fiveSimTask.PhoneWithoutCountryCode; //9309535975
//Цена полученного номера (не всегда верная информация из-за ограничений смс сервисов)
float price = fiveSimTask.Price; //6
//Время создания
DateTimeOffset creationTime = fiveSimTask.CreationTime; //14.08.2021 11:09:36 +00:00
//Время окончания (поддерживается не всеми сервисами)
DateTimeOffset? expiredTime = fiveSimTask.ExpiredTime; //14.08.2021 11:24:36 +00:00
//Имя оператора (только если оператор был задан изначально или сервис поддерживает возврат имени)
string phoneOperator = fiveSimTask.PhoneOperator; //tele2
//Текущий статус смс, может быть WaitReady, Pending, CodeReceived, Finished, Canceled, Banned
SmsStatus? status = fiveSimTask.Status; //Pending
//Таймаут ожидания смс, по умолчанию 1 минута
TimeSpan ts = fiveSimTask.Timeout; //00:01:00
//Alpha2 страны, часто применяется в селекторах сайтов регистрации
string countryAlpha2 = fiveSimTask.PhoneCountry.Alpha2; //RU
//Имя страны
string countryName = fiveSimTask.PhoneCountry.EnglishName; //Russia
//Название валюты на английском
string currencyName = fiveSimTask.PhoneCountry.CountryCurrency.EnglishName; //Russian Ruble
//Название валюты по ISO
string currencyISO = fiveSimTask.PhoneCountry.CountryCurrency.ISOSymbol; //RUB
Вариант с получением номера с лимитом по цене. Вернется false, если по данной цене номера нету. Из-за ограничений сервисов по количеству запросов и отсутствии некоторого функционала поддерживается не везде. На sms hub меня уверяли в том, что у них нельзя брать начиная с самых дешевых с ограничением по цене только через API, но я нашел как это обойти и теперь на нем поддерживается данный функционал.
C#:
bool gotSms = fiveSimTask.GetNewPhone(WebService.Facebook, Country.Russia, out SmsServiceException exception, maxPrice: 8);
2. Устанавливаем статус ожидания смс (Pending)
Можно задать 2 варианта - очищать смс код, если он есть или оставить как есть. Этот функционал может быть полезен, если вы нажимаете на кнопку на сайте, а потом устанавливаете статус ожидания смс, а в этот момент смс уже могло прийти. Тогда у кода есть 2 варианта - либо очистить последнее смс и ждать новое, либо сохранить смс и при следующем запросе смс вы получите его.
false - не сбрасывать
true - сбрасывать и ждать новый код
C#:
fiveSimTask.SetStatusPending(disposeCodeIfExist: false);
3. Устанавливаем таймер, если нужно и получаем смс.
C#:
//Задаем таймаут ожидания смс
fiveSimTask.Timeout = TimeSpan.FromSeconds(90);
//Задаем интервал, через который будут идти запросы на проверку статуса смс кода
fiveSimTask.PollingInterval = TimeSpan.FromSeconds(10);
//Получаем смс код или null, если код не получен
string code = fiveSimTask.GetSmsCode();
4. Устанавливаем статус ожидания ещё 1 кода (если нужно).
Применяю эту функцию постоянно в своем коде.
C#:
fiveSimTask.RepeatActivation();
5. Завершаем активацию.
C#:
fiveSimTask.FinishActivation();
6. Блокируем номер, как плохой (альтернативный вариант, используется за место варианта 5)
C#:
fiveSimTask.BanPhone();
7. Отменяем активацию (альтернативный вариант, используется за место варианта 5)
Поддерживается только если номер не был получен до этого, иначе генерирует ошибку
C#:
fiveSimTask.CancelActivation();
8. Альтернативные варианты
Иногда неизвестно получится ли установить данный статус и для таких случаев припасены альтернативные методы с отображением ошибок. В таких случаях помогают альтернативные методы, которые возвращают true или false вместе с ошибкой, которую можно получить и самому проанализировать.
C#:
bool success = fiveSimTask.TryFinishActivation(out SmsServiceException ex);
C#:
bool success = fiveSimTask.TryBanPhone(out SmsServiceException ex);
C#:
bool success = fiveSimTask.TryCancelActivation(out SmsServiceException ex);
9. Получаем список всех цен для данного сервиса, отсортированные, начиная с самой низкой.
Зачастую хочется получать смс от самых дешевых номеров, а сервисы могут в режиме реального времени менять цены. По этой причине я создал несколько функций, которые позволяют получать список с ценами и определять самые низкие.

Функционал, когда можно будет сравнивать цены между разными сервисами и выбирать самую дешевую в работе и займет много времени. Не гарантирую его появление.
Давайте рассмотрим то, что есть.

Получение всех цен:
C#:
PriceInfo[] prices = fiveSimService.GetPrices(WebService.Facebook)
                .Where(x => x.Count > 0)
                .ToArray();

string priceStringExample = string.Join(Environment.NewLine, prices.Take(5).Select(x => $"Страна: {x.CountryInfo.EnglishName}, количество: {x.Count}, цена: {x.Price}"));
//Страна: Indonesia, количество: 1, цена: 2
//Страна: United States, количество: 53417, цена: 3
//Страна: Canada, количество: 5670, цена: 3
//Страна: Cambodia, количество: 1000, цена: 3
//Страна: Bolivia, количество: 29, цена: 3
Получаем самую низкую цену с количеством номеров больше 10:
C#:
PriceInfo pi = fiveSimService.GetLowPrice(WebService.Facebook, minPhonesCount: 10);
string lowPriceStringExample = $"Страна: {pi.CountryInfo.EnglishName}, количество: {pi.Count}, цена: {pi.Price}";
//Страна: United States, количество: 53417, цена: 3
Получаем список цен с операторами, начиная с самой низкой для России, Украины и Беларуси:

C#:
PriceInfo[] prices = fiveSimService.GetPrices(WebService.Facebook, new Country[] { Country.Russia, Country.Ukraine, Country.Belarus })
                .Where(x => x.Count > 0)
                .ToArray();

string priceStringExample = string.Join(Environment.NewLine, prices.Take(5).Select(x => $"Страна: {x.CountryInfo.EnglishName}, количество: {x.Count}, цена: {x.Price}, операторы: {string.Join(", ", x.PhoneOperators)}"));
//Страна: Russia, количество: 149, цена: 6,5, операторы: beeline, lycamobile, matrix, megafon, mts, rostelecom, tele2, virtual15, virtual27, yota
//Страна: Ukraine, количество: 1000, цена: 12, операторы: virtual23
//Страна: Ukraine, количество: 1000, цена: 12,3, операторы: virtual18
//Страна: Belarus, количество: 1000, цена: 12,3, операторы: virtual18
//Страна: Belarus, количество: 1000, цена: 20, операторы: virtual21, virtual23
Функционал библиотеки шире, чем я расписал. Примеры кода я привёл, архив с библиотеками прикладываю, пользуйтесь.
Шаблон с примерами сделаю позже.

Не откажусь от донатов, если кому-то понравится моя работа.
Могу подключить библиотеки вам самим, цены начинаются от 2500 руб в зависимости от сложности. Сами понимаете, время - деньги, а на библиотеку потрачены сотни часов времени. Верну деньги, если функционал не понравится или будет серьезный баг.

Все, кто понимают C#, могут подключить библиотеку самостоятельно и пользоваться, нету никаких триал периодов и ключей подключения.
P.S.: в будущем дополню тему и распишу больше о функционале, который поддерживается
 

Вложения

Последнее редактирование:

dmitriy1384

Client
Регистрация
04.11.2013
Сообщения
377
Благодарностей
133
Баллы
43
Я так понимаю, что это очень огромные труды и большая польза, жаль я в этом не шарю. Придется использовать стандартные кубики или get-запросы.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Я так понимаю, что это очень огромные труды и большая польза, жаль я в этом не шарю. Придется использовать стандартные кубики или get-запросы.
Да я ещё в 2018 или 2019 начинал его делать. Потом занимался другими делами. Вот в этом году перелопатил всё.
Причина простая - есть сервисы-монополисты, которые цену постоянно повышают и я решил бороться, ведь другие сервисы тоже достойны внимания, так как у них цены ниже. Конкуренция в ценах поможет оздоровить несправедливые условия и сверхзаработок.
А мы, как потребители, от этого выиграем
 
  • Спасибо
Реакции: AndrewSuul и lbvf65

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Благодарностей
318
Баллы
63
Колоссальный труд , делал подобное на кубиках...но перегорел с желаниями уже на 3м сервисе))
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 786
Благодарностей
1 951
Баллы
113
Молодец :ay: . я в своих проектах, почти так и делаю.Будет интересно сравнить идеи по реализации
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Прикрепил библиотеки новые (пару исправлений) и кубик с C# кодом.
Для использования нужно иметь некоторые познания C# и вырезать нужные куски кода из приведенного примера шаблона для смс сервиса. Сам не могу, времени на всё не хватает
 
  • Спасибо
Реакции: vintoss, lbvf65 и Sok0lov

lbvf65

Client
Регистрация
20.08.2020
Сообщения
439
Благодарностей
114
Баллы
43
Прикрепил библиотеки новые (пару исправлений) и кубик с C# кодом.
Для использования нужно иметь некоторые познания C# и вырезать нужные куски кода из приведенного примера шаблона для смс сервиса. Сам не могу, времени на всё не хватает
:bt::ay:
 

killareben

Client
Регистрация
09.06.2022
Сообщения
28
Благодарностей
0
Баллы
1
Добрый день, кто пользуется данной библиотекой? Есть возможность помочь мне в ней разобраться? Конкретно с ее установкой в зенопостер, так как все нужное скачал, поставил куда нужно но много ошибок сразу на моменте
//Создаем информацию о сервисе
 

Figma1322

Пользователь
Регистрация
17.02.2023
Сообщения
54
Благодарностей
10
Баллы
8
Приветствую! У вас нет контактов в теме. Могли бы пожалуйста связаться в телеграм https://t.me/danvenso
 

Grizzly Andy

Пользователь
Регистрация
30.11.2022
Сообщения
53
Благодарностей
0
Баллы
6
Доброго времени суток. Свяжитесь со мной t.me/andrey_grizzly_1
Спасибо
 

Grizzly Andy

Пользователь
Регистрация
30.11.2022
Сообщения
53
Благодарностей
0
Баллы
6

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)