qiwi_module/qiwi_module.py

90 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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