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

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

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

Введение

API QIWI Кошелька позволяет автоматизировать получение информации о вашем счёте в сервисе QIWI Кошелек и проводить операции с его помощью.

Методы API доступны после регистрации пользователя в сервисе QIWI Кошелек.

Api p2p-счетов. выставление счета

Доступно выставление счетов в рублях и тенге.

Надежный способ для интеграции. Параметры передаются server2server с использованием авторизации.

При успешном выполнении запроса в ответе вернется параметр payUrl — ссылка для перенаправления пользователя на форму оплаты. К ней вы можете добавить дополнительные параметры. Подробнее см. в разделе Форма для оплаты счета.

Также существует более простой способ выставления счета — непосредственно через вызов платежной формы.

Ознакомьтесь со статьями Кошелек заблокирован. Что делать? и Как избежать блокировки кошелька.

Api p2p-счетов. проверка статуса перевода по счету

Рекомендуется использовать этот метод после получения уведомления о переводе.

Api qiwi мастер

API дает доступ к управлению пакетом услуг QIWI Мастер. Пакет услуг позволяет выпускать до пяти бесплатных виртуальных карт QIWI и перевыпускать карты неограниченное число раз. Выпуск карт сверх указанного количества оплачивается по тарифу.

Доступны два типа карт:

  • QIWI Мастер Prepaid – для оплаты рекламы в сервисах Яндекс.Директ и myTarget;
  • QIWI Мастер Debit – новый дебетовый БИН.

Для вызова методов API вам потребуется токен API QIWI Wallet с разрешениями на следующие действия:

  • Управление виртуальными картами,
  • Запрос информации о профиле кошелька,
  • Просмотр истории платежей,
  • Проведение платежей без SMS.

Отметьте указанные разрешения при выпуске токена API QIWI Wallet.

См. также Пошаговое руководство по интеграции API QIWI Мастер.

С помощью методов API вы можете:

Чтобы начать работу с API, необходимо приобрести пакет QIWI Мастер.

Basic-авторизация

Пример уведомления с Basic-авторизацией

Qiwi pay wpf

Клиенту отображается платежная форма для ввода реквизитов карты на стороне QIWI PAY.

ТСП достаточно просто перенаправить клиента на платежную форму.

Схема одношагового сценария платежа с использованием платежной формы (WPF) на стороне QIWI PAY.

sequenceDiagram
participant Customer
participant Merchant
participant QiwiPay as QIWI PAY
participant QiwiBank as QIWI Bank
Customer->>Merchant:Оформление заказа,предложение оплатитьс помощью пластиковой карты
activate Merchant
Merchant–>>Customer:

Перенаправление наплатежную форму
deactivate Merchant
Customer->>QiwiPay:Запрос на показплатежной формы
activate QiwiPay
QiwiPay–>>Customer:Отображение платежной формы
deactivate QiwiPay
Customer->>QiwiPay:Ввод данных карты и отправка формы
activate QiwiPay
QiwiPay->>QiwiPay:

Первичная валидациявходных параметров,создание транзакции
QiwiPay->>QiwiPay:Модуль борьбы с мошенничеством
rect rgb(237, 243, 255)
Note over Customer, QiwiPay:3-D Secure
QiwiPay->>QiwiPay:Проверяем картуна участие в 3-D Secure
QiwiPay–>>Customer:

Перенаправление плательщика на ACS URL
deactivate QiwiPay
Customer->>QiwiPay:Возврат с ACS с результатом верификации
activate QiwiPay
end
QiwiPay->>QiwiBank:Авторизационный запрос
activate QiwiBank
QiwiBank–>>QiwiPay:Успешная авторизация
deactivate QiwiBank
rect rgb(237, 243, 255)

Note over Customer, QiwiPay:Немедленное уведомление об операции
QiwiPay->>Merchant:Уведомление о результатеоперации (callback)
activate Merchant
Merchant–>>QiwiPay:Подтверждение полученияуведомления
deactivate Merchant
end
QiwiPay->>Customer:

Sdk и библиотеки

