- pyQiwiP2P
- Миграция с первой версии:
- ⚠️ Важное уведомление [2023.04.05]
- А как пользоваться
- Что есть?
- И всё?
- Подробности проекта
- Ссылки проекта
- Документация PyQiwiP2P приветствует тебя!¶
- Зависимости¶
- Установка¶
- Saved searches
- Use saved searches to filter your results more quickly
- Urmipie/qiwi-p2p-api
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
pyQiwiP2P
Есть типа документация, но в ней есть и косячки, поэтому, если найдёте таковой, обязательно сообщите мне. Буду искренне рад. Правда. Спасибо.
Миграция с первой версии:
- Свойство Bill.actual было удалено из-за PEP8
- QiwiNotify по умолчанию выполняет только функцию по первому подошедшему хендлеру
⚠️ Важное уведомление [2023.04.05]
Выпуск ключей для приёма P2P платежей через сайт официально закрыт, но метод, заявленный в документации QIWI, продолжает работать, хоть и с несколько изменённой авторизацией.
- Переходим на https://qiwi.com/p2p-admin
- Авторизуемся в свой Qiwi аккаунт
- Открываем консоль браузера. Как?
- Вставляем код из первого блока и нажимаем enter
- Вставляем код из второго блока и нажимаем enter
- Если прошло успешно:
- появится строка «Private Key: «
- копируем ключ, и используем по назначению
- Если что-то пошло не так:
- смириться, что накосячили
- меня не тревожить
- мне в личку не писать
- кусаюсь и кидаю в чс
С июня Qiwi начала блокировать кошельки, если пользователь открыл страницу оплаты «напрямую», тем самым не передав заголовок referer.
Это случается при открытии ссылки:
- из мессенджера
- из смс
- из письма
- из адресной строки
- из браузера с повышенным режимом приватности или расширениями для приватного просмотра
Для обхода всех проблем, кроме последней (она не решается), к объекту Bill был добавлен атрибут Bill.alt_url , который предоставляет ссылку для перенаправления на страницу оплаты через специальную страницу-прокладу, добавляющую этот самый referer.
Страница предоставлена мною, но её можно поднять на своём сервере с помощью 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
- Скачать этот репозиторий
- Распаковать в папке, где находится исполняемый скрипт или в папке с модулями (что-то вроде $PYTHONPATH$\Lib\site-packages )
- 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 | Номер телефона пользователя (в международном формате) |
customer.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