Для разработчиков

Для разработчиков, Новости

Двухфакторная авторизация (2FA) на Java

Сегодня мы расскажем как сделать двухфакторную авторизацию (2FA) на Java

Пользователь находится на сайте / мобильном приложении и вы хотите, чтобы он подтвердил свой номер телефона при регистрации/авторизации, подтверждение операции оплаты и прочее. 


После нажатия на “получить смс” пользователь получит сообщение вида CODE20.
Где CODE20 — это строка от 1 до 16 символов, состоящая из букв, цифр или букв и цифр одновременно. 

Итак, пользователь нажал “получить смс”.
Вы отправляете запрос на SMS.BY — sendSmsWithCode()
Данный вызов API вернет вам код сообщения “CODE20” и этот же код будет отправлен пользователю.
Пользователь вводит код и вы проверяете, что код совпадает, и если все ОК — то пропускаете пользователя дальше.

Теперь подробнее с примерами кода. 

Для начала давайте распишем алгоритм: 

  1. Создать объект класса SMS_BY 
  2. Указать токен 
  3. Настроить PasswordObject 
  4. Получить ID PasswordObject
  5. Вызвать метод sendSmsWithCode
  6. Сравнить вводимый код от пользователя с тем, который вернут метод sendSmsWithCode

Качаем исходники отсюда

Двухфакторная авторизация работает следующим образом.

Вы настраиваете длину и конфигурацию пароля, после этого у вас будет ID.
Далее по этому ID вы отправляете смс и в ответ вам приходит код, который отправляется пользователю.
В нашей системе такая настройка реализуется через PasswordObject.
PasswordObject — это настройки, которые вы можете использовать в двухфактороной верификации.
Например вам надо, чтобы пароль состоял только из только букв или только цифр или и то и другое, с длиной пароля в 5 символов.

Создание таких настроек выглядит следующим образом:

1
// настройка длины пароля при двухфакторной авторизации с длиной пароля в 5 символов.

createPasswordObject(SMS_BY.PASS_TYPE_LETTERS, 5) ; // только буквы латиницы

createPasswordObject(SMS_BY.PASS_TYPE_NUMBERS, 5) ; // только цифры

createPasswordObject(SMS_BY.PASS_TYPE_BOTH, 5) ;    // и буквы и цифры

Чтобы отправить смс с кодом нужно сделать вызов:

1
oStart.sendSmsMessageWithCode("Ваш пароль: %CODE%", "245", phone,alphaname_id  );

"Ваш пароль: %CODE%" - текст сообщения, <b>%CODE%</b>
- обязательный параметр, вместо %CODE% будет подставлен<

сгененированный пароль для получателя.

"245" - это ID PasswordObject созданный ранее

phone - номер телефона

alphaname_id - ID Альфа-имени, если Альфа-имени пока нет, нужно передавать 0

sendSmsMessageWithCode вернет:

{"status":"ok","parts":1,"len":21,"sms_id":2208471,"code":"GAYXILYZOX"}

Из этого сообщения вам надо получить код, который будет вводить пользователь на форме двухфакторной авторизации:

1
code = GAYXILYZOX

Пример кода:     

1
String password_object_id  = oStart.createPasswordObject("both",4);

Integer alphaname_id       = new Integer(0);

str = oStart.sendSmsMessageWithCode ("Ваш пароль: %CODE%", password_object_id,SMS_BY_Sample.phone,alphaname_id  );

SMS_BY_Sample.print(str);

Читать дальше

Для разработчиков, Новости

Отправка СМС на php

SMS.BY делает все, чтобы разработчикам было удобно использовать API для интеграции с нашим сервисом.

Чтобы Вам было быстрее и проще сделать интеграцию, мы написали пример кода на Php, доступный на GitHub.
Кстати, в конце статьи Вас ждет видео с разбором отправки СМС на Php.

В данном репозитории содержится 4 файла:

1
SMS_BY.php
CountSmsParts.php
Transliterate.php
examples.php

SMS_BY.php — это базовый класс, содержащий все методы по отправке смс, проверку статусов, отправку запроса и так далее.

CountSmsParts.php — класс для подсчета длины строки с учетом кодировок ascii / unicode.

Если вы ранее не сталкивались с отправкой смс, то в целом должны помнить что русский символ требует 2 байта в unicode, поэтому длина смс на русском — 70 символов, а на английском — 140.

1
"lengths" => [
      "ascii" => [160, 306, 459, 628, 785, 942, 1071, 1224, 1377, 1530],
      "unicode" => [70, 134, 201, 252, 315, 378, 469, 536, 603, 670],
]

