Пишем шаблон для работи с api sms-reg.com

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
368
Баллы
63
Привет вам, дорогие форумчане!

Моя статья наверняка не очень заинтересует гуру Zennopostera. Основная цель которую я ставил перед собой, при написании статьи это показать новичкам, регистрация с использованием телефона не является чем-то супер тяжелым, и даже для начинающих не станет проблемой написать такой шаблон!

Почему именно sms-reg.com.
Банально на сервисе было 50 руб. для теста и настройки. Никакой рекламы и тп. Просто лень искать другие сервисы и заливать туда монеты

Так как дописать статью к времени здачи на конкурс скорее всего не успею выкладываю ее в этом разделе


Итак будем писать микрофрейворк для Apisms-reg.com
Для примера напишем банальный регер яндекса с поддержкой телефона


Скопирую сюда с мануала этапы работы с api

Применение API позволит использовать наш сервис в Ваших программах. Для этого понадобится установить ваш апи-ключ в настройках профиля и далее реализовать в софте следующий порядок действий:

1. Запросить номер с необходимыми параметрами (страна, для какого сервиса);
2. Использовать номер в требуемом сервисе и установить транзакцию в состояние "Готов";
3. Подождать 1 минуту (среднее время ответа операторов) и запустить цикл, который будет проверять состояние транзакции и когда поступит ответ - выдаст ответ;
4. Если ответ верный - завершить транзакцию (необязательно, по истечении времени автозавершение);
5. Если ответ не подошел - запросить проверку, выждать минуту и снова запустить цыкл, проверяющий состояние транзакции и который выдаст проверенный ответ;
6. Если ответ верный - завершить транзакцию (необязательно, по истечении времени автозавершение);
7. Если ответ не верный - отправить уведомления о неверном коде для учета статистики.


Итак


