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

  • Автор темы Автор темы svaminar
  • Дата начала Дата начала

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Реакции
379
Баллы
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


AojDZq.png


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

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

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



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

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

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

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

Вложения

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

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

7bWQeM.png


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

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

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
SetReady.xmlz

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

JBwAnK.png


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

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

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
GetSmsCode.xmlz

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

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

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

yDH8ZW.png


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 смс код.
 
Последнее редактирование:
SengStatusOk.xmlz
Отправляет уведомления что код верный и заканчиваем операцию.

5bHcxa.png


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

Код:
Развернуть Свернуть Копировать
http://api.sms-reg.com/setOperationOk.php?tzid={-Variable.SmsApi_Tzid-}&apikey={-Variable.SmsApi_Apikey-}

Уведомляя сервис что код подошел и заканчиваем операцию.

_____________________________________________________________________


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

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

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

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

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

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

Мда статья чего то халтурой попахивает :ah:
 
Последнее редактирование:
Мда статья чего то халтурой попахивает
Вам нужно поднимать самооценку, отличная статья.
Как раз делаю реги к социалкам и без телефонов сейчас почти никто не работает нормально.
 
  • Спасибо
Реакции: GHU
Спасибо за статью!
Как раз намедни собрался писать автоматизацию прием смс.
Очень вовремя!
 
Вам нужно поднимать самооценку, отличная статья.
Как раз делаю реги к социалкам и без телефонов сейчас почти никто не работает нормально.
Или понизить планку самокритики :-)
 
там 1 шаблон надо поправить регулярку
 
  • Спасибо
Реакции: angel737
@svaminar, спасибо за статью! Как новичок, потратил 6 часов, чтобы разобраться и внедрить в свой проект, но теперь всё здорово :)
 
  • Спасибо
Реакции: svaminar
Обратил внимание на эмуляцию клавиатуры после ввода паролей и вообще в различные поля, есть вообще смысл в этом? Что показывает практика?
 
Дополню Svaminar-a: да, первый регекс где ответ получаем и выделяем ответ там вместо (?<="response":").*(?=",") надо типа (?<="response":")[\w\W]*?(?=","number) - тогда работает)))
 
кто подскажет как сделать так чтобы один и тот же номер подтверждал не сколько раз т.е чтобы на 1 номер подтверждал несколько кодов? отпишите кто знает
 
кто подскажет как сделать так чтобы один и тот же номер подтверждал не сколько раз т.е чтобы на 1 номер подтверждал несколько кодов? отпишите кто знает
после получения номера надо сохранить выданный Id и делать запросы к сервису по одному и то муже Id . при этом надо учитывать, что через некоторе время Id будет недействителен. обычно на 20 минут выдают.
тоесть нужны проверки ответа сервиса.
 
  • Спасибо
Реакции: luisa
после получения номера надо сохранить выданный Id и делать запросы к сервису по одному и то муже Id . при этом надо учитывать, что через некоторе время Id будет недействителен. обычно на 20 минут выдают.
тоесть нужны проверки ответа сервиса.

ну это сделал а как мне в много поток запускать? Как потоки будут понимать что именно для этого потока код пришел, чтобы допустим 1 поток не брал код 2 потока ?
 
ну это сделал а как мне в много поток запускать? Как потоки будут понимать что именно для этого потока код пришел, чтобы допустим 1 поток не брал код 2 потока ?
все нормально будет, не переживай.
 
как можно еще сделать кроме того как добавить паузу под каждый поток ?
 

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