Исходный код pyqiwi

"""
Python Qiwi API Wrapper 2.0
by mostm

See pyQiwi Documentation: pyqiwi.readthedocs.io
"""
__title__ = 'pyQiwi'
__version__ = "2.0"
__author__ = "mostm"
__license__ = 'MIT'
__copyright__ = 'Copyright 2017 mostm'

version_info = tuple(map(int, __version__.split('.')))

import datetime
import logging
import sys
from functools import partial

logger = logging.getLogger(__name__)
formatter = logging.Formatter(
    '%(asctime)s (%(filename)s:%(lineno)d %(threadName)s) %(levelname)s - %(name)s: "%(message)s"'
)

console_output_handler = logging.StreamHandler(sys.stderr)
console_output_handler.setFormatter(formatter)
logger.addHandler(console_output_handler)

logger.setLevel(logging.ERROR)
ad = True

from . import exceptions, types, apihelper


[документация]class Wallet: """ Visa QIWI Кошелек Parameters ---------- token : str `Ключ Qiwi API`_ пользователя number : Optional[str] Номер для указанного кошелька По умолчанию - ``None`` Если не указан, статистика и история работать не будет contract_info : Optional[bool] Логический признак выгрузки данных о кошельке пользователя По умолчанию - ``True`` auth_info : Optional[bool] Логический признак выгрузки настроек авторизации пользователя По умолчанию - ``True`` user_info : Optional[bool] Логический признак выгрузки прочих пользовательских данных По умолчанию - ``True`` Attributes ----------- accounts : iterable of :class:`Account <pyqiwi.types.Account>` Все доступные методы оплаты для кошелька profile : :class:`Profile <pyqiwi.types.Profile>` Профиль пользователя """ def __init__(self, token, number=None, contract_info=True, auth_info=True, user_info=True): self.number = number self.token = token self.auth_info_enabled = auth_info self.contract_info_enabled = contract_info self.user_info_enabled = user_info self.get_commission = partial(get_commission, self.token) self.headers = {'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': "Bearer {0}".format(self.token)} def __str__(self): return '<Wallet(number={0}, token={1})>'.format(self.number, self.token) @property def accounts(self): result_json = apihelper.funding_sources(self.token) accounts = [] for account in result_json['accounts']: accounts.append(types.Account.de_json(account)) return accounts
[документация] def balance(self, currency): """ Баланс Visa QIWI Кошелька Parameters ---------- currency : int ID валюты в ``number-3 ISO-4217`` Например, ``643`` для российского рубля Returns ------- float Баланс кошелька """ for account in self.accounts: if account.currency == currency: return account.balance.get('amount')
@property def profile(self): result_json = apihelper.person_profile(self.token, self.auth_info_enabled, self.contract_info_enabled, self.user_info_enabled) return types.Profile.de_json(result_json)
[документация] def history(self, rows=20, operation=None, start_date=None, end_date=None, sources=None): """ История платежей Warning ------- Максимальная интенсивность запросов истории платежей - не более 100 запросов в минуту с одного IP-адреса. При превышении доступ к API блокируется на 5 минут. Parameters ---------- rows : Optional[int] Число платежей в ответе, для разбивки отчета на части. От 1 до 50, по умолчанию 20. operation : Optional[str] Тип операций в отчете, для отбора Варианты: ALL, IN, OUT, QIWI_CARD По умолчанию - ALL start_date : Optional[datetime.datetime] Начальная дата поиска платежей end_date : Optional[datetime.datetime] Конечная дата поиска платежей sources : Optional[list] Источники платежа, для отбора Варианты: QW_RUB, QW_USD, QW_EUR, CARD, MK По умолчанию - все указанные Note ---- Если вы хотите использовать startDate или endDate, вы должны указать оба параметра Максимальный допустимый интервал между startDate и endDate - 90 календарных дней. Returns ------- :class:`Transaction <pyqiwi.types.Transaction>` Транзакция """ result_json = apihelper.payment_history(self.token, self.number, rows, operation=operation, start_date=start_date, end_date=end_date, sources=sources) transactions = [] for transaction in result_json['data']: transactions.append(types.Transaction.de_json(transaction)) return transactions
[документация] def stat(self, start_date=None, end_date=None, operation=None, sources=None): """ Статистика платежей Note ---- Изначально берется статистика с начала месяца Parameters ---------- operation : Optional[str] Тип операций в отчете, для отбора Варианты: ALL, IN, OUT, QIWI_CARD По умолчанию - ALL start_date : Optional[datetime.datetime] Начальная дата поиска платежей end_date : Optional[datetime.datetime] Конечная дата поиска платежей sources : Optional[list] Источники платежа, для отбора Варианты: QW_RUB, QW_USD, QW_EUR, CARD, MK По умолчанию - все указанные Returns ------- :class:`Statistics <pyqiwi.types.Statistics>` Статистика """ if start_date: pass else: start_date = datetime.datetime.utcnow() start_date = start_date.replace(day=1, hour=0, minute=0, second=1) if end_date: pass else: end_date = datetime.datetime.utcnow() + datetime.timedelta(hours=3) result_json = apihelper.total_payment_history(self.token, self.number, start_date, end_date, operation=operation, sources=sources) return types.Statistics.de_json(result_json)
[документация] def commission(self, pid, recipient, amount): """ Расчет комиссии для платежа Parameters ---------- pid : str Идентификатор провайдера recipient : str Номер телефона (с международным префиксом) или номер карты/счета получателя В зависимости от провайдера amount : float/int Сумма платежа Положительное число, округленное до 2 знаков после десятичной точки. При большем числе знаков значение будет округлено до копеек в меньшую сторону. Returns ------- :class:`OnlineCommission <pyqiwi.types.OnlineCommission>` Комиссия для платежа """ result_json = apihelper.online_commission(self.token, recipient, pid, amount) return types.OnlineCommission.de_json(result_json)
[документация] def send(self, pid, recipient, amount, comment=None, fields=None): """ Отправить платеж Parameters ---------- pid : str Идентификатор провайдера recipient : str Номер телефона (с международным префиксом) или номер карты/счета получателя В зависимости от провайдера amount : float/int Сумма платежа Положительное число, округленное до 2 знаков после десятичной точки. При большем числе знаков значение будет округлено до копеек в меньшую сторону. comment : Optional[str] Комментарий к платежу fields : dict Ручное добавление dict'а в платежи. Требуется для специфичных платежей Например, перевод на счет в банке Returns ------- :class:`Payment <pyqiwi.types.Payment>` Платеж """ result_json = apihelper.payments(self.token, pid, amount, recipient, comment=comment, fields=fields) return types.Payment.de_json(result_json)
def get_commission(token, pid): """ Получение стандартной комиссии Parameters ---------- token : str `Ключ Qiwi API`_ pid : str Идентификатор провайдера Returns ------- :class:`Commission <pyqiwi.types.Commission>` Комиссия для платежа """ result_json = apihelper.local_commission(token, pid) return types.Commission.de_json(result_json)