# 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'