From 620304a3ea3bfe3f6dd15b064e8162eef2c58be9 Mon Sep 17 00:00:00 2001 From: Anton <1537206@gmail.com> Date: Thu, 8 Apr 2021 17:44:37 +0300 Subject: [PATCH] Initial commit --- qiwi_module.py | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 qiwi_module.py diff --git a/qiwi_module.py b/qiwi_module.py new file mode 100644 index 0000000..fad748d --- /dev/null +++ b/qiwi_module.py @@ -0,0 +1,89 @@ +# Qiwi module v1.00 +# 21/08/2020 +# https://t.me/ssleg © 2020 + +import requests +import logging + +headers = { + 'accept': 'application/json', + 'content-type': 'application/json', + 'Authorization': 'Bearer xxxxxx' # ваш секретный ключ из личного кабинета +} + +url = 'https://api.qiwi.com/partner/bill/v1/bills/' + + +# создание платежа. на входе; сумма (число), номер заказа (текст, идет в комментарий к платежу) +# номер счета (текст, любой уникальный счетчик) и str(datetime) формата 2020-08-21 10:34:22 +# на выходе возвращает URL формы оплаты для клиента. +def create_bill(summa, order_num, bill_num, exp_datetime): + am = {'currency': 'RUB', 'value': '{:.2f}'.format(summa)} + exp = exp_datetime.replace(' ', 'T') + '+03:00' + # персональная форма платежа, может не использоваться + # cust = {'themeCode': 'ваш код формы из личного кабинета'} + + rdata = {'amount': am, 'expirationDateTime': exp, 'comment': order_num} # , 'customFields': cust} + rurl = url + bill_num + + try: + response = requests.put(rurl, json=rdata, headers=headers, timeout=5) + cod = response.status_code + res = response.json() + if cod == 200: + return res.get('payUrl') + else: + levent = 'qiwi server error (create bill). code - ' + str(cod) + ', response - ' + str(res) + logging.error(levent) + return 'error' + + except Exception as e: + levent = 'protocol error (create bill): ' + str(e) + logging.error(levent) + return 'error' + + +# проверка статуса платежа,на входе его номер (текст), на выходе статус из документации. +# можно вызывать 1 раз в секунду и реже. +def bill_status(bill_num): + rurl = url + bill_num + + try: + response = requests.get(rurl, headers=headers, timeout=5) + cod = response.status_code + res = response.json() + if cod == 200: + status = res.get('status') + return status.get('value') + else: + levent = 'qiwi server error (bill status). code - ' + str(cod) + ', response - ' + str(res) + logging.error(levent) + return 'error' + + except Exception as e: + levent = 'protocol error (bill status): ' + str(e) + logging.error(levent) + return 'error' + + +# отмена счета, на входе его номер (текст). +# в случае успеха возвращает REJECTED +def cancel_bill(bill_num): + rurl = url + bill_num + '/reject' + + try: + response = requests.post(rurl, headers=headers, timeout=5) + cod = response.status_code + res = response.json() + if cod == 200: + status = res.get('status') + return status.get('value') + else: + levent = 'qiwi server error (cancel bill). code - ' + str(cod) + ', response - ' + str(res) + logging.error(levent) + return 'error' + + except Exception as e: + levent = 'protocol error (cancel bill): ' + str(e) + logging.error(levent) + return 'error'