Skip to content

Reverse API, возвращающее возможность использования QIWI API. Проводим платежи и получаем данные из ЛК как раньше!

License

Notifications You must be signed in to change notification settings

LukasAndreano/qiwi-reverse-api

Repository files navigation

🥝 QIWI Reverse API

Что это и зачем?

С недавних пор QIWI закрыли возможность получения OAuth-токенов:

Мы остановили выпуск OAuth-токенов. Приносим извинения за доставленные неудобства.

Источник: developer.qiwi.com/ru/qiwi-wallet-personal

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

Как происходит получение токена?

Под капотом puppeteer, puppeteer-extra-plugin-stealth и puppeteer-extra.

Запускаем браузер, входим, достаем параметр из куки, а тажке токен из localstorage.

Начало работы

Склонируйте репозиторий в нужную вам директорию:

git clone https://github.com/LukasAndreano/qiwi-reverse-api.git <name>

Установите зависимости:

cd <name>
yarn

Пропишите правильные доступы к БД, создав файл .env (он не идет в GIT, игнорируется), используя env.example. После чего запустите сервинг:

yarn dev

Todo

  • Авто-деплой на локальный Docker Registry
  • Написать автотесты

Методы API

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

http://localhost:3000/docs

Логин и пароль для входа в Swagger: devs (если не указан иной)

Однако, дополнительно дублирую:

/auth POST

{
  "phone": "79999999999",
  "password": "YourPassword"
}

Вернет:

{
  "status": true,
  "statusCode": 200,
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MywidHlwZSI6ImFjY2Vzc190b2tlbiIsImlhdCI6MTY5OTg4Mjg5OSwiZXhwIjoxNjk5OTY5Mjk5fQ.R0njmshiqkzZWQNObJtRw6RzCfC7DHNsoJiOnoZVHM0",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImE3NTA5YjMxLWVjMDAtNDlhZi1hZDhmLWExMTExNmE2NGE0MCIsInVzZXJfaWQiOjMsInR5cGUiOiJyZWZyZXNoX3Rva2VuIiwiaWF0IjoxNjk5ODgyODk5LCJleHAiOjE3MDI0NzQ4OTl9.rkWCHDWlR-m_-Pqh4F0Grw3HNpTlazTBVimu-sKwdpY"
  }
}

Время жизни access_token - 1 день, refresh_token - 30 дней.

/auth/refresh POST

body:

{
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImE3NTA5YjMxLWVjMDAtNDlhZi1hZDhmLWExMTExNmE2NGE0MCIsInVzZXJfaWQiOjMsInR5cGUiOiJyZWZyZXNoX3Rva2VuIiwiaWF0IjoxNjk5ODgyODk5LCJleHAiOjE3MDI0NzQ4OTl9.rkWCHDWlR-m_-Pqh4F0Grw3HNpTlazTBVimu-sKwdpY"
}

Вернет:

{
  "status": true,
  "statusCode": 200,
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MywidHlwZSI6ImFjY2Vzc190b2tlbiIsImlhdCI6MTY5OTg4Mjg5OSwiZXhwIjoxNjk5OTY5Mjk5fQ.R0njmshiqkzZWQNObJtRw6RzCfC7DHNsoJiOnoZVHM0",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImE3NTA5YjMxLWVjMDAtNDlhZi1hZDhmLWExMTExNmE2NGE0MCIsInVzZXJfaWQiOjMsInR5cGUiOiJyZWZyZXNoX3Rva2VuIiwiaWF0IjoxNjk5ODgyODk5LCJleHAiOjE3MDI0NzQ4OTl9.rkWCHDWlR-m_-Pqh4F0Grw3HNpTlazTBVimu-sKwdpY"
  }
}

/request POST

body:

{
  "method": "GET",
  "endpoint": "/payment-history/v2/persons/79999999999/payments",
  "params": {
    "rows": 10,
    "operation": "IN"
  }
}

Ответ (изменен в целях безопасности):

{
  "status": true,
  "statusCode": 201,
  "data": {
    "data": [
      {
        "txnId": 0,
        "personId": 0,
        "date": "2022-10-13T14:45:27+03:00",
        "errorCode": 0,
        "error": null,
        "status": "SUCCESS",
        "type": "IN",
        "statusText": "Success",
        "trmTxnId": "0",
        "account": "0",
        "sum": {
          "amount": 1000,
          "currency": 398
        },
        "commission": {
          "amount": 0,
          "currency": 398
        },
        "total": {
          "amount": 190000,
          "currency": 398
        },
        "provider": {
          "id": 4,
          "shortName": "Платеж с терминала",
          "longName": "Платеж с терминала",
          "logoUrl": null,
          "description": null,
          "keys": null,
          "siteUrl": null,
          "extras": []
        },
        "source": {
          "id": 99,
          "shortName": "Перевод на QIWI Кошелек",
          "longName": null,
          "logoUrl": "https://static.qiwi.com/img/providers/logoBig/99_l.png",
          "description": null,
          "keys": "пополнить, перевести, qiwi, кошелек, оплатить, онлайн, оплата, счет, способ, услуга, перевод",
          "siteUrl": "https://www.qiwi.com",
          "extras": [
            {
              "key": "seo_description",
              "value": "Пополнение QIWI Кошелька банковской картой без комиссии от 2000 руб., со счета мобильного телефона или наличными через QIWI Терминалы. Оплачивать услуги стало проще."
            },
            {
              "key": "seo_title",
              "value": "Пополнить QIWI Кошелек: с банковской карты, с баланса телефона, через QIWI Кошелек"
            }
          ]
        },
        "comment": null,
        "currencyRate": 1,
        "paymentExtras": [],
        "features": {
          "chequeReady": false,
          "bankDocumentReady": false,
          "regularPaymentEnabled": false,
          "bankDocumentAvailable": false,
          "repeatPaymentEnabled": false,
          "favoritePaymentEnabled": false,
          "chatAvailable": false,
          "greetingCardAttached": false
        },
        "serviceExtras": {},
        "view": {
          "title": "Платеж с терминала",
          "account": "0"
        }
      }
    ],
    "nextTxnId": 0,
    "nextTxnDate": "2022-10-13T14:45:27+03:00"
  }
}

Если метод GET и имеет query параметры, то необходимо их передавать в params, как и в случае с body

About

Reverse API, возвращающее возможность использования QIWI API. Проводим платежи и получаем данные из ЛК как раньше!

Topics

Resources

License

Stars

Watchers

Forks