Этот сервер позволит Вам позволит решить следующие задачи:
- Реализовать как дополнительный способ авторизации путем использования телеграмма
- Подтверждение личности и принадлежности номеру конкретному человека
- Все выше перечисленно бесплатно, при наличии хоста, который способен запускать NET приложения
Вы можете модифицировать сервер по своему усмотрению, так же интегрировать в своей проект
Существующие решения платны и имеют недостатки по типу "вместо себя отправить контакт любого" и это все прожуётся.
| Пример получения кодов | Пример подтверждения номера в телеграмме |
|---|---|
- Ну, во первых перейдите в BotFather создайте своего ущербного бота и получить токен
- В файле appsettings.json вставьте токена от телеграм-бота полученного через BotFather в строчку TelegramBotAccessToken
- ВАЖНО! В этом же файле настройте пароль администратора для доступа к веб-панели в строке AdminPasswordSecurity. Отнеситесь к этому серьезно, сделайте пароль длинным, обгатите его спец. символами и т.д.
{
"TelegramBotAccessToken": "34523459411:AAH_fpodYu45swnOIME54Q9jN7234Ssj1g",
"AdminPasswordSecurity" : "e332a76c29654f?cb7f!6e6b31ced090c7befaa450f3d9fd$6be54b6d5ff6eafa91"
}
- Настройте systemctl (типа служба на линуксе или че там еще)
- Выполните вход в админ-панель используя пароль из конфига
- Создайте новое приложение и сохраните ключ доступа к нему
Если у Вас несколько проектов и вы хотите разграничить смс-уведомления, чтобы пользователи понимали откуда идет СМС или запрос об авторизации
| Пример веб-панели | Возможность просмотра, что отправлено |
|---|---|
- Сформируйте Post-запрос на https://example.com:5002/api/sms/send со следующими данными: заголовок accessToken = ключ доступа к приложению, который был выдан через веб-панель В теле запроса:
{
"Phone": "8(923)-XXX-XX-XX",
"Message": "Ваш код <b>103-301</b> для подтверждении оплаты внутри-игровой валюты. Не передавайте этот код посторонним."
}- Получите в ответ SmsResult, который содержит информацию об успешности запроса и системным сообщением
| Пример успешной отправки | Пример возращаемых данных в случае неудачи |
|---|---|
- Сформируйте Post-запрос на https://example.com:5002/api/challenge/auth со следующими данными: заголовок accessToken = ключ доступа к приложению, который был выдан через веб-панель В теле запроса:
{
"Phone": "8(923)-XXX-XX-XX"
}- Получите в ответ ChallengeAuthResult, который содержит информацию об успешности запроса и системным сообщением и данных пользователя
Внимание! Тайм-аут 1 минута, если пользователь не нажал авторизоваться, будет возращен ChallengeAuthResult c информацией об неудачи
| Пример сообщения при попытки авторизоваться | Пример возращаемых данных в случае авторизации |
|---|---|
Ну, если Вы совсем прям из жопы не смогли сформировать запрос, можно воспользоваться GET-запросом
Для отправки СМС-сообщения
https://example.com:5002/api/sms/send?accessToken=token&phone=79991231212&message=Ваш СМС код 123-123Для авторизации
https://example.com:5002/api/challenge/auth?accessToken=token&phone=79991231212Если Вы ведет разработку на .NET, вы можете использовать клиент в комплекте. Для Всех остальных случаев, Вы можете использовать свои HTTP клиенты для выполнения запросов
- Положите nuget пакет в своей репозиторий
- Установите
Пример создания экземпляра клиента в проекте
var host = "http://127.0.0.1:5002";
var accessTokenApp = "4162f1e9899c47229125305a59304535";
var phoneForExample = "79991231212";
VerifyApi verifyApi = new VerifyApi(host, accessTokenApp);или
builder.Services.AddScoped<VerifyApi>(opt =>
{
var config = opt.GetRequiredService<IConfiguration>();
var url = config.GetValue<string>("VerifyMe:ApiUrl");
var key = config.GetValue<string>("VerifyMe:ApiKey");
ArgumentNullException.ThrowIfNull(url, "VerifyMe:ApiUrl");
ArgumentNullException.ThrowIfNull(key, "VerifyMe:ApiKey");
return new VerifyApi(url: url, applicationToken: key);
});Пример отправки смс кодов:
var code = new VerificationCodeGenerator().GenerateCode(8);
var sms = new SendSms(phoneForExample, $"Код для проверки <b>{code}</b>");
var smsResult = await verifyApi.Sms.SendSmsAsync(sms);
if (smsResult is not null && smsResult.IsSuccess)
{
Console.WriteLine($"{smsResult.SystemMessage}. Введите проверочный код:");
int maxCount = 2;
for (int i = 0; i <= maxCount; i++)
{
if (Console.ReadLine() == code) return;
Console.WriteLine($"Код неверный. У вас осталось: {maxCount-i} попыток");
}
}Пример авторизации
var dtoPhone = new DtoPhoneAuth(phoneForExample);
Console.WriteLine($"Отправили запрос на авторизаци. Перейдите в бота и нажмите нужное действие");
var challengeAuthResult = await verifyApi.Auth.Auth(dtoPhone);
if (challengeAuthResult is not null)
{
Console.WriteLine($"{challengeAuthResult.SystemMessage}");
if (challengeAuthResult.IsSuccess && challengeAuthResult.User is not null)
{
Console.WriteLine($"Вы авторизировались как: {challengeAuthResult.User.Username}");
}
}- Прежде чем сделать запрос. Предупредите пользователя о, том что необходимо перейти в телеграм-бота для подтверждения номера телефона.
- После чего, предложите на своей платформе ввести пользователю номер телефона
- Выполните запрос и получите ответ