90 lines
3.3 KiB
Python
90 lines
3.3 KiB
Python
# 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'
|