{ "info": { "author": "MyBook", "author_email": "dev@mybook.ru", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "====\nATOL\n====\n\nApplication for integrating Django and https://online.atol.ru/\n\n.. image:: https://img.shields.io/badge/python-3.5,%203.6-blue.svg\n :target: https://pypi.python.org/pypi/django-atol/\n.. image:: https://travis-ci.org/MyBook/django-atol.svg?branch=master\n :target: https://travis-ci.org/MyBook/django-atol\n.. image:: https://codecov.io/gh/MyBook/django-atol/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/MyBook/django-atol\n.. image:: https://img.shields.io/badge/docs-v3-yellow.svg\n :target: https://t.me/atolonline\n\n\n\nImportant limitations:\n\n * Python 3.5+\n * Support Django 1.11+\n * PostgreSQL \u2265 9.4 (JSONB field)\n * only 1 purchase is supported in receipt (1 product)\n * only v3 protocol version is supported\n\nQuick start\n-----------\n\n1. Add ``atol`` to your INSTALLED_APPS setting like this::\n\n INSTALLED_APPS = [\n ...\n 'atol',\n ]\n\n2. Add ``atol`` settings like this::\n\n RECEIPTS_ATOL_LOGIN = 'login'\n RECEIPTS_ATOL_PASSWORD = 'secret'\n RECEIPTS_ATOL_GROUP_CODE = 'ATOL-ProdTest-1'\n RECEIPTS_ATOL_TAX_NAME = 'vat18'\n RECEIPTS_ATOL_TAX_SYSTEM = 'osn'\n RECEIPTS_ATOL_INN = '112233445573'\n RECEIPTS_ATOL_PAYMENT_METHOD = 'full_payment'\n RECEIPTS_ATOL_PAYMENT_OBJECT = 'service'\n RECEIPTS_ATOL_CALLBACK_URL = None\n RECEIPTS_ATOL_PAYMENT_ADDRESS = 'www..ru'\n RECEIPTS_ATOL_COMPANY_EMAIL = '@gmail.com'\n RECEIPTS_OFD_URL_TEMPLATE = u'https://lk.platformaofd.ru/web/noauth/cheque?fn={fn}&fp={fp}'\n\n3. Add celery-beat tasks to CELERYBEAT_SCHEDULE settings like this::\n\n CELERYBEAT_SCHEDULE = {\n ...\n 'atol_retry_created_receipts': {\n 'task': 'atol_retry_created_receipts',\n 'schedule': crontab(minute=25)\n },\n 'atol_retry_initiated_receipts': {\n 'task': 'atol_retry_initiated_receipts',\n 'schedule': crontab(minute=35)\n }\n }\n\n4. Include the ``atol`` URLconf in your project urls.py like this::\n\n from atol.views import ReceiptView\n\n url(r'^r/(?P[\\w]+)/$', ReceiptView.as_view(), name='receipt')\n\n5. Run ``python manage.py migrate atol`` to create the receipt model.\n\n6. Add receipt field to your payment model::\n\n from atol.models import Receipt\n\n receipt = models.OneToOneField(Receipt, verbose_name=_('\u0427\u0435\u043a'), blank=True, null=True, on_delete=models.SET_NULL)\n\n7. Add the mechanics of calling a receipt creation after a successful payment. For example, this can be done through a signal that will be called upon successful payment::\n\n # /signals.py\n\n payment_accepted = Signal(providing_args=['payment'])\n\n # /providers/googleplay.py\n\n def process_payment(payment)\n\n ...\n\n payment_accepted.send(sender='google-play', payment=payment)\n\n # /receivers.py\n\n @receiver(payment_accepted)\n @transaction.atomic\n def init_payment_receipt(sender, payment, **kwargs):\n\n ...\n\n receipt = Receipt.objects.create(\n user_email=payment.user.email,\n purchase_price=payment.amount\n )\n payment.receipt = receipt\n payment.save(update_fields=['receipt'])\n transaction.on_commit(\n lambda: atol_create_receipt.apply_async(args=(receipt.id,), fallback_sync=True)\n )\n\nRun tests\n---------\n\n pytest\n\n\nChangelog\n---------\n\n1.3.1 (2018-12-19)\n------------------\n* Sell method: do not insert empty email or phone\n\n1.3.0 (2018-12-19)\n------------------\n* Support Atol protocol v4 (FFD 1.05)\n\n1.2.2 (2018-10-08)\n------------------\n* Change maximum retry counts for task `atol_receive_receipt_report`. Now its awaiting report for 29 hours.\n\n* Changed `atol_retry_created_receipts` and `atol_retry_initiated_receipts` tasks retry period.\n Now it will retry receipts from day before yesterday\n\n1.2.1 (2018-05-22)\n------------------\n* AtolAPI.base_url specifying in settings\n\n1.2.0 (2017-12-14)\n------------------\n* Support retried not processed receipt\n\n1.1.0 (2017-12-13)\n------------------\n* Django 2.0 support\n\n1.0.0 (2017-12-01)\n------------------\n* Initial release\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/MyBook/django-atol", "keywords": "atol", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "django-atol", "package_url": "https://pypi.org/project/django-atol/", "platform": "", "project_url": "https://pypi.org/project/django-atol/", "project_urls": { "Homepage": "https://github.com/MyBook/django-atol" }, "release_url": "https://pypi.org/project/django-atol/1.3.1/", "requires_dist": [ "requests (>=2.10.0)", "python-dateutil (>=2.5.3)", "django-model-utils (>=3.0.0)", "celery (>=3.1.25)", "shortuuid (>=0.5.0)" ], "requires_python": "", "summary": "Django integration with ATOL online", "version": "1.3.1" }, "last_serial": 4617022, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "b91e5a1da6d8f2134cb88b39f8c895ad", "sha256": "5094428b029416ddebc68798cfb17dc1fcec426bf425fc8124e1a2052c199120" }, "downloads": -1, "filename": "django_atol-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b91e5a1da6d8f2134cb88b39f8c895ad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14920, "upload_time": "2017-12-01T14:16:48", "url": "https://files.pythonhosted.org/packages/d2/79/441830ff71c76da8e11008e11ddb818585c5bae5566324223c1515a986b8/django_atol-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf0ec7897df351d69e74786aedd8d610", "sha256": "ffc1b2153629d227b6dcbbc3692890dcf96b3090c3d768929b954c6f14fa96f8" }, "downloads": -1, "filename": "django-atol-1.0.0.tar.gz", "has_sig": false, "md5_digest": "bf0ec7897df351d69e74786aedd8d610", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14885, "upload_time": "2017-12-01T14:16:50", "url": "https://files.pythonhosted.org/packages/51/55/2d4626f1770fcc3fbaace1a037f3a4e04c189e189b2fc545e978d48264dc/django-atol-1.0.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "36fc4875e00f42591b44a0870e296f93", "sha256": "d003550c3ed833887b47070578c70c4d4fec6deff951fd5885bb3f8b0dd94b91" }, "downloads": -1, "filename": "django_atol-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "36fc4875e00f42591b44a0870e296f93", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16658, "upload_time": "2017-12-14T09:21:10", "url": "https://files.pythonhosted.org/packages/fd/4a/766115d830c55c18f0c0a4d49f3be4f18a5faf089e74931e40c1fbf69424/django_atol-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92b69d816be6631e2821953e0e4b9908", "sha256": "48dbe3304d516ff30d9fd346de3b44a5d881c56f8f8e595a627e5eca38384b6a" }, "downloads": -1, "filename": "django-atol-1.2.0.tar.gz", "has_sig": false, "md5_digest": "92b69d816be6631e2821953e0e4b9908", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17490, "upload_time": "2017-12-14T09:21:12", "url": "https://files.pythonhosted.org/packages/f7/cb/df096a999d1c9e146f68b1400220a6adcecd360626ef5a923a7841d4f104/django-atol-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "c2fc066d32335c41e754c82e918679cc", "sha256": "df93722bef6b3b9ecab7b879afcf9f95bc62d1e02cb1965d0d288de8ab6c715f" }, "downloads": -1, "filename": "django_atol-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c2fc066d32335c41e754c82e918679cc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14341, "upload_time": "2018-05-23T13:28:51", "url": "https://files.pythonhosted.org/packages/c7/4c/9fbf85872c2fb622cade44e1657e64ae3c9b57b9d7810b1de4cb5301875a/django_atol-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36ca50f93bf5abc1d7d053bec3530e39", "sha256": "e12b2b052abdc39101ec5a038a4ab3874004d1fcfb5a3b07007ed550bbd2acf7" }, "downloads": -1, "filename": "django-atol-1.2.1.tar.gz", "has_sig": false, "md5_digest": "36ca50f93bf5abc1d7d053bec3530e39", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17724, "upload_time": "2018-05-22T17:28:58", "url": "https://files.pythonhosted.org/packages/43/f3/05fccab10b49df519217a207f7d3f370933186182073a79c9e937abebea2/django-atol-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "ba2a89cde21d8092af2ec06f3390bc08", "sha256": "3d4015c1e0313f8e009d434945bcc587ee5b6fc4897015b524a31d314ce38769" }, "downloads": -1, "filename": "django_atol-1.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ba2a89cde21d8092af2ec06f3390bc08", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14471, "upload_time": "2018-10-09T10:52:50", "url": "https://files.pythonhosted.org/packages/42/20/4e79371b5fdcb581660ed0810858877c7649c757782503c8a193c47a17a1/django_atol-1.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "053eb644112db689b526850f0376019b", "sha256": "68f343280380ee3f37addb586845e881aeba1111311a7e66b5a69c0abdf251d9" }, "downloads": -1, "filename": "django-atol-1.2.2.tar.gz", "has_sig": false, "md5_digest": "053eb644112db689b526850f0376019b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18211, "upload_time": "2018-10-09T10:52:52", "url": "https://files.pythonhosted.org/packages/73/47/9ca8dde97571717188cbe3b1ab987222367ce05fda70f86ea0ea789a0f80/django-atol-1.2.2.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "e41f959bad5a64f25e67f3fec59bf492", "sha256": "1de2bc33971eb73949e5b76c3b6458e4bb57146506c92737ba5b7da8e14e54e4" }, "downloads": -1, "filename": "django_atol-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e41f959bad5a64f25e67f3fec59bf492", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15024, "upload_time": "2018-12-18T07:51:26", "url": "https://files.pythonhosted.org/packages/0e/74/472ac5fe8f6eb34f99716b11d4babea9a1f8e2e5f9eca401ab4f1888fbb2/django_atol-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4377ce55d71dbf07ed751b2e33c0333f", "sha256": "cb09dd466e9f78dee0494aa7e428da3ee7be6b20050d0d0690351ad687248bee" }, "downloads": -1, "filename": "django-atol-1.3.0.tar.gz", "has_sig": false, "md5_digest": "4377ce55d71dbf07ed751b2e33c0333f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18692, "upload_time": "2018-12-18T07:51:28", "url": "https://files.pythonhosted.org/packages/6b/d4/de65791875ac02f5be94ac854504c9a210f5e484491dfe5897a81dff55e9/django-atol-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "85bcbfa61cb60bdd8262dd97cb79c60d", "sha256": "136d14b3f383bc1796a7eb808b0ac8dc784fc346f3c1a504e072d61011bf5d2c" }, "downloads": -1, "filename": "django_atol-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "85bcbfa61cb60bdd8262dd97cb79c60d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15051, "upload_time": "2018-12-19T14:51:58", "url": "https://files.pythonhosted.org/packages/44/26/3d171eb569fd707837ec515e8a1c23a1d439977c58c1982d2094b7ee7301/django_atol-1.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d5236f32d27a5035f038718e4b03d23a", "sha256": "089941cd0cd612372ca4be96f11ad17661a3256d7a2f73686e8db2fa88e6a637" }, "downloads": -1, "filename": "django-atol-1.3.1.tar.gz", "has_sig": false, "md5_digest": "d5236f32d27a5035f038718e4b03d23a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18652, "upload_time": "2018-12-19T14:52:00", "url": "https://files.pythonhosted.org/packages/64/ef/31cff8720f59cc4f5f0b7cf9e590aaa646b1aceca6e73313e56afbb05dde/django-atol-1.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "85bcbfa61cb60bdd8262dd97cb79c60d", "sha256": "136d14b3f383bc1796a7eb808b0ac8dc784fc346f3c1a504e072d61011bf5d2c" }, "downloads": -1, "filename": "django_atol-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "85bcbfa61cb60bdd8262dd97cb79c60d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15051, "upload_time": "2018-12-19T14:51:58", "url": "https://files.pythonhosted.org/packages/44/26/3d171eb569fd707837ec515e8a1c23a1d439977c58c1982d2094b7ee7301/django_atol-1.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d5236f32d27a5035f038718e4b03d23a", "sha256": "089941cd0cd612372ca4be96f11ad17661a3256d7a2f73686e8db2fa88e6a637" }, "downloads": -1, "filename": "django-atol-1.3.1.tar.gz", "has_sig": false, "md5_digest": "d5236f32d27a5035f038718e4b03d23a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18652, "upload_time": "2018-12-19T14:52:00", "url": "https://files.pythonhosted.org/packages/64/ef/31cff8720f59cc4f5f0b7cf9e590aaa646b1aceca6e73313e56afbb05dde/django-atol-1.3.1.tar.gz" } ] }