Как легально «вскрыть» QIWI Кошелек и прокачать его по полной программе

    С недавнего времени пользователям Visa QIWI Кошелька доступны новые методы API. Под катом: что это за API, зачем мы его открыли и почему стоит начать им пользоваться уже сейчас.



    История появления API


    Формально история нашего API началась в апреле этого года, хотя часть из входящих в него методов была доступна задолго до этого.

    Массовый пользовательский сервис QIWI Кошелек постепенно переходит на архитектуру микросервисов, поэтому внутри нашей системы компоненты взаимодействуют друг с другом посредством некоего API. Любой пользователь может зайти на сайт, открыть дебаггер и просмотреть, какие запросы браузер отправляет на сервер. Минимальных навыков программиста достаточно, чтобы вытащить отправляемые запросы и использовать их в собственных решениях в обход сайта.

    Желающих так схитрить оказалось довольно много. Это и студенты-энтузиасты, которым интересно поковыряться в деталях работы Кошелька, и профессиональные разработчики, желающие интегрировать отдельные функции сайта QIWI Кошелька в свои решения. В итоге параллельно с развитием сайта начала развиваться целая экосистема сторонних решений в «сером» режиме, не легализованном в пользовательском соглашении и не обеспеченным нашим саппортом.

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

    Чтобы упорядочить выгрузку данных с сайта, мы приняли решение легализовать ее, как это сделали в свое время в Citibank, Wargaming и Вконтакте. Мы описали наиболее современный и стабильный из существующих способов получения информации, сформировав первую версию пользовательского API.

    С появлением документации для разработчиков пользователям больше не нужно разбирать наш сайт по кусочкам, рискуя наткнуться на старые протоколы. По посещаемости раздела документации мы отслеживали, насколько востребован API. Мы также разместили адрес электронной почты для обратной связи и вопросов и мониторили публикации по теме в социальных сетях и форумах. На тот момент перед нами не стояло задачи как-то продвигать API — мы хотели навести порядок и предложить сторонним разработчикам бесплатный, безопасный, проверенный способ доступа.

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

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

    Проблемы первой версии


    К сожалению, на момент создания первой версии API у нас еще не было отдельной системы аутентификации. Поэтому на том этапе мы использовали схему аутентификации с нашего сайта (CAS), она была разобрана по отдельным командам и опубликована на developer.qiwi.com.

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

    Хотя публикацию открытого API мы никак не афишировали, в сети появилось несколько статей, в том числе с негативными отзывами. На адрес обратной связи api_help@qiwi.com мы получили более сотни писем, смысл которых сводился к тому, что сам по себе API хороший, но аутентификация никуда не годится. Не все пользователи понимали, почему для подключения к финансовому сервису надо проходить столь заковыристую процедуру, в то время как с Instagram или Вконтакте все намного проще. Мы разъясняли, что сложности были обусловлены именно финансовой составляющей, ведь используемый метод (как в аутентификации сайта, так и в API) не должен ставить под угрозу счета клиентов.

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

    Обновленный API


    Разработка новых методов в рамках API была поручена команде специалистов, которые делают бекэнд для сайта и мобильного приложения QIWI Кошелька. API — их ключевая компетенция, именно эта команда переводит основной сайт на архитектуру микросервисов. И API тут служит для взаимодействия основного сайта и отдельных сущностей через запросы, которые мы передаем нашим пользователям.

    Чтобы доработать существующий API и добавить в него новые методы, мы тщательно проанализировали обратную связь от пользователей.

    Хотя среди наших клиентов довольно много любителей-энтузиастов, склонных пробовать что-то новое, основная часть пользователей API — профессиональные разработчики, интегрирующие QIWI Кошелек в свои бизнес-процессы (причем, это не интернет-магазины — для юридических лиц у нас предусмотрен отдельный API). В основном речь идет об оптимизации работы Кошелька под собственные нужды: настройке уведомлений, автоматизации оплаты услуг и обмена цифровыми товарами между пользователями, а также других задачах, не связанных с привычной электронной коммерцией.

    Опираясь на отзывы, мы предложили новую аутентификацию пользователей через API, добавили новые функции для взаимодействия с Кошельком. В первой версии у нас были описаны запрос баланса, история платежей и отправка перевода. Сейчас их дополнили запрос профиля пользователя, оплата сотовой связи, переводы в банки и на карты по номерам карт, счетов и договоров вместо полных реквизитов.

    Новая аутентификация


    Для построения системы аутентификации, ориентированной на API, мы использовали стандарт RFC 6749 по открытому протоколу OAuth 2.0. Чтобы аутентификация соответствовала требованиям финансового сервиса, мы обеспечили двухфакторный доступ — по паролю к Кошельку и SMS-коду. Для прохождения процедуры пользователю необходимо выпустить токен, действительный в течение одного месяца 180 дней (выпуск подтверждается SMS-сообщением). По просьбе пользователей в новой версии OAuth 2.0 мы также открыли возможность выбора прав доступа для токена. К примеру, если требуется запросить баланс или получить историю платежей, токену даются права только на чтение. Всего доступно четыре группы прав доступа:

    • доступ к информации о профиле пользователя;
    • доступ к балансу Кошелька;
    • доступ к истории платежей;
    • полный доступ к платежам.



    Функция оказалась весьма востребована, менее половины токенов выпускается с полными правами (осуществление платежей), многим нужно лишь получение информации.

    Профиль пользователя


    Одна из новых функций, родившихся внутри нашей команды, а не из пожеланий клиентов — запрос профиля пользователя. Он позволяет получать различную информацию о Кошельке: дату регистрации, привязанный адрес электронной почты, уровень идентификации Кошелька. Последнее особенно важно для финансового сервиса, поскольку уровень идентификации определяет лимиты по операциям для кошелька. Ранее эту информацию можно было найти в настройках Кошелька на сайте qiwi.com, теперь она доступна и через API.

    Отметим, что персональные данные пользователя через запрос профиля не доступны — таково требование безопасности.

    Комиссионные тарифы


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

    Оплата сотовой связи


    Еще одно нововведение, инициированное нашими пользователями, — инструмент автоматизации оплаты сотовой связи, например, для телефонов курьеров.

    Фактически метод состоит из двух этапов:

    • автоматическое определение оператора по номеру телефона и ID поставщика услуг в системе (работает даже для номеров, которые переносились от одного оператора к другому (MNP);
    • перевод денег на счет оператора.


    Переводы в банки и на банковские карты


    По аналогии с оплатой сотовой связи эта группа методов API позволяет автоматизировать переводы на банковские карты систем VISA, MasterCard и национальной платежной системы МИР по России и СНГ. Перевод осуществляется по номеру карты, по нему же определяется платежная система.

    Банковский перевод — это отдельный метод, используемый для отправки денег в некоторые банки, с которыми у нас реализован онлайн-протокол моментальных переводов. В отличие от обычных денежных переводов по банковским реквизитам, для этих банков можно использовать большее количество идентификаторов клиента (номер карты, договора, счета и т. п.).

    Юридическая сторона вопроса


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

    Чтобы таких ситуаций больше не возникало, мы внесли в пользовательское соглашение соответствующие изменения. Теперь API имеет официальный статус наравне с сайтом и мобильным приложением.

    Что будет дальше?


    Перечисленные методы доступа к данным уже работают, а документация по ним опубликована на сайте developer.qiwi.com.

    Завершено внутреннее тестирование, и, опубликовав API, мы перешли ко второму этапу — проверке работоспособности связки «пользователь + документация + API». Этот этап должен ответить на вопросы о том, насколько понятна документация, нужны ли какие-то дополнительные пояснения и т. п. Поэтому мы предлагаем пользователям направлять отзывы на наш адрес: api_help@qiwi.com.

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

    Если вам интересны детали разработки новой версии API, пишите и задавайте вопросы в комментариях — мы постараемся ответить на них в наших следующих публикациях.

    Внимание, конкурс


    Чтобы заинтересовать разработчиков в использовании нового API, мы проводим всероссийский QIWI API Contest. Это первый конкурс в рамках QIWI Open Platform, направленный на популяризацию API компании.

    Для участия в конкурсе необходимо создать Mobile First решения — чат-боты, мобильные приложения и web-продукты c использованием API QIWI Кошелька. Наши эксперты отберут наиболее проработанные решения и пригласят до 15 участников в финал конкурса, который пройдет в Москве 23 сентября.

    Конкурсанты из других городов могут принять участие дистанционно. Регистрация проектов открыта и продлится до 15 сентября. Заявку на участие можно сделать на сайте QIWI API Contest через Timepad или отправить на почту apimarket@qiwi.com. Для всех вопросов мы создали специальный чат в Telegram.

    25.08.2017 update:

    • теперь токены живут не 30, а 180 дней;
    • запустили сайт конкурса QIWI API Contest.
    Метки:
    QIWI 210,99
    Ведущий платёжный сервис нового поколения в России
    Поделиться публикацией
    Комментарии 30
    • 0
      мы проводим всероссийский QIWI API Contest

      Так как это конкурс, то какие призы?
      • –2
        Привет, призы будут интересные, следите за анонсами в чате конкурса t.me/qiwiapicontest
        • +4
          Так неинтересно, вы заставляете меня регистрироваться на «каком-то» сервисе, у вас партнёрка с телеграмом? ))
          • 0
            Из всех чатиков в Telegram удобно отвечать оперативно на вопросы участников. Отправлять информацию, документацию необходимую — отработано на других конкурсах уже.
      • 0
        Подскажите пожалуйста — какие преимущества у киви-кошелька перед другими средствами пеевода денег (ну, кроме удобства незаконных переводов)?
        • 0

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

        • +3
          QIWI Кошелек умеет быстро переводить деньги из разных форм в обе стороны — наличные, другие электронные кошельки, банковские карты, балансы номеров сотовой связи. Многие из этих функций уже доступны в API.

          PS Переводы требуют идентификации по законодательству РФ
          • 0
            в пользовательском соглашении и не обеспеченным нашим саппортом

            Позвольте, а как такие действия соотносятся со статьей 159 УК РФ?
            Ведь, по сути(предпоследний абзац статьи), если деньги не ушли, а пришли, то мошенничество на лицо.
            Я(пока) не смотрел API, но вы говорите о продолжении разработки оного. А это намекает и на действующие уязвимости(коли таковые существуют) и на возможные в будущем.
            Вопрос далеко не праздный — я ваш клиент.
            • 0
              Да, вопрос серьезный. Давайте по порядку:

              1. Пользовательским соглашением сервиса Visa QIWI Wallet не регулируется использование сторонних «API» QIWI Кошелька.
              2. Более того, мы не рекомендуем вводить логин и пароль от QIWI Кошелька на любых сторонних ресурсах.
              3. API Кошелька используется также на qiwi.com и проходит многоступенчатые проверки на безопасность.
              4. Связь статьи УК РФ и планами по предоставлению аутентификации пользователей кошелька для третьих сторон не очень понятна. Было бы здорово, если вы написали подробнее о ваших сомнениях на api_help@qiwi.com — тогда мы сможем дать более содержательный ответ.

              Обязательно попробуйте наш API и расскажите нам об этом.
              Процесс получения токена API и самых методов, всё есть в документации developer.qiwi.com/qiwiwallet/qiwicom_ru.html
            • 0

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

              • 0
                Написал вам в личном сообщении, уточните, пожалуйста, в чем была проблема.
              • 0
                Вы пишите про OAuth 2.0 в разрезе аутентификации, но справедливости ради — это все-таки стандарт авторизации. Интересно узнать, что у вас отвечает за собственно аутентификацию?
                И планируете ли вы уходить от SMS, как от одного из факторов аутентификации?
                • 0
                  Строго говоря вы правы: RFC 6749 — это authorization framework.
                  Пока смс — наше всё, второй фактор, который рекомендован ЦБ.
                  Но поиск альтернатив ведётся.
                  • 0
                    Спасибо за ответ.
                    Было бы неплохо предоставлять пользователям возможность выбора второго фактора вместо СМС.
                    ЦБ, надеюсь, свои рекомендации пересмотрит, как их пересмотрел недавно NIST. Все таки украсть СМС уже не так дорого, а перевыпуск SIM вообще давно успешно практикуется.
                    • +1

                      Мы рады, что читатели Хабра поддерживают наше желание найти альтернативу смс.


                      По поводу дублирования сим-карт — у нас реализована проверка перевыпуска симки через механизм IMSI.

                    • 0

                      Альтернатива простая — OTP via FreeOTP, Google Authenticator и иже с ними.

                  • 0
                    Скажу честно, сейчас мы используем «старый API».
                    Мы разрабатываем софт, и даем нашим клиентам возможность получать информацию о входящих платежах и учитывать их в автоматическом режиме.
                    Скажу сразу, у нас есть поддержка и коммерческого варианта(через него выставляется счет). И причем часть людей(3% примерно) ушли на коммерческий вариант, после того как забрали возможность выставлять счета на обычном кошельке. Естественно счета выставлялись через «недокументированный» режим, и часть клиентов с 17 апреля начала горевать и с киви ушли(ну ничего страшного, бывает).

                    Новый API очень нравится, и будем переводить все на «новые рельсы», единственное, сразу могу сказать(а может и попросить от лица наших клиентов), что бы на просмотр истории токен мог выдаваться больше чем на 1 месяц. Потому что люди тёмные и не осведомленные в этом плане, но деньги на кошельках держат. А заходить к ним в кошелек и делать это каждый месяц самостоятельно нам не сильно хочется(сейчас они нам передают логин и пароль от кошелька и мы настраиваем все за них. Да, не все продвинутые, и многие боятся что то самостоятельно делать в кошельке).

                    И что получится в итоге: один-два месяца они самостоятельно, и главное вовремя, будут заходить кошелек и делать новый токен(или нас просить), а потом, когда внезапно перестанет работать, то люди просто откажутся от кошелька.

                    Нам если честно не важно, пользуются ли они(наши клиенты) Вашим кошельком или нет. Просто небольшой комментарий.
                    • 0
                      Вы правы — 30 дней для токена это не очень долгий срок.
                      Но нельзя просто так взять и сделать бесконечные токены на старте, пока такое требование по безопасности. Мы обязательно найдём решение по увеличению времени жизни токена.
                      • 0
                        А ни кто не говорит про бесконечные. Это правильно что надо ограничивать. Но надо дать пользователю выбор. Или давать выбор на сколько месяцев(1,3 или 6 месяцев например). Раз в пол года сменить API токен никого не будет отягощать.
                        Т.е. человек выбирает разрешения и говорит срок. И что бы можно было бы создавать несколько токенов. Один для просмотра истории(на 6 месяцев), другой для оплаты с кошелька(на месяц) и т.д.
                        • 0
                          Идея с выбором срока жизни при создании токена интересная, мы ее изучим.

                          Несколько токенов для 1 кошелька также может быть полезным, пока начнем с одного токена, дальше может быть хорошим следующим шагом.
                    • 0
                      Это верный путь — открыть свое API и предоставить к нему доступ сторонних разработчиков. Очень жаль, что банки это не понимают и старательно пытаются прикопать свое API, хотя как правильно сказано в начале статьи, даже студент первого курса (да что там студент, школьник на то способен) легко расковыряет личный кабинет клиента и навесит на него свою обертку.
                      • 0
                        Банки это понимают — участники ассоциации Финтех уже работают над этим.

                        Направление называется «развитие открытых API», информации пока мало, но это всё официально объявлено на fintechru.org

                        В Европе процесс согласования общих стандартов для открытого банковского API занял больше 5 лет, надеюсь, в России мы справимся быстрее.

                        Киви Банк как участник ассоции Финтех будет поддерживать отраслевое решение, когда оно появится. А пока мы будем продолжать развивать отрытые методы работы API QIWI Кошелька.
                        • 0
                          Меня очень радует эта информация. Где-то с полгода назад я общался с рядом развитых в плане IT банков, которые мне задавали вопрос: а вам это зачем? И все объяснения, что мне это нужно для создания приложения, упрощающего жизнь клиентам более, чем одного банка, коим сам являюсь, совсем никак не приводили к пониманию. Надеюсь, что в ближайшее время будет серьезный прорыв. Еще раз моя благодарность!
                      • 0
                        Отображать в истории операций как успешные так и неуспешные платежи
                        • 0
                          Так сейчас и работает. Обращение к payment-history возвращает ровно то, что показывает сайт qiwi.com/payment/history

                          Если вы хотите, чтобы мы разобрали ваш случай детально — пришлите, пожалуйста, нам письмо api_help@qiwi.com с логом запроса.
                          • 0
                            В истории операций на сайте есть неуспешный входящий платеж. Через API его не видно

                            PS. историю операций на сайте использую старую qiwi.com/report.action
                        • +1
                          Очень рад, что наконец-то появился API. До этого приходилось парсить сайт и использовать недокументированный внутренний API, а это долго (много запросов) и не всегда стабильно (на последний запрос может прийти ошибка, а потом приходится проверять историю, чтобы узнать настоящий статус перевода). Вот только 1 месяц действия токена — слишком маленький срок.

                          Вопрос не по теме (по iShop). Есть ли возможность выставить счет пользователю, не спрашивая заранее номер телефона? Сейчас же крайне неудобно. Сейчас спрашиваем телефон, выставляем счет, направляем на сайт QIWI. А хотелось бы просто перенаправлять на QIWI, передавая сумму, номер счета и пр. в запросе (GET или POST), а там уже пользователь или сразу платит (если есть активная сессия), или вводит телефон, но уже на сайте QIWI.
                          • 0
                            в любом случае конечный статус платежа надо уточнять в истории операций
                            • 0

                              Мы сейчас переделываем протокол работы со счетами в ishop. Рекомендую зарегистрироваться на kassa.qiwi.com и ждать новостей про обновленный протокол.

                              • 0
                                Такая возможность есть в ishop в текущем протоколе. В обновленном протоколе, который мы представим в сентябре, все будет удобнее и это будет основной вариант интеграции. Если будут вопросы — обращайтесь.

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое