Страница 1 из 1

мой налог

Добавлено: 2019-09-22 12:27:01
serega0295
к примеру я работаю как самозанятый и мне надо выдавать чеки через мой налог , просто в ручную выдавать очень тяжко будет когда много заказов

https://habr.com/ru/post/436656/

мой налог

Добавлено: 2019-09-22 12:44:20
Alex Keda
вкратце изложите чего там?
честно, здоровая портянка, мне её читать некогда.

если просто куда-то отправлять факт оплаты - это в общем-то несложно интегрируется, по примеру Komtet библиотеку напишите и всё

мой налог

Добавлено: 2019-09-24 16:19:00
serega0295
Чтобы быстро продемонстрировать концепт автоматизации используется 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 НПД налоговой.

мой налог

Добавлено: 2019-09-24 17:44:28
Alex Keda
вам на факт успешной оплаты чтоли это дёргать?

мой налог

Добавлено: 2019-09-25 21:38:08
serega0295
да , что бы чек клиенту на email после успешной оплаты уходил

пример чека

Код: Выделить всё

https://lknpd.nalog.ru/api/v1/receipt/503199260777/2004smetz5/print