Garpix Order
============
.. code-block:: python
from garpix_order.models import BaseOrder, BaseOrderItem, BasePayment
class Order(BaseOrder):
pass
class Service(BaseOrderItem):
def pay(self):
pass
class Invoice(BasePayment):
pass
**BaseOrder** - основной класс заказа.
``items`` - метод для получения связанных OrderItem.
``items_amount`` - метод для получения суммы оплаты.
**BaseOrderItem** - части заказа. В один заказ можно положить несколько сущностей.
``pay`` - метод вызовет у всех BaseOrderItem, когда оплачивается заказ.
``full_amount`` - метод возвращает полную сумма заказа.
**Invoice** - Основная модель для отслеживания статуса оплаты (транзакция). Содержит ``status`` с типом FSM.
Эквайринг Сбер
--------------
**BaseSberPayment** Абстрактная модель для платежей Сбера. **Для работы необходимо** создать свою модель-наследник,
затем указать путь до нее в settings.py, например:
.. code-block:: python
SBER_PAYMENT_MODEL = 'path.to.your.app.models.SberPaymentModel'
Методы для создания платежа, получение его данных от провайдера и callback
находятся в garpix_order.services.sber.SberService.
Логирование ошибок при запросах к эквайрингу (на данный момент поддерживается только в SberService)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Пример добавления логирования в settings.py с использованием библиотеки python-json-logger:
.. code-block:: commandline
pip install python-json-logger
.. code-block:: python
from garpix_order.logging.filters import PaymentAuthDataFilter
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"filters": {
"payment_auth_data_filter": {
"()": PaymentAuthDataFilter,
}
},
"formatters": {
"json": {
"format": "%(asctime)s %(levelname)s %(message)s %(module)s",
"datefmt": "%Y-%m-%dT%H:%M:%SZ",
"class": "pythonjsonlogger.jsonlogger.JsonFormatter",
}
},
"handlers": {
"stdout": {
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout",
"formatter": "json",
"filters": ["payment_auth_data_filter"],
}
},
"loggers": {"garpix_order.services.sber": {"handlers": ["stdout"], "level": "INFO", "propagate": False}},
}
Raw data
{
"_id": null,
"home_page": "https://github.com/garpixcms/garpix_order",
"name": "garpix-order",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Garpix LTD",
"author_email": "info@garpix.com",
"download_url": "https://files.pythonhosted.org/packages/6f/5e/fb09c7c3d2b9128867329fbbf9567a6d8cfc48926b942a80d458dd1cccf7/garpix_order-1.0.0rc9.tar.gz",
"platform": null,
"description": "\nGarpix Order\n============\n\n.. code-block:: python\n\n from garpix_order.models import BaseOrder, BaseOrderItem, BasePayment\n\n\n class Order(BaseOrder):\n pass\n\n\n class Service(BaseOrderItem):\n def pay(self):\n pass\n\n\n class Invoice(BasePayment):\n pass\n\n**BaseOrder** - \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0437\u0430\u043a\u0430\u0437\u0430.\n\n``items`` - \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 OrderItem.\n\n``items_amount`` - \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0443\u043c\u043c\u044b \u043e\u043f\u043b\u0430\u0442\u044b.\n\n**BaseOrderItem** - \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043a\u0430\u0437\u0430. \u0412 \u043e\u0434\u0438\u043d \u0437\u0430\u043a\u0430\u0437 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439.\n\n``pay`` - \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0443 \u0432\u0441\u0435\u0445 BaseOrderItem, \u043a\u043e\u0433\u0434\u0430 \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u0430\u0437.\n\n``full_amount`` - \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0430 \u0437\u0430\u043a\u0430\u0437\u0430. \n\n**Invoice** - \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043e\u043f\u043b\u0430\u0442\u044b (\u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f). \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 ``status`` \u0441 \u0442\u0438\u043f\u043e\u043c FSM.\n\n\u042d\u043a\u0432\u0430\u0439\u0440\u0438\u043d\u0433 \u0421\u0431\u0435\u0440\n--------------\n\n**BaseSberPayment** \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439 \u0421\u0431\u0435\u0440\u0430. **\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e** \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043c\u043e\u0434\u0435\u043b\u044c-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a,\n\u0437\u0430\u0442\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e \u043d\u0435\u0435 \u0432 settings.py, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n\n.. code-block:: python\n\n SBER_PAYMENT_MODEL = 'path.to.your.app.models.SberPaymentModel'\n\n\u041c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438 callback\n\u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 garpix_order.services.sber.SberService.\n\n\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043a \u044d\u043a\u0432\u0430\u0439\u0440\u0438\u043d\u0433\u0443 (\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 SberService)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 settings.py \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 python-json-logger:\n\n.. code-block:: commandline\n\n pip install python-json-logger\n\n.. code-block:: python\n\n from garpix_order.logging.filters import PaymentAuthDataFilter\n\n\n LOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"filters\": {\n \"payment_auth_data_filter\": {\n \"()\": PaymentAuthDataFilter,\n }\n },\n \"formatters\": {\n \"json\": {\n \"format\": \"%(asctime)s %(levelname)s %(message)s %(module)s\",\n \"datefmt\": \"%Y-%m-%dT%H:%M:%SZ\",\n \"class\": \"pythonjsonlogger.jsonlogger.JsonFormatter\",\n }\n },\n \"handlers\": {\n \"stdout\": {\n \"class\": \"logging.StreamHandler\",\n \"stream\": \"ext://sys.stdout\",\n \"formatter\": \"json\",\n \"filters\": [\"payment_auth_data_filter\"],\n }\n },\n \"loggers\": {\"garpix_order.services.sber\": {\"handlers\": [\"stdout\"], \"level\": \"INFO\", \"propagate\": False}},\n }\n",
"bugtrack_url": null,
"license": "MIT",
"summary": null,
"version": "1.0.0rc9",
"project_urls": {
"Homepage": "https://github.com/garpixcms/garpix_order"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c288a5f1840e3447384702de2fbde5155c7ba843feed7c1be89e1c53e0e95a52",
"md5": "35e26c27f709600ac82b05682dbfdc4b",
"sha256": "ff40a4186f0bac37041a77791a34090edc121cebe9c05b1b0f608980089ae8c2"
},
"downloads": -1,
"filename": "garpix_order-1.0.0rc9-py3-none-any.whl",
"has_sig": false,
"md5_digest": "35e26c27f709600ac82b05682dbfdc4b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 95417,
"upload_time": "2024-08-08T08:41:30",
"upload_time_iso_8601": "2024-08-08T08:41:30.931434Z",
"url": "https://files.pythonhosted.org/packages/c2/88/a5f1840e3447384702de2fbde5155c7ba843feed7c1be89e1c53e0e95a52/garpix_order-1.0.0rc9-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6f5efb09c7c3d2b9128867329fbbf9567a6d8cfc48926b942a80d458dd1cccf7",
"md5": "36ccde16d255329e8ed6c96d155409f2",
"sha256": "d7f9ec08756df9e86b1cfb5fb39d1064a7473b49f25f3661a4233845b432015a"
},
"downloads": -1,
"filename": "garpix_order-1.0.0rc9.tar.gz",
"has_sig": false,
"md5_digest": "36ccde16d255329e8ed6c96d155409f2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 56016,
"upload_time": "2024-08-08T08:41:34",
"upload_time_iso_8601": "2024-08-08T08:41:34.460518Z",
"url": "https://files.pythonhosted.org/packages/6f/5e/fb09c7c3d2b9128867329fbbf9567a6d8cfc48926b942a80d458dd1cccf7/garpix_order-1.0.0rc9.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-08 08:41:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "garpixcms",
"github_project": "garpix_order",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "garpix-order"
}