Но, в тоже время, если у Вас более 2 смс в одном сообщении, то длина будет уже менее 70 символов (68 если точнее), так как для отправки смс требуется добавление системной информации.

Это стоит учитывать при отправке длинных смс, или стараться делать смс короче.
Transliterate.php — как уже можно догадаться, класс по транслитерации русского текста в латиницу.
examples.php — содержит примеры вызова функций по подсчету длины смс-сообщения, а также транслитерации русского текста в английский.
Функция транслитерации также учитывает регистр, поэтому Вам не придется делать дополнительный ucfirst.

Итак, разберем основные моменты в examples.php: 

В самом верху идет подключение классов.

1
include('SMS_BY.php');
require_once('Transliterate.php');
require_once('CountSmsParts.php').
// Код токена вы можете получить здесь: https://app.sms.by/user-api/token

$token = ''; // КОД_ВАШЕГО_ТОКЕНА
// Номер телефона для теста
$phone = ''; // НОМЕР ТЕЛ ДЛЯ ТЕСТА

После того, как Вы вставите свой токен и номер телефона, Вы сможете отправить себе тестовое сообщение (проверьте, что у вас включен CURL).

Код в example.php состоит из блоков if(false).

Вы можете выбрать какой именно метод вы хотите протестировать и поставить там if (true).

Например, отправка смс:

1
if (false) {
     echo("Отправка простого sms-сообщения на номер: $phone");
     /** Отправка простого сообщения: */
     $sms = new SMS_BY($token);
     $res = $sms->createSMSMessage('Моё сообщение');
     $message_id = $res->message_id;
     $res2 = $sms->sendSms($message_id, $phone);
     if ($res2 == false) {
         echo("Во время отправки сообщения произошла ошибка");
     } else {
         echo("Сообщение успешно отправлено, его ID: {$res2->sms_id}");
     }
}

Меняем в блоке выше if(false) на if(true) вызываем и на указанный вами телефон будет доставлена смс.

Пример запуска из командной строки:

отправка смс на Php пример

Как вы видите в конце выводится сообщение об ошибке.

Это происходит, потому что у отправителя пока что нет одобренных Альфаимен (имен отправителя). Заявку на Альфаимя вы можете сделать в кабинете по ссылке: https://app.sms.by/alphanames

 

Смс, полученное на телефон:

photo_2021-04-01_12-05-445

Видео, в котором подробно описана отправка СМС на php:

Читать дальше

Для разработчиков, Интеграции

Как отправлять смс из AmoCRM

Наша платформа позволяет делать рассылки вашим клиентам сразу из AmoCRM:

Отправка смс прямо из карточка контакта/сделки/компании

amocrm_send_text

Отправка смс со событию из цифровой воронки

Вы можете добавить действие в цифровой воронке и дополнительные условия. Можно отправлять к примеру при создании новой сделки, при переходе на новый этап, либо смене ответственного у сделки и так далее, в зависимости от ваших требований.

digital_pipeline_amocrm

Настроив витжет один раз, он будет срабатывать автоматически по указанным условиям. Поэтому, важно помнить о ваших настройках при последующей работе с вашей воронкой продаж.

 

Как найти и установить витжет SMS.by

Для перехода к настройкам приложения необходимо пройти по ссылкам Настройки -> Интеграции -> SMS.BY.
Там нужно указать ваш API-ключ и выбрать альфа-имя, от которого будут идти отправки.

1

После установки виджета он становится доступен в списках контактов, компаний и сделок, в карточке контакта, компании или сделки, в цифровой воронке:

  1. Нужно выбрать контакт;
  2. Нажать на троеточие;
  3. Нажать на Sms.by.

2

Если нужно отправить смс нескольким клиентам, только нужно сделать аналогичные действия, поставим галочки напротив нескольких получателей.

На карточке контакта также будет отображаться виджет, где вы можете ввести и отправить текст сообщения:
3

Текст сообщения – окошко для ввода текста смс.
Во втором окошке список контактов телефонов. Для контактов – это телефоны контактов, для компаний – это телефоны компаний, для сделок – это телефоны присоединённых к сделке контактов и компаний. Здесь можно галочками выделить конкретные телефоны, по которым хотим осуществить рассылку. Нажимаем на кнопку «Отправить для старта рассылки».

4

Более подробно о настройках витжета вы можете посмотреть в нашем видео:


Еще нет акаунта в SMS.by? Зарегистрироваться тут.

 

Читать дальше