С руководством по работе с SDK можно ознакомиться здесь.

Url /identification/v1/persons/wallet/identification

  • wallet – номер вашего кошелька без знака ” “

Url /person-profile/v1/persons/personid/status/restrictions

  • personId – номер вашего кошелька без знака ” “

Url сервисов оплаты

  • Для работы с QIWI PAY WPF необходимо перенаправить покупателя на URL:

Авторизация по подписи

Пример уведомления с подписью

Баланс qiwi кошелька

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

Банковский перевод {#banks}

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

Безопасная сделка

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

Поддерживается два вида безопасной сделки:

  • С выплатой на QIWI кошелек
  • С выплатой на карты

Авторизация операции производится как с помощью QIWI PAY API, так и QIWI PAY WPF.

Безопасная сделка с выплатой на qiwi кошелек

Этот вид безопасной сделки состоит из двух этапов:

На каждом из этапов обязательно указывайте номер QIWI Кошелька в поле cf1 в формате

“cf1”: “79111111111”

При подтверждении операции сумма к выплате автоматически зачислится на указанный в запросе QIWI Кошелек.

Пример отмены

Безопасная сделка с выплатой на карту

Этот вид безопасной сделки состоит из трех этапов:

Пример выплаты

Быстрый старт

  1. Реализуйте веб-сервис обработки запросов. Особое внимание обратите на реализацию проверки подписи.
  2. Зарегистрируйте свой обработчик. Внимание! Длина оригинального (не URL-encoded) адреса сервиса обработчика не должна превышать 100 символов.
  3. Запросите ключ проверки подписи.
  4. Протестируйте прием запросов вашим обработчиком с помощью тестового запроса. На зарегистрированный в п.2 сервис придет пустое уведомление.

Чтобы сменить адрес сервера для обработки вебхуков:

  1. Удалите обработчик вебхуков.
  2. Зарегистрируйте новый обработчик. Внимание! Длина оригинального (не URL-encoded) адреса сервиса обработчика не должна превышать 100 символов.
  3. Запросите ключ проверки подписи для нового обработчика.
  4. Протестируйте прием запросов новым обработчиком с помощью тестового запроса. На зарегистрированный в п.2 сервис придет пустое уведомление.

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


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

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

Возврат на сайт провайдера

Возврат клиента после успешного создания транзакции

Возврат оплаченного счета

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

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

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

Возможные операции

В каждом запросе ТСП к API или при загрузке платежной формы WPFQIWI PAY APIОперацияФинансоваяОписание1 saleДаОдношаговый сценарий оплаты2- finish_3dsЗависит от сценарияВозврат в систему после 3DS аутентификации3 authНетАвторизационный запрос (холдирование средств) в случае двухшагового сценария оплаты5- captureДаПодтверждение авторизации в случае двухшагового сценария оплаты6- reversalНетОтмена платежа (средства расхолдируются практически сразу)7- refundДаВозврат платежа (средства возвращаются в течение 30 дней)20- payoutДаОперация выплаты (OCT)30- statusНетЗапрос статуса операции40- get_cards_by_tokenнетПолучение списка привязанных карт

Выставление счета на qiwi кошелек

Для выставления счета на QIWI Кошелек используется протокол API P2P-счетов. Для авторизации используется токен P2P.

Выставление счета через форму

Простой способ для интеграции. При переходе на форму клиенту автоматически выставляется счет. Параметры счета передаются в открытом виде в ссылке. Далее клиенту отображается форма с выбором способа перевода.

При использовании этого способа нельзя гарантировать, что все счета выставлены вами, в отличие от выставления счета по API.

Данные для тестирования

Для тестирования операций оплаты используются производственные URL сервисов оплаты.

Для каждого нового ТСП в системе создаются merchant_site и по умолчанию для них включается режим тестирования. Также можно запросить переключение в режим тестирования любого своего merchant_site, либо добавление нового merchant_site в режим тестирования через вашего сопровождающего менеджера.

  • В режиме тестирования можно использовать любой номер карты, удовлетворяющий алгоритму Luhn.
  • В режиме тестирования из валют (параметр currency) разрешен только рубль РФ (643).
  • CVV в режиме тестирования может быть любым (любые 3 цифры).

Данные об обработчике уведомлений

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

Так как сейчас используется только один тип хука – вебхук, то в ответе содержится только один объект данных.

Доступ к api

Основной URL-адрес для вызова методов API (если не указано иное):

Доступные для заказа типы карт

Название картыОписаниеcardAlias
QIWI Мастер PrepaidДля оплаты рекламы в сервисах Яндекс.Директ и myTarget“qvc-cpa”
QIWI Мастер DebitНовый дебетовый БИН“qvc-cpa-debit”

Завершение 3ds аутентификации

После успешного прохождения 3DS аутентификации, ТСП необходимо отправить запрос для завершения проверки.

Запрос → put

constbillId='cc961e8d-d4d6-4f02-b737-2297e51fb48e';constfields={amount:1.00,currency:'RUB',comment:'Hello world',expirationDateTime:'2022-03-02T08:44:07 03:00'};qiwiApi.createBill(billId,fields).then(data=>{//do with data});

Запрос доступных счетов

Запрос отображает псевдонимы счетов, доступных для создания в вашем QIWI Кошельке.

Потестировать

Идентификация

Подробнее об идентификации

Идентификация пользователя

Запрос позволяет отправить данные для идентификации вашего QIWI кошелька.

Для получения статуса “Основной” необходимо предоставить следующие данные о пользователе-владельце кошелька:

  • ФИО
  • Серия / Номер паспорта
  • Дата рождения
  • ИНН, СНИЛС или номер полиса ОМС – необязательно.

Для идентификации кошелька вы обязательно должны отправить ФИО, серию/номер паспорта и дату рождения. Если данные прошли проверку, то в ответе будет отображен ваш ИНН и упрощенная идентификация кошелька будет установлена. В случае если данные не прошли проверку, кошелек остается в статусе “Минимальный”.

Информация о транзакции

Запрос используется для получения информации по определенной транзакции из вашей истории платежей.

Потестировать

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


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

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

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

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

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

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

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

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

Как пользоваться api qiwi мастера

Чтобы автоматически управлять картами в составе пакета QIWI Мастер, используйте API. С помощью API вы сможете:

  • Подключать пакет QIWI Мастер
  • Мгновенно выпускать и блокировать виртуальные карты
  • Получать выписки по картам и реквизиты
  • Переименовывать карты

Для настройки API и работы с ним вам потребуются базовые знания знание программирования на языках PHP или Python. Далее мы пошагово расскажем как отправлять запросы и обрабатывать ответы от сервиса QIWI. В примерах мы будем использовать язык программирования PHP. Для удобства скопируйте код к себе в рабочий файл.

Как проверить подпись уведомления

Реализуйте следующие шаги:

  1. Возьмите значения полей из списка в payment.signFields уведомления (в том же порядке) в формате String.
  2. Объедините значения в строку с разделителями |.
  3. Зашифруйте строку п.2 алгоритмом SHA-256 с ключом проверки подписи.
  4. Сравните полученное значение со значением поля hash уведомления.

Пример расшифровки подписи (см. также функцию PHP на вкладке справа):

Как работать с сервисом

  1. Создайте публичный и секретный ключи. Подробнее см. в разделе Методы авторизации.
  2. Реализуйте взаимодействие через API или через вызов формы оплаты счета. Вы можете воспользоваться SDK или готовыми решениями для CMS.
  3. Для получения уведомлений после перевода по счету активируйте их отправку.
  4. Начните принимать платежи с банковских карт или c QIWI Кошельков.

Квитанция платежа

Запрос используется для получения электронной квитанции (чека) по определенной транзакции из вашей истории платежей в формате PDF/JPEG в виде файла или почтовым сообщением на указанный e-mail.

Класс paymentinfo {#payment_info}

Пример ответа с маскированным полем

Класс, описывающий данные платежной транзакции в QIWI Кошельке. Возвращается в ответе на запросы к платежному API.

Коды уведомлений

Код завершенияОписание
0Успех
5Ошибка формата параметров запроса
13Ошибка соединения с базой данных
150Ошибка проверки пароля
151Ошибка проверки подписи
300Ошибка связи с сервером

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


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

Комиссионные тарифы {#rates}

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

Курсы валют {#ccy}

Запрос возвращает текущие курсы и кросс-курсы валют КИВИ Банка.

Лимиты qiwi кошелька

Запрос возвращает текущие уровни лимитов по операциям в вашем QIWI кошельке. Лимиты действуют как ограничения на сумму определенных операций.

Методы авторизации в сервисе

constQiwiBillPaymentsAPI=require('@qiwi/bill-payments-node-js-sdk');constSECRET_KEY='eyJ2ZXJzaW9uIjoicmVzdF92MyIsImRhdGEiOnsibWVyY2hhbnRfaWQiOjUyNjgxMiwiYXBpX3VzZXJfaWQiOjcxNjI2MTk3LCJzZWNyZXQiOiJmZjBiZmJiM2UxYzc0MjY3YjIyZDIzOGYzMDBkNDhlYjhiNTnONPININONPN090MTg5Z**********************';constqiwiApi=newQiwiBillPaymentsAPI(SECRET_KEY);
--header "Authorization: Bearer MjMyNDQxMjM6NDUzRmRnZDQ0M*******"
StringsecretKey="eyJ2ZXJzaW9uIjoicmVzdF92MyIsImRhdGEiOnsibWVyY2hhbnRfaWQiOjUyNjgxMiwiYXBpX3VzZXJfaWQiOjcxNjI2MTk3LCJzZWNyZXQiOiJmZjBiZmJiM2UxYzc0MjY3YjIyZDIzOGYzMDBkNDhlYjhiNTnONPININONPN090MTg5Z**********************";BillPaymentClientclient=BillPaymentClientFactory.createDefault(secretKey);
varsecretKey="eyJ2ZXJzaW9uIjoicmVzdF92MyIsImRhdGEiOnsibWVyY2hhbnRfaWQiOjUyNjgxMiwiYXBpX3VzZXJfaWQiOjcxNjI2MTk3LCJzZWNyZXQiOiJmZjBiZmJiM2UxYzc0MjY3YjIyZDIzOGYzMDBkNDhlYjhiNTnONPININONPN090MTg5Z**********************";varclient=BillPaymentClientFactory.createDefault(secretKey);

Для авторизации запросов вам понадобятся ключи:

Чтобы выпустить пару ключей <SECRET_KEY> и <PUBLIC_KEY>:

Методы проведения оплаты

Возможны два сценария платежа:

Как правило, двухшаговый сценарий используется в том случае, когда ТСП проводит проверку возможности оказания услуги после факта оплаты. Т.к. после операции auth и до совершения операции capture можно сделать операцию reversal, которая не является финансовой.

Для операции sale также можно делать операцию reversal, но только до конца дня и не для всех банков-эквайеров. Подробности надо уточнять у вашего сопровождающего менеджера.

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

С точки зрения наличия полей в запросе, все операции идентичны. Отличаются лишь коды операций.

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

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

одного месяца

180 дней (выпуск подтверждается SMS-сообщением). По просьбе пользователей в новой версии OAuth 2.0 мы также открыли возможность выбора прав доступа для токена. К примеру, если требуется запросить баланс или получить историю платежей, токену даются права только на чтение. Всего доступно четыре группы прав доступа:

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

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

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

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

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

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

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

Оплата других услуг {#services}

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

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

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

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

Оплата счета {#paywallet_invoice}

Выполнение безусловной оплаты счета без SMS-подтверждения.

Отмена неоплаченного счета

Метод для отмены неоплаченного клиентом счета до наступления предельной даты оплаты счета (см. параметрlifetime).

constbill_id='99111-ABCD-1-2-1';qiwiRestApi.cancel(bill_id).then(data=>{//do with data});

Отправка квитанции

Потестировать

Отправка тестового уведомления

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

Параметр

Параметр передается в JSON-теле запроса:

Перевод на карты банков казахстана {#cards-kzt}

Запрос выполняет денежный перевод на карты Visa или MasterCard, выпущенные банками Казахстана.

Перевод на карты банков рф и зарубежных банков {#cards-rf-and-foreign}

Запрос выполняет денежный перевод на карты платежных систем Visa, MasterCard или МИР.

Платежи на карты Visa и MasterCard, выпущенные иностранными банками, временно остановлены по причине ограничений со стороны платежной системы.

Перевод по номеру карты

Запрос выполняет денежный перевод на карты физических лиц, выпущенные российскими банками.

Перевод по номеру счета/договора {#money-order-bank-account}

Запрос выполняет денежный перевод на счета физических лиц, открытые в российских банках. Возможен обычный перевод или перевод с использованием сервиса срочного перевода (исполнение в течение часа, с 9:00 до 19:30).

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

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

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

Передача чека (54-фз)

Чек передается:

  • при перенаправлении на QIWI PAY WPF — в параметре merchant_cheque;
  • при работе через QIWI PAY API — в параметре cheque операций auth, capture, sale.

JSONструктура чека должна быть сжата алгоритмом DEFLATE, описанным в RFC1951, а после представлена в ZLIB формате, описанным в RFC1950. Далее результат кодируется в BASE64 и передается в соответствующем параметре.

Персонализация

Вы можете настроить персонализированную форму оплаты: изменить свое имя на название магазина и настроить цвет фона и кнопок.

Пример персонализированной формы оплаты:

Чтобы настроить внешний вид формы оплаты:

  1. Авторизуйтесь в Личном кабинете P2P.
  2. Перейдите в раздел Форма приема переводов. Код вашего стиля для переменной themeCode (указывается в запросах API и вызовах SDK, см. далее) выделен жирным шрифтом в блоке серого цвета. Значение themeCode индивидуально для разных QIWI кошельков.

    alt_text

  3. Нажмите кнопку Настроить и выполните настройку формы.
  4. Нажмите кнопку Сохранить.

Пример передачи параметра при вызове платежной формы

Платеж по свободным реквизитам {#freepay}

Оплата услуг коммерческих организаций по их банковским реквизитам.

Подпись запроса

publicStringgenerateSignature(Stringdata,Stringsecret){try{byte[]secretBytes=secret.getBytes("UTF-8");Machmac=Mac.getInstance("HmacSHA256");SecretKeySpecsecretKey=newSecretKeySpec(secretBytes,"HmacSHA256");hmac.init(secretKey);byte[]signBytes=hmac.doFinal(data.getBytes("UTF-8"));returnUtils.bytesToHex(signBytes);}catch(NoSuchAlgorithmException|UnsupportedEncodingException|InvalidKeyExceptione){thrownewSignatureException("Cannot calculate signature",e);}}

Для строки параметров { “opcode”:3, “merchant_site”: 555, “amount”: “7.00”, “currency”: 643 }

sign=generateSignature("7.00|643|555|3","secret_key");Output:9c878bfbf9baa30c26c8c6206976fc3ed2c036afeabf352f8a045fe331d42d7e

Поиск провайдера {#provider-search}

Используйте этот запрос для поиска идентификатора провайдера. В запросе указывается список ключевых слов (например, название провайдера), разделенных пробелами.

Получение секретного ключа

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

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

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

Проверка статуса возврата

Метод для проверки текущего статуса операции возврата средств по оплаченному счету.

constbill_id='893794793973';constrefund_id='899343443';qiwiApi.getRefundStatus(bill_id,refund_id).then(data=>{//do with data});

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

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

Регистрация сервера уведомлений

Адрес сервера для уведомлений настраивается в Личном кабинете P2P. При этом выпускается новая пара ключей для авторизации.

  1. Авторизуйтесь в Личном кабинете P2P.
  2. Перейдите на вкладку API и нажмите кнопку Создать пару ключей и настроить. Если вы настраиваете адрес сервера вместе с первичным созданием пары ключей впервые, то нажмите кнопку Настроить.

    p2p API Settings

  3. Укажите название для новой пары ключей.

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

  4. Выделите поле Использовать эту пару ключей для серверных уведомлений об изменении статусов счетов.

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

  5. В поле URL сервера для уведомлений укажите адрес вашего сервера для обработки уведомлений об оплате. Внимание! Сервер должен быть доступен из интернета.
  6. Нажмите кнопку Создать.

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

  7. Замените в настройках ваших приложений ключи для сервиса QIWI P2P на вновь созданные.

Сервер на персональном компьютере

В браузере появится текст: заработало.

Создание баланса

Запрос создает новый счет и баланс в вашем QIWI Кошельке. Список доступных для создания счетов можно получить другим запросом.

Потестировать

Список балансов

Запрос выгружает текущие балансы счетов вашего QIWI Кошелька.

Потестировать

Список карт с реквизитами

Код для вывода номера карты, CVV и даты окончания обслуживания

Список ошибок

  • Признак означает, что при повторном запросе результат не изменится (ошибка не временная, проанализируйте данные запроса или обратитесь в Support).

Список платежей

Запрос выгружает список платежей и пополнений вашего кошелька. Можно использовать фильтр по количеству, ID и дате (интервалу дат) транзакций.

Потестировать

Список счетов

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

Способы взаимодействия

Существует два способа работы с QIWI PAY:

  • QIWI PAY WPF — платежная форма на стороне QIWI. Не требует сложной реализации, но ограничена по функциональности (поддерживает только операции платежа).

  • QIWI PAY API — полнофункциональное API для платежных операций. API использует REST-архитектуру. Параметры передаются методом POST в теле запроса в формате JSON, ответы на запросы также в формате JSON. При этом платежная форма для ввода реквизитов карты реализуется на стороне ТСП.

Статистика платежей

Запрос используется для получения сводной статистики по суммам платежей за указанный период.

Потестировать

Статусы операции возврата

СтатусОписаниеФинальный
processingПлатеж в проведении
successПлатеж проведен
failПлатеж неуспешен

Статусы оплаты счетов

СтатусОписаниеФинальный
waitingСчет выставлен, ожидает оплаты или оплачивается
paidСчет оплачен
rejectedСчет отклонен
unpaidОшибка при проведении оплаты. Счет не оплачен
expiredВремя жизни счета истекло. Счет не оплачен

Статусы транзакции

СтатусНазваниеОписаниеВозможные операции
0InitПройдена базовая верификация данных и начат процесс проведения операции
1DeclinedОперация отклонена
2AuthorizedВыполнена операция авторизации средств (холдирование)capture, reversal
3Captured (Completed)Подтвержденная операцияreversal
4ReconciledПолностью завершенная финансовая операцияrefund
5SettledЗа данную операцию средства будут выплачены ТСПrefund

Схема двухшагового сценария платежа

sequenceDiagram
participant Customer
participant Merchant
participant QiwiPay as QIWI PAY
participant QiwiBank as QIWI Bank
Customer->>Merchant:Отправка данных картыс платежной формы
activate Merchant
Merchant->>QiwiPay:Запросна операцию “auth”
activate QiwiPay
QiwiPay->>QiwiPay:

Модуль борьбыс мошенничеством
rect rgb(237, 243, 255)
Note over Customer, QiwiPay:3-D Secure
QiwiPay->>QiwiPay:Проверка картына участие в 3-D Secure
QiwiPay–>>Merchant:Параметры для перенаправленияплательщика на ACS банка-эмитента
deactivate QiwiPay
Merchant–>>Customer:

Перенаправлениеплательщика на ACS URL
deactivate Merchant
Customer->>Merchant:Возврат с ACSс результатом верификации 3-D Secure
activate Merchant
Merchant->>QiwiPay:Запросна операцию “finish_3ds”
activate QiwiPay
end
QiwiPay->>QiwiBank:

Авторизационный запрос
activate QiwiBank
QiwiBank–>>QiwiPay:Успешная авторизация
deactivate QiwiBank
rect rgb(237, 243, 255)
Note over Customer, QiwiPay:Немедленное уведомление об операции
QiwiPay->>Merchant:Уведомление о результатеоперации (callback)

activate Merchant
Merchant–>>QiwiPay:Подтверждениеполучения уведомления
deactivate Merchant
end
QiwiPay->>Merchant:Результатвыполнения операции
QiwiPay->>Customer:E-mail уведомлениео результате операции
deactivate QiwiPay
Merchant->>Customer:

Страница статусас результатом операции
deactivate Merchant
Note over Merchant:Ожидание запроса на подтверждение авторизации
Merchant–>>QiwiPay:Запросна операцию “capture”
activate Merchant
activate QiwiPay
QiwiPay->>QiwiBank:

Финансовая операцияпо результату авторизации
activate QiwiBank
QiwiBank–>>QiwiPay:Подтверждениефинансовой операции
deactivate QiwiBank
QiwiPay->>Merchant:Уведомление о результатеоперации (callback)
deactivate QiwiPay
deactivate Merchant

Схема одношагового сценария платежа

sequenceDiagram
participant Customer
participant Merchant
participant QiwiPay as QIWI PAY
participant QiwiBank as QIWI Bank
Customer->>Merchant:Отправка данных картыс платежной формы
activate Merchant
Merchant->>QiwiPay:Запросна операцию “sale”
activate QiwiPay
QiwiPay->>QiwiPay:

Модуль борьбыс мошенничеством
rect rgb(237, 243, 255)
Note over Customer, QiwiPay:3-D Secure
QiwiPay->>QiwiPay:Проверка картына участие в 3-D Secure
QiwiPay–>>Merchant:Параметры для перенаправленияплательщика на ACS банка-эмитента
deactivate QiwiPay
Merchant–>>Customer:

Перенаправлениеплательщика на ACS URL
deactivate Merchant
Customer->>Merchant:Возврат с ACSс результатом верификации 3-D Secure
activate Merchant
Merchant->>QiwiPay:Запросна операцию “finish_3ds”
activate QiwiPay
end
QiwiPay->>QiwiBank:

Авторизационный запрос
activate QiwiBank
QiwiBank–>>QiwiPay:Успешная авторизация
QiwiPay->>QiwiBank:Финансовая операцияпо результату авторизации
QiwiBank–>>QiwiPay:Подтверждениефинансовой операции
deactivate QiwiBank
rect rgb(237, 243, 255)

Note over Customer, QiwiPay:Немедленное уведомление об операции
QiwiPay->>Merchant:Уведомление о результатеоперации (callback)
activate Merchant
Merchant–>>QiwiPay:Подтверждениеполучения уведомления
deactivate Merchant
end
QiwiPay->>Merchant:

Технология 3ds

3DS (3-D Secure) — общее название программ Verified By Visa и MasterCard Secure Code от платежных систем Visa и MasterCard соответственно.

Суть программы в проверке подлинности держателя (то есть защита от несанкционированного использования карты) эмитентом перед оплатой. На практике это выглядит так: держатель указывает реквизиты карты, далее открывается сайт эмитента, где держателю предлагается ввести пароль или секретный код (как правило, код отправляется в СМС сообщении). Если код указан правильно, оплата будет проведена. Если нет — отклонена.

Операция покупки может быть проведена через QIWI PAY с использованием технологии 3DS, если по карте необходима 3DS-аутентификация.

Диаграмма функционирования 3DS на примере операции с использованием способа QIWI PAY WPF.

sequenceDiagram
participant Customer
participant Issuer
participant ips as Visa/MC
participant qp as QIWI PAY
participant qb as QIWI Bank
Note over Customer,Issuer: Issuer Domain
Note over ips: Interaction Domain
Note over qp,qb: Acquirer Domain
Customer->>qp:

Отправка данных картыс платежной формы
activate Customer
activate qp
qp->>ips:Отправка VEReqдля проверки карты на участие впрограмме 3-D Secure
activate ips
ips->>Issuer:Запрос в ACSдля проверки карты
activate Issuer
Issuer–>>ips:

Возврат результата проверки (VERes)
deactivate Issuer
ips–>>qp:Возврат результатапроверки (VERes)
deactivate ips
qp->>qp:Генерация PAReqна основании VERes
qp–>>Customer:Перенаправление плательщика с PAReq на ACS URLиз VERes для ввода пароля 3-D Secure
deactivate qp
deactivate Customer
Customer->>Issuer:

Переход плательщика на ACS URL
activate Customer
activate Issuer
Issuer–>>Customer:Отправка одноразовогопароля в SMS
Customer->>Issuer:Ввод одноразового пароля
Issuer->>ips:Отправка данных о результатеаутентификации в ACS
Issuer–>>Customer:

Перенаправление плательщика настраницу QIWI PAY с PARes
deactivate Customer
deactivate Issuer
Customer->>qp:Переход плательщика на QIWI PAY page
activate Customer
activate qp
qp->>qp:Проверка валидности PARes
qp->>qb:Отправкаавторизационного запросас данными из PARes
deactivate qp
deactivate Customer

Типы транзакций

Возможные типы транзакций, возвращаемые в ответе в поле txn_type, указаны в таблице.

ТипНазваниеОписание
1PurchaseОдношаговая операция оплаты
2PurchaseОперация авторизации при двухшаговом сценарии платежа
4ReversalОперация отмены
3RefundОперация возврата
8PayoutОперация выплаты (OCT)
0UnknownНеизвестный тип операции

Уведомления (вебхуки)

Исходящие платежи – платеж в проведении

Уведомления о переводе по счету

Перед началом работы с сервисом уведомлений прочитайте условия по интеграции API уведомлений.

Пулы IP-адресов, с которых сервисы QIWI отправляют уведомления:

  • 79.142.16.0/20
  • 195.189.100.0/22
  • 91.232.230.0/23
  • 91.213.51.0/24

Если ваш сервер обработки уведомлений работает за брандмауэром, необходимо добавить эти IP-адреса в список разрешенных адресов входящих TCP-пакетов.

Уведомления о платежах

Существует два метода доставки уведомлений о платеже:

  • В процессе выполнения платежа, после получения ответа о списании средств, до показа статусной страницы или ответа ТСП (в зависимости от типа взаимодействия).
  • После проведения платежа в фоновом режиме.

Уведомление доставляется на адрес, установленный при подключении мерчанта, или на адрес, переданный в параметре callback_url запроса. Уведомление — это POST-запрос, параметры передаются в теле запроса в формате JSON.

Уведомления об оплате счетов

Уведомление представляет собой POST-запрос. Тело запроса содержит сериализованные данные счета в теле запроса (кодировка UTF-8), и параметр command=bill.

Условия использования

Чтобы подключить на свой сайт сервис приема p2p-переводов для физических лиц, вам необходим QIWI Кошелек со статусом идентификации Основной или Профессиональный. Если у вашего кошелька статус Анонимный, пройдите идентификацию удобным для вас способом:

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

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

Установка баланса по умолчанию

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

Потестировать

Установка и настройка сервера

Пропустите этот шаг если вы знаете, как запустить сервер на локальном компьютере или на хостинге.

Для отправки запросов на API и обработки ответов вам нужно настроить сервер. Разберем, как установить сервер Apache и подготовить его к работе с API на локальном компьютере или арендовать сервер в интернете.

Файл квитанции

Потестировать

Форма для оплаты счета

При выставлении счета через API в ответе присутствует поле payUrl со ссылкой на платежную форму. При перенаправлении по ссылке для оплаты счета к ней можно добавить параметры:

Пример ссылки

Форма оплаты

Провайдер может предложить пользователю немедленно оплатить счет с помощью переадресации на платежную форму.

Шаг 2. подтверждение заказа карты

Код для подтверждения заказа карты в составе пакета QIWI Мастер

Шаг 3. покупка карты

Код для покупки карты

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *