Сообщение serega0295 » 2019-09-24 16:19:00
Чтобы быстро продемонстрировать концепт автоматизации используется Python 3.7.2 с библиотекой requests:
Код: Выделить всё
import requests
import datetime
import shutil
TIME_OFFSET = '+03:00'
DEVICE_ID = ''
REFRESH_TOKEN = ''
API_PROVIDER = 'https://lknpd.nalog.ru/api/v1/'
TOKEN = ''
INN = ''
def DO(method, params):
headers = {"Authorization":"Bearer "+TOKEN} if TOKEN != '' else {}
r = requests.post(API_PROVIDER+method, json=params, headers=headers)
print(r.text)
return r.json()
def get_token():
reqparam = {
"deviceInfo": {
"appVersion": "1.0.0",
"metaDetails": {
"browser": "",
"browserVersion": "",
"os": "android"
},
"sourceDeviceId": DEVICE_ID,
"sourceType": "android"
},
"refreshToken": REFRESH_TOKEN
}
res = DO('auth/token', reqparam)
# TODO: сохранять tokenExpireIn и не вызывать авторизацию каждый раз
return res['token']
# TODO: научиться нормально программировать
TOKEN = get_token()
def new_transaction(service, amount):
trans_time = datetime.datetime.now().isoformat()[:-3]+TIME_OFFSET
reqparam = {
"ignoreMaxTotalIncomeRestriction": False,
"operationTime": trans_time,
"paymentType": "CASH",
"requestTime": trans_time,
"services": [
{
"amount": amount,
"name": service,
"quantity": 1
}
],
"totalAmount": amount
}
res = DO('income', reqparam)
return res['approvedReceiptUuid']
def get_receipt(receipt_uuid):
headers = {"Authorization":"Bearer "+TOKEN}
r = requests.get(
'https://lknpd.nalog.ru/api/v1/receipt/'+INN+"/"+receipt_uuid+"/print",
stream=True,
headers=headers
)
with open('receipt.png', 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
if __name__ == '__main__':
rec = new_transaction('Тестовая услуга', '1.00')
get_receipt(rec)
Подставьте необходимые значения — скрипт сработает, как надо. Можете добавлять обработчики ошибок и улучшать доставку — изложенный выше скрипт лишь показывает принцип работы с API НПД налоговой.
Чтобы быстро продемонстрировать концепт автоматизации используется Python 3.7.2 с библиотекой requests:
[code]import requests
import datetime
import shutil
TIME_OFFSET = '+03:00'
DEVICE_ID = ''
REFRESH_TOKEN = ''
API_PROVIDER = 'https://lknpd.nalog.ru/api/v1/'
TOKEN = ''
INN = ''
def DO(method, params):
headers = {"Authorization":"Bearer "+TOKEN} if TOKEN != '' else {}
r = requests.post(API_PROVIDER+method, json=params, headers=headers)
print(r.text)
return r.json()
def get_token():
reqparam = {
"deviceInfo": {
"appVersion": "1.0.0",
"metaDetails": {
"browser": "",
"browserVersion": "",
"os": "android"
},
"sourceDeviceId": DEVICE_ID,
"sourceType": "android"
},
"refreshToken": REFRESH_TOKEN
}
res = DO('auth/token', reqparam)
# TODO: сохранять tokenExpireIn и не вызывать авторизацию каждый раз
return res['token']
# TODO: научиться нормально программировать
TOKEN = get_token()
def new_transaction(service, amount):
trans_time = datetime.datetime.now().isoformat()[:-3]+TIME_OFFSET
reqparam = {
"ignoreMaxTotalIncomeRestriction": False,
"operationTime": trans_time,
"paymentType": "CASH",
"requestTime": trans_time,
"services": [
{
"amount": amount,
"name": service,
"quantity": 1
}
],
"totalAmount": amount
}
res = DO('income', reqparam)
return res['approvedReceiptUuid']
def get_receipt(receipt_uuid):
headers = {"Authorization":"Bearer "+TOKEN}
r = requests.get(
'https://lknpd.nalog.ru/api/v1/receipt/'+INN+"/"+receipt_uuid+"/print",
stream=True,
headers=headers
)
with open('receipt.png', 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
if __name__ == '__main__':
rec = new_transaction('Тестовая услуга', '1.00')
get_receipt(rec)[/code]
Подставьте необходимые значения — скрипт сработает, как надо. Можете добавлять обработчики ошибок и улучшать доставку — изложенный выше скрипт лишь показывает принцип работы с API НПД налоговой.