Для работы нужно внести данные в переменные
1. Api key (Брать тут http://sms-reg.com/ui.php?action=settings)
переменная {-Variable.SmsApi_Apikey-}
2. Страну номера
переменная {-Variable.SmsApi_ConfigCountry-}
3. Сервис для которого нужен номер.
Более детальней про значения можно прочитать тут
http://sms-reg.com/docs/APImethods.html?getNum

Давание настройки вынес в настройки проекта.

С начала рассмотрим шаблон регер yandex




Стрелочками указано места подключения встроенных шаблонов. yandex.xmlz

Что они делают.

GetNumber.xmlz - Получает номер телефона для регистрации
SetReady.xmlz - Отправляет уведомления что номер введен на сайте и мы ждем код
GetSmsCode.xmlz - Получает смс код
SengStatusOk.xmlz - Отправляет уведомления что код верный и заканчивает операцию.



Чтоб можно било поиграться и посмотреть как в реале работает шаблон нужно иметь аккаунт на sms-reg.com и немножко монет на счету.

Коротенько опишем yandex.xmlz

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

Думаю нет смысла разбирать детально шаблон регер а сразу переключимся на работу с sms-reg.com
 

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

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

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
368
Баллы
63
GetNumber.xmlz

Шаблон для получения номера телефона для регистрации.



Итак детально рассмотрим шаблон

В шаблон предаются такие данные (через переменние)

SmsApi_Apikey Апи Ключ
SmsApi_ConfigCountry Нужная стана номера телефона
SmsApi_ConfigServise Сервис для которого нужен номер
(какие есть сервиси смотрим сюда http://sms-reg.com/docs/APImethods.html?getNum)

Сначала шаблон делает get запрос (на рисунку № 1)

Код:
http://api.sms-reg.com/getNum.php?country={-Variable.SmsApi_ConfigCountry-}&service={-Variable.SmsApi_ConfigServise-}&apikey={-Variable.SmsApi_Apikey-}
Таким запросом ми сообщаем сервису что нам нужен номер.

В ответ сервис нам дает идентификатор операции (tzid) Он очень важен ! Именно по нем ми до самого конца будем идентифицировать нашу операцию и получать номер, смс код, сообщать что код верный ....
Полностью ответ сервера

Код:
{"response":"1","tzid":"7926545"}
Дальше устанавливаем значения счетчика в 0
Следующим шагом парсим регексом tzid в переменную SmsApi_Tzid
Повторюсь это очень важное значения и оно нам будет нужно до конца!


Дальше делаем Get запрос (на рисунку№2)

По tzid получаем сам номер телефона

Код:
http://api.sms-reg.com/getState.php?tzid={-Variable.SmsApi_Tzid-}&apikey={-Variable.SmsApi_Apikey-}
В ответ нам сервис дает
Код:
{"response":"WARNING_NO_NUMS","service":"yandex"}
Что значит чувак от... бись нет номеров для яндекса :bl:

И шаблон завершается с ошибкой пройдя через регулярку 3 и свитч 4

Попробуем постучатся еще раз :-)

Получаем

Код:
{"response":"TZ_INPOOL","service":"yandex"}
TZ_INPOOL - операция ожидает выделения номера

на свитче 4 идем на паузу 90 сек и через счетчик (на 5 повторов паузи) делаем повторный Get запрос
№2
И вуаля получаем долгожданный номер
Код:
{"response":"TZ_NUM_PREPARE","number":"380936937918","service":"yandex"}
TZ_NUM_PREPARE - выдан номер, ожидается выполнение метода SetReady

Шаблон проходит через регекс 3 свитч 4 и в регекс 6 сохраняет номер в переменную

SmsApi_Number
 
Последнее редактирование:
  • Спасибо
Реакции: luisa, Kazza и igor3333

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
368
Баллы
63
SetReady.xmlz

Шаблон для отправки уведомления что номер введен на сайте и мы ждем код



Очень маленький шаблончик

В шаблон предаются такие данные (через переменние)

SmsApi_Apikey - Апи Ключ
SmsApi_Tzid - tzid идентификатор с пред идущего шаблона

Get запросом (на рисунку №1)

Код:
http://api.sms-reg.com/setReady.php?tzid={-Variable.SmsApi_Tzid-}&apikey={-Variable.SmsApi_Apikey-}
отсылаем уведомления

В ответ получаем

Код:
{"response":"1"}
Других ответов я не получал, но на всякий случай дальше идет проверка на response 1 шаг java №2
 
Последнее редактирование:
  • Спасибо
Реакции: luisa, Kazza и igor3333

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
368
Баллы
63
GetSmsCode.xmlz

Шаблон для получения самого кода с смс

В шаблон предаются такие данные (через переменние)

SmsApi_Apikey - Апи Ключ
SmsApi_Tzid - tzid идентификатор с пред идущего шаблона



Get запросом (на рисунку №1)

Код:
http://api.sms-reg.com/getState.php?tzid={-Variable.SmsApi_Tzid-}&apikey={-Variable.SmsApi_Apikey-}
Проеряем статус операции.

Дальше регексом получаем сам статут.

Все возможные значения приведены тут http://sms-reg.com/docs/APImethods.html?getState

Нам сервис прислал такой ответ

Код:
{"response":"TZ_OVER_OK","service":"yandex","msg":"6690"}
TZ_OVER_OK — операция завершен

Так как пока я делал скрыншот и описи вал шаблон сервис уже успел получить смс и даже засчитать что ответ правильный. Дальше через свитч 2 через регекс 4 получаем сам код и передаем его в основной шаблон.



Но такой результат редкость.

В основному логика такая.
Сервис отдает ответ TZ_NUM_WAIT (ожидается ответ) и через свитч 2 и счетчик 3 идем на паузу в 90 с. А потом на повторный запрос 1. Пока не получим ответ TZ_NUM_ANSWER (поступил ответ )
также в шаблоне предусмотрен вариант TZ_OVER_EMPTY (ответ не поступил за отведенное время)
Но мне пока такой ответ не попадался.
В итоге из шаблона ми получаем в переменной SmsApi_Answer смс код.
 
Последнее редактирование:

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
368
Баллы
63
SengStatusOk.xmlz
Отправляет уведомления что код верный и заканчиваем операцию.



Отправляем Get запрос

Код:
http://api.sms-reg.com/setOperationOk.php?tzid={-Variable.SmsApi_Tzid-}&apikey={-Variable.SmsApi_Apikey-}
Уведомляя сервис что код подошел и заканчиваем операцию.

_____________________________________________________________________


Итак ми рассмотрели скажем основной варинт использования апи. В 99 проц. код будет правельний, и с такой схемой можно работать.

Возникает вопрос

А если код не верный ? (в скобках мой коментарий которий не претендует на 100 % правду в последней инстанции)

По идеи ми должны отправить запрос на уточнения кода ( Ага счасс разбежались нам тупо еще раз тот же код втыкнут и базар окончен)
И только потом можно отправить уведомления о не правильном коде. еще ждать мин 4-6
Лично я отправляю подтверждения о правильном коде и по новой регаю ....

В принципе можно завершить статью. Как мы видим работа черз апи даже проще чем через сам сайт.

И любой очень легко может добавить в свой шаблон поддержку регистраций с номером телефона.

Мда статья чего то халтурой попахивает :ah:
 
Последнее редактирование:

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 119
Благодарностей
3 155
Баллы
113
Мда статья чего то халтурой попахивает
Вам нужно поднимать самооценку, отличная статья.
Как раз делаю реги к социалкам и без телефонов сейчас почти никто не работает нормально.
 
  • Спасибо
Реакции: GHU

strannic

Client
Регистрация
05.12.2010
Сообщения
223
Благодарностей
8
Баллы
18
Спасибо за статью!
Как раз намедни собрался писать автоматизацию прием смс.
Очень вовремя!
 

duksa

Client
Регистрация
18.12.2011
Сообщения
40
Благодарностей
3
Баллы
8
Вам нужно поднимать самооценку, отличная статья.
Как раз делаю реги к социалкам и без телефонов сейчас почти никто не работает нормально.
Или понизить планку самокритики :-)
 

Mangazey

Client
Регистрация
22.03.2014
Сообщения
372
Благодарностей
26
Баллы
28
Отлично! То, что искал! Спасибо ТС.
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
368
Баллы
63
там 1 шаблон надо поправить регулярку
 
  • Спасибо
Реакции: angel737

markzmanz

Client
Регистрация
22.05.2015
Сообщения
63
Благодарностей
4
Баллы
8
@svaminar, спасибо за статью! Как новичок, потратил 6 часов, чтобы разобраться и внедрить в свой проект, но теперь всё здорово :-)
 
  • Спасибо
Реакции: svaminar

Alekseyaz

Client
Регистрация
20.11.2014
Сообщения
164
Благодарностей
28
Баллы
28
Обратил внимание на эмуляцию клавиатуры после ввода паролей и вообще в различные поля, есть вообще смысл в этом? Что показывает практика?
 

stregol

Client
Регистрация
21.04.2013
Сообщения
10
Благодарностей
1
Баллы
3
Дополню Svaminar-a: да, первый регекс где ответ получаем и выделяем ответ там вместо (?<="response":").*(?=",") надо типа (?<="response":")[\w\W]*?(?=","number) - тогда работает)))
 

luisa

Client
Регистрация
17.06.2019
Сообщения
21
Благодарностей
2
Баллы
3
кто подскажет как сделать так чтобы один и тот же номер подтверждал не сколько раз т.е чтобы на 1 номер подтверждал несколько кодов? отпишите кто знает
 

Phoenix78

Client
Регистрация
06.11.2018
Сообщения
4 810
Благодарностей
2 168
Баллы
113
кто подскажет как сделать так чтобы один и тот же номер подтверждал не сколько раз т.е чтобы на 1 номер подтверждал несколько кодов? отпишите кто знает
после получения номера надо сохранить выданный Id и делать запросы к сервису по одному и то муже Id . при этом надо учитывать, что через некоторе время Id будет недействителен. обычно на 20 минут выдают.
тоесть нужны проверки ответа сервиса.
 
  • Спасибо
Реакции: luisa

luisa

Client
Регистрация
17.06.2019
Сообщения
21
Благодарностей
2
Баллы
3
после получения номера надо сохранить выданный Id и делать запросы к сервису по одному и то муже Id . при этом надо учитывать, что через некоторе время Id будет недействителен. обычно на 20 минут выдают.
тоесть нужны проверки ответа сервиса.
ну это сделал а как мне в много поток запускать? Как потоки будут понимать что именно для этого потока код пришел, чтобы допустим 1 поток не брал код 2 потока ?
 

Master4eg

Client
Регистрация
06.04.2016
Сообщения
371
Благодарностей
81
Баллы
28
ну это сделал а как мне в много поток запускать? Как потоки будут понимать что именно для этого потока код пришел, чтобы допустим 1 поток не брал код 2 потока ?
все нормально будет, не переживай.
 

luisa

Client
Регистрация
17.06.2019
Сообщения
21
Благодарностей
2
Баллы
3
как можно еще сделать кроме того как добавить паузу под каждый поток ?
 

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