SMSCode — это микросервис, предназначенный для использования в сценариях, где требуется проверка подлинности с помощью SMS-сообщений. К таким сценариям относятся: регистрация пользователей, восстановление пароля, аутентификация и вход с использованием кода из SMS.
Во-первых, я не нашёл готового решения, которое объединяло бы все эти базовые функции. По крайней мере, среди открытых проектов такого нет. Однако при разработке многих проектов часто требуется использовать функцию проверки подлинности по SMS. При этом каждый раз создавать заново решение кажется слишком трудоёмким и сложным для контроля. Поэтому возникла идея разработать универсальный микросервис для проверки подлинности с помощью SMS. В итоге менее чем за 1500 строк кода на Go был создан универсальный микросервис SMSCode.
В каталоге smscode выполните следующую команду:
go mod tidy
Благодаря поддержке кроссплатформенности языка Go, SMSCode можно установить на всех основных операционных системах (Linux, Mac OS X, FreeBSD, Windows, ARM и др.).
Рекомендуется устанавливать SMSCode на Linux x64. Для установки на этой платформе убедитесь, что на ней установлен компилятор Go (GO 1.5+).
go get -u github.com/xluohome/smscode
cd $GOPATH/src/github.com/xluohome/smscode
./build && ./smscode
См. справку ./smscode.exe -help.
См. файл Dockerfile в проекте для создания образа Docker.
Измените параметр timezone в файле conf.yaml.
Значение параметра timezone можно найти в файле zoneinfo.zip в папке conf/.
bind: 0.0.0.0:8080 #адрес микросервера для отправки SMS-сообщений
timezone: PRC #часовой пояс
timeout: 5 #время ожидания ответа от поставщика услуг SMS (в секундах)
vendors:
alidayu: #конфигурация Alidayu http://www.alidayu.com
appkey: 20315570
appSecret: 87hfgfg75775765787878
issendbox: false
yuntongxun: #конфигурация Yuntongxun http://www.yuntongxun.com/
AccountSid: 8a48b55e434514c9c31921a039b
AccountToken: 61434dc2b245435eadf82d381fa3f
AppId: aaf98f8fsdafd2678c9d07875040f
SoftVersion: 2013-12-26
RestURL: https://app.cloopen.com:8883
hywx: #конфигурация Hywx http://www.ihuyi.cn/
account: 6666666666666666
password: 88888888888888888888888
RestURL: http://106.ihuyi.cn/webservice/sms.php?method=Submit
errormsg:
"err_model_not_ok1": "Текущий пользователь (%s) не существует, отправка SMS-сообщения невозможна"
"err_model_not_ok2": "Текущий пользователь (%s) существует, отправка SMS-сообщения невозможна"
"err_code_not_ok": "Код проверки подлинности:%s неверен, пожалуйста, введите его повторно"
"err_vailtime_not_ok": "Срок действия кода проверки подлинности:%s истёк, пожалуйста, получите новый код"
"err_per_day_max_send_nums": "Один номер телефона может получать не более %d кодов проверки подлинности в день"
"err_per_minute_send_num": "Один номер телефона может получать не более 1 кода проверки подлинности в минуту"
"err_allow_areacode": "Номер телефона не может быть получен в регионе:%s"
"err_not_uid": "Не удалось сопоставить номер телефона%s с соответствующим%s"
servicelist:
"register":
vendor: alidayu #поставщик услуг SMS
group: db1 #номера телефонов в одной группе используют одни и те же данные UID
smstpl: SMS_34850248 #идентификатор шаблона SMS от Alidayu
signname: 罗永 #подпись от Alidayu
callback: "http://127.0.01/test9.php"
allowcitys: #только номера телефонов из следующих регионов могут получать SMS
- 0575
- 0571
- 0574
maxsendnums: 4 #максимальное количество SMS, отправляемых на один номер телефона в день, ограничено поставщиком услуг SMS
validtime: 600 #срок действия полученного кода проверки подлинности (в секундах), после истечения которого код становится недействительным
mode: 2 #режим отправки: 1 — только если есть соответствующий UID, 2 — только если нет UID, 3 — независимо от наличия UID
outformat: mobcent #формат вывода RestAPi (mobcent,default)
"restpwd":
vendor: alidayu
group: db1
smstpl: SMS_39190087
signname: 罗永
callback:
allowcitys:
- 0578
maxsendnums: 2
validtime: 360
mode: 3
"getpwd":
vendor: yuntongxun
group: db1
smstpl: 149350
signname: 罗永亿
callback:
allowcitys:
- 0578
- 0575
maxsendnums: 2
validtime: 360
mode: 3
Интерфейс | Адрес | Параметры | Описание |
---|---|---|---|
Отправка кода проверки | /send | service, mobile | Название сервиса, номер телефона |
Проверка кода проверки | /checkcode | service, mobile, code | Название сервиса, номер телефона, код проверки |
Установка UID | /setuid | service, mobile, uid | Название сервиса, номер телефона, идентификатор пользователя |
Удаление UID | /deluid | service, mobile, uid | Название сервиса, номер телефона, идентификатор пользователя |
Информация о пользователе | /info | service, mobile | Название сервиса, номер телефона |
"ZipCode": "312000", |
"AreaZone": "0575",
"CardType": "电信"
},
"lastsendtime": 0,
"mobile": "15336860197",
"sendnums": 0,
"service": "register",
"smscode": "",
"smscodeinvalidtime": 0,
"uid": ""
}
}, "head": { "errCode": "000000", "errInfo": "smscode调用成功,没有任何错", "version": "2.7.0.3", "alert": 0 } }
### Callback сервис
Для каждого сервиса коротких сообщений можно установить URL обратного вызова HTTP;
При возникновении следующих событий будет вызываться URL обратного вызова:
1. Успешная или неудачная отправка SMS-сообщения с кодом подтверждения.
2. Проверка кода подтверждения прошла успешно.
Если URL обратного вызова недоступен, система будет пытаться получить доступ к нему с задержкой в 2, 4, 6, 8, 16, 32, 64 и 128 секунд (всего 10 попыток).
В случае успеха запрос POST отправляется на указанный URL с параметрами (multipart/form-data):
mobile string # номер телефона code string # код подтверждения service string # название сервиса uxtime int # временная метка flag string # метка обратного вызова (Success, Failed, Checkok)
### Связаться с автором
Связаться с автором через WeChat:

Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )