Qiwi api p2p python

pyQiwiP2P

Есть типа документация, но в ней есть и косячки, поэтому, если найдёте таковой, обязательно сообщите мне. Буду искренне рад. Правда. Спасибо.

Миграция с первой версии:

  1. Свойство Bill.actual было удалено из-за PEP8
  2. QiwiNotify по умолчанию выполняет только функцию по первому подошедшему хендлеру

⚠️ Важное уведомление [2023.04.05]

Выпуск ключей для приёма P2P платежей через сайт официально закрыт, но метод, заявленный в документации QIWI, продолжает работать, хоть и с несколько изменённой авторизацией.

  1. Переходим на https://qiwi.com/p2p-admin
  2. Авторизуемся в свой Qiwi аккаунт
  3. Открываем консоль браузера. Как?
  4. Вставляем код из первого блока и нажимаем enter
  5. Вставляем код из второго блока и нажимаем enter
  6. Если прошло успешно:
    • появится строка «Private Key: «
    • копируем ключ, и используем по назначению
  7. Если что-то пошло не так:
    • смириться, что накосячили
    • меня не тревожить
    • мне в личку не писать
    • кусаюсь и кидаю в чс

С июня Qiwi начала блокировать кошельки, если пользователь открыл страницу оплаты «напрямую», тем самым не передав заголовок referer.

Это случается при открытии ссылки:

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

Для обхода всех проблем, кроме последней (она не решается), к объекту Bill был добавлен атрибут Bill.alt_url , который предоставляет ссылку для перенаправления на страницу оплаты через специальную страницу-прокладу, добавляющую этот самый referer.

Читайте также:  Все для блогов html

Страница предоставлена мною, но её можно поднять на своём сервере с помощью docker-контейнера.

  • Исходники: Github
  • Образ контейнера: ghcr.io/whiteapfel/pyqiwip2p:p2proxy
  • Запуск: docker run -p 3600:3600 -e QP2P_DOMAIN=’example.com’ -d ghcr.io/whiteapfel/pyqiwip2p:p2proxy
  • Свой домен в клиенте: p2p = AioQiwiP2P(PrivKey, alt=»example.com»)

А как пользоваться

Что есть?

Есть сам класс QiwiP2P, который обладает тремя инструментами: для выставления, проверки и закрытия платежа (счёта).

Могём. Причём примерно так же.

И всё?

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

Внимание! Для работы будет необходим проксирующий сервер (например, Nginx) с доверенным SSL-сертификатом. Да. Подробнее про требования к проксирующему серверу в документации Qiwi

А эта шайтан-машина нужна для захендлирования функций на события. Она не готова самостоятельно контактировать с внешним миром. Пожалей её.

Запросы сервер по умолчанию принимает на 8099 порту, его можно изменить, и только на /qiwi_notify — изменить нельзя.

Да есть. Причём хендлить функции можно и асинхронные, и синхронные.

Для порта 12345 (как в примерах выше) будет:

В таком случае при генерации ключей API на https://qiwi.com/p2p-admin/transfers/api нужно будет указать https://qiwinotify.domain.com/superSecretQiwiURI в качестве URL для уведомлений

P.S. за неприходящие от Qiwi запросы ответственность не несу, как и за приходящие, кстати, тоже. Если запроса от Qiwi не было, то пишите им в поддержку @qiwi_api_help_bot

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

Ссылки проекта

Источник

Документация PyQiwiP2P приветствует тебя!¶

С июня Qiwi начала блокировать кошельки, если пользователь открыл страницу оплаты «напрямую», тем самым не передав заголовок referer.

Это случается при открытии ссылки:

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

Для обхода всех проблем, кроме последней (она не решается), к объекту Bill был добавлен атрибут Bill.alt_url , который предоставляет ссылку для перенаправления на страницу оплаты через специальную страницу-прокладу, добавляющую этот самый referer.

Страница предоставлена мною, но её можно поднять на своём сервере с помощью docker-контейнера.

  • Исходники: Github
  • Образ контейнера: ghcr.io/whiteapfel/pyqiwip2p:p2proxy
  • Запуск: docker run -p 3600:3600 -d ghcr.io/whiteapfel/pyqiwip2p:p2proxy
  • Свой домен в клиенте: p2p = AioQiwiP2P(PrivKey, alt=»example.com»)

Зависимости¶

setuptools>=63.1.0 phonenumbers>=8.12.15 email_validator>=1.2.1 typing>=3.7.4.3 Hypercorn>=0.11.2 starlette>=0.19.0 httpx>=0.23.0 pydantic>=1.9.1 validators>=0.20.0 ipaddress~=1.0.23 loguru>=0.6.0 python-dotenv>=0.20.0 pytest>=7.1.2 CherryPy>=18.7.0 response-report~=1.1.0 

Установка¶

python3 -m pip install --update pyqiwip2p 
git clone https://github.com/WhiteApfel/pyQiwiP2P cd pyQiwiP2P python setup.py install 

© Copyright 2020-2022, WhiteApfel Revision c31452dd .

Versions latest stable Downloads On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Simple Python SDK for p2p Qiwi API

Urmipie/qiwi-p2p-api

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Простое Python SDK для p2p Qiwi API Параметры функций, кроме lifetime в оплате через форму, идентичны параметрам из официальной документации QIWi p2p, но изменены для соответствия PEP. Так billId переименовано в bill_id, а все параметры с *DateTime переименованы в *_datetime

  1. Скачать этот репозиторий
  2. Распаковать в папке, где находится исполняемый скрипт или в папке с модулями (что-то вроде $PYTHONPATH$\Lib\site-packages )
  3. pip install -r requirements.txt

Блокировка кошелька из-за referer

QIWI требует, чтобы при переходе по ссылке указывался referer. Если вы передаёте ссылки через мессенджеры или соцсети, вероятнее всего, этот параметр будет указан (по крайней мере, оф. приложения VK и Telegram однозначно оставляют его). Подробнее можете почитать тут.

Создание счёта и печать ссылки на него

from qiwip2py import QiwiP2P from datetime import timedelta qiwi_p2p = QiwiP2P(secret_key=SECRET_KEY) bill = qiwi_p2p.create_bill(bill_id='test', amount=1.99, custom_fields='themeCode': THEME_CODE>, expiration_datetime=timedelta(hours=3)) print(bill.pay_url) # и если требуется ссылка на форму, а не создание счёта через API qiwi_p2p = QiwiP2P(public_key=PUBLIC_KEY) bill = qiwi_p2p.create_bill(bill_id='test2', amount=1.99, custom_fields='themeCode': THEME_CODE>, expiration_datetime=timedelta(hours=3), success_url='http://random.cat', return_pay_link=True) print(bill)

Проверка существования счёта

bill = qiwi_p2p.get_bill('test') if bill: print(f'Счёт на bill.amount_value> bill.amount["currency"]> существует') else: print('Счета не существует')

При создании можно не задавать какой-то из ключей, если его использование не планируется, однако, при использовании метода, для которого этот ключ нужен, будет возвращено Assertion Error или AttributeError, если секретный ключ неверен. Во всех случаях, кроме оплаты через форму, используется секретный ключ.

Во все методы можно передать иные именованные аргументы, вроде proxy, и те передадутся в requests.request

Если return_pay_link == False или не указан, то создаст счёт и вернёт то же самое, что и QiwiP2P.get_bill() с созданным bill_id. Иначе вернёт url формы оплаты. В этом случае требуется публичный, а не секретный ключ

Таблица параметров и соответствия с Qiwi p2p

Параметр Через API Через форму Описание
bill_id передаётся в url billId Уникальный идентификатор выставляемого счета в вашей системе
amount amount.value amount Сумма, на которую выставляется счет, округленная в меньшую сторону до 2 десятичных знаков
amount_currency amount.currency недоступно. Только через RUB Валюта суммы счета. Возможные значения: RUB — рубли (по умолчанию), KZT — тенге
phone customer.phone phone Номер телефона пользователя (в международном формате)
email customer.email email E-mail пользователя
account customer.account account Идентификатор пользователя в вашей системе
comment comment comment Комментарий к счету (Виден пользователю при оплате)
expiration_datetime expirationDateTime lifetime datetime.timedelta промежуток, который доступен счёт
custom_fields customFields customFields dict с дополнительными полями (themeCode, paySourcesFilter, свои поля)
success_url недоступно successUrl URL для переадресации в случае успешного перевода
return_pay_link Если True, возвращает строку с ссылкой на форму, вместо создания счёта и возвращения Bill

Все методы, кроме create_bill(return_pay_link=True) возвращают один из этих двух объектов, кроме случаев с неуказанным или неверным секретным ключом:

Атрибут QIWI Тип Описание
site_id siteId str siteId
bill_id billId
amount amount dict Данные о сумме счета
amount_value amount.value float Сумма счета
status status dict Данные о статусе счета
status_value status.value str: ‘WAITING’, ‘PAID’, ‘REJECTED’ или ‘EXPIRED’ Статус счёта
costumer customer dict Идентификаторы пользователя
custom_fields customFields dict строковые данные, переданные вами
comment comment str Комментарий к счёту
creation_datetime creationDateTime datetime.datetime Системная дата создания счета
expiration_datetime expirationDateTime datetime.datetime Срок действия созданной формы для перевода
pay_url payUrl str Ссылка для переадресации пользователя на созданную форму
json dict Преобразованный в dict json из ответа Qiwi

Объект, возвращаемый при коде, отличном от 200

  • status_code: status_code: int — код ошибки
  • json: dict — Преобразованный в dict json из ответа Qiwi
  • service_name
  • error_code
  • description
  • user_message
  • datetime
  • trace_id

Если вы почему-то столкнулись с какими-то проблемами, но почему-то не хотите открыть issues или же просто желаете что-то написать, можете достать меня в telegram или VK

Источник

Оцените статью