自雇人士的自动化:如何将税收与IT项目集成

从2019年1月1日起,俄罗斯联邦的四个组成实体(莫斯科,莫斯科和卡卢加地区以及of斯坦共和国)通过了一项法律,引入了新的专业税(NAP)作为试点项目。 简而言之,他的主要任务是从小企业的所有困难中挽救专业人士:6%的税(对于私营企业家而言),强制性的养老金缴款,每年仅一个人的金额接近5万卢布,纳税申报。 因此,国家通过向初创企业家提供低税率(个人收入的4%和法人实体的6%)来支持小型企业。 如果需要更多详细信息,可以在Internet上查看详细信息。

即使是在IT领域工作的个人也有权使用NAP。 这有什么帮助? 例如,您已经开发了一种可以在Internet上运行的服务,想要接受付款。 您不必为了此类创业活动而注册法人实体,并从一开始就解决许多问题。 注册为自雇人士并假释时,在每项服务或产品中手动锤打就足够了。 那时,服务开发人员认为:“此过程可以自动化吗?” 答案是“当然可以!” 实际上,这篇文章是要告诉您如何做。
重要说明:本文的作者仅通过对例程进行良好的自动化来研究应用程序而获得的知识。 他希望你有同样的动机。

步骤1.识别HTTP流量


在这里,您将需要正式的纳税人申请“我的税”。 您可以通过Google Play下载它。

对于本文而言,确定sourceDeviceId(我怀疑这与android id相同)和refreshToken就足够了,但是,您可以探索该应用程序建议的所有API方法进行研究。 要确定它,您需要从智能手机接收HTTPS请求。 对于没有root权限的库存设备,您可以使用计算机,即免费程序Fiddler。 为了理解该程序的工作,我使用了不是很新的手册 ,但是,它足以拦截智能手机的https流量并在计算机屏幕上显示该应用程序。

安装完所有内容后,您需要注册为纳税人并关闭该应用程序。 然后激活Fiddler程序,在智能手机上建立代理连接,然后再次启动该应用程序。 该应用程序将发出带有刷新令牌的授权请求,在撰写本文时,刷新令牌的持续时间不受限制:

图片

如您在屏幕快照中所见,该应用程序具有基本域lknpd.nalog.ru(俄罗斯税务服务网站的子域)和API版本1。Bearer使用方法授权,其令牌是通过/ auth /令牌方法生成的。 您非常需要来自请求字段sourceDeviceId和refreshToken的数据。 我在实验后3天检查了refreshToken的工作-它可以正常工作,因此可以安全地使用1小时的令牌,显然有一个实际的refreshToken。

包裹发送方法本身看起来像这样,并具有所有必填字段:

图片

请注意,所有字段均为必填项。 服务字段可能会让您想要在阵列中发送多个服务,但是,尽管最终费用将是全部的,但支票上只会显示第一个服务。 尽管如此,该服务还是比较潮湿的,并且它是最近才发布的,我们不会对此进行详细介绍(尽管这很可惜,实际上有时需要几个职位)。

您还应注意以下答案:核准的接收者Uuid:该字段包含唯一的校验码,您的校验TIN和UUID可以毫无困难地获得该校验码。

步骤2.脚本开发


为了快速展示自动化概念,将Python 3.7.2与请求库一起使用:

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) 

替换所需的值-该脚本将按预期运行。 您可以添加错误处理程序并改善交付-上面的脚本仅显示了使用tax API NAP的工作原理。
注意也许将来税收会发布API,但是现在它并不仅仅是因为很少有人需要它而这样做。 因此,这项业务被推迟到以后。 但是,我必须注意,如果发布了官方指南,那么就授权而言,它肯定会具有相似的信息或稍有改进。

UPD:我发现了有关自动化的文档,该文档是书面的……感觉像是人手的副手:非常复杂,没有结构化。 会有时间-我将通过官方API撰写有关自动化的有价值的文章。 剧透:那里的一切几乎都是我们从流量中学到的,只有描述了带有电子邮件请求和其他困难的官方方法。


结论


最后,我想指出: 不要在家中重复此操作,这是没有不可能的。 即使是这样的例行事情也可以轻松实现自动化。 复制代码,以自己的方式对其进行修改。 也许然后我将实现该库,以便每个人都可以更轻松地访问自动化。 我期待您的客观批评,并继续挖掘API。 我的下一个目标是理想化授权原则,并为Python创建一个库。

Source: https://habr.com/ru/post/zh-CN436656/


All Articles