Initial commit
commit
620304a3ea
|
@ -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'
|
Loading…
Reference in New Issue