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

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
378
Баллы
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 или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

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

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

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
378
Баллы
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
Благодарностей
378
Баллы
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
Благодарностей
378
Баллы
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
Благодарностей
378
Баллы
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 941
Благодарностей
4 332
Баллы
113
Мда статья чего то халтурой попахивает
Вам нужно поднимать самооценку, отличная статья.
Как раз делаю реги к социалкам и без телефонов сейчас почти никто не работает нормально.
 
  • Спасибо
Реакции: GHU

strannic

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

duksa

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

Mangazey

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

svaminar

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

AlexGoodWeb

Client
Регистрация
08.04.2015
Сообщения
206
Благодарностей
51
Баллы
28

markzmanz

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

Alekseyaz

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

stregol

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

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28

luisa

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

Phoenix78

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

luisa

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

Master4eg

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

luisa

Client
Регистрация
17.06.2019
Сообщения
30
Благодарностей
3
Баллы
8

luisa

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

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