garpix-cloudpayments


Namegarpix-cloudpayments JSON
Version 1.2.0 PyPI version JSON
download
home_pagehttps://github.com/garpixcms/garpix_cloudpayments
Summary
upload_time2023-02-09 07:15:29
maintainer
docs_urlNone
authorGarpix LTD
requires_python
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Garpix CloudPayments

Прием платажей с CloudPayments.

## Быстрый старт

Установите через pipenv:

```bash
pipenv install garpix_cloudpayments
```

Добавьте `garpix_cloudpayments` в `INSTALLED_APPS` и укажите адрес для миграций:

```python
# settings.py

INSTALLED_APPS += [
    'garpix_cloudpayments',
]
MIGRATION_MODULES = {
    # ...
}
MIGRATION_MODULES['garpix_cloudpayments'] = 'app.migrations.garpix_cloudpayments'
```

Создайте директории и файлы:

```bash
backend/app/migrations/garpix_cloudpayments/
backend/app/migrations/garpix_cloudpayments/__init__.py
```

Сделайте миграции и мигрируйте:

```bash
python3 backend/manage.py makemigrations
python3 backend/manage.py migrate
```

Добавьте пути в `urls.py`:

```python
from django.urls import path, include

urlpatterns = [
    path('cloudpayments/', include('garpix_cloudpayments.urls')),
    # ...
]
```

Также, добавьте в личном кабинете CloudPayments ссылки на эти коллбеки:

* `Pay уведомление` => `https://example.com/cloudpayments/pay/`

* `Fail уведомление` => `https://example.com/cloudpayments/fail/`

После этого необходимо зайти в административную панель и добавить публичный ключ из личного кабинета CloudPayments.

При изменении статуса платежа, дергается функция, указанная в `app/settings.py` (вы можете поменять на свою функцию и указать путь до нее):

```
# app/settings.py

GARPIX_PAYMENT_STATUS_CHANGED_CALLBACK = 'garpix_payment.callbacks.empty_callback'
```

Пример функции:

```python
from garpix_cloudpayments.models.choices import PAYMENT_STATUS_COMPLETED, PAYMENT_STATUS_CANCELLED, PAYMENT_STATUS_DECLINED


def my_callback(payment):
    if payment.status == PAYMENT_STATUS_COMPLETED:
        print('Меняем статус заказа на успешный')
    elif payment.status in (PAYMENT_STATUS_CANCELLED, PAYMENT_STATUS_DECLINED):
        print('Заказ провален')
    else:
        print('Можем тоже использовать')
```

Ниже пример работы на фронтенде (до вызова точки `/cloudpayments/payment_data/` необходимо создать объект модели `Payment`):

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Garpix CloudPayments</title>
    <script src="https://widget.cloudpayments.ru/bundles/cloudpayments"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>

<label>Номер заказа (payment_uuid):<input type="text" value="1" name="payment_uuid" class="jsPaymentUUID"></label>
<button onclick="getDataAndPay(); return false;">Оплатить</button>

<script>
    function getDataAndPay() {
        var paymentUUID = document.querySelector('.jsPaymentUUID').value;
        axios.get('/cloudpayments/payment_data/?payment_uuid=' + paymentUUID)
            .then(function (paymentData) {
                console.log(paymentData);
                pay(paymentData);
            })
    }


    function pay(paymentData) {
        var widget = new cp.CloudPayments();
        widget.pay('auth', // или 'charge'
            paymentData,
            {
                onSuccess: function (options) { // success
                    //действие при успешной оплате
                    alert('success');
                },
                onFail: function (reason, options) { // fail
                    //действие при неуспешной оплате
                    alert('fail');
                },
                onComplete: function (paymentResult, options) { //Вызывается как только виджет получает от api.cloudpayments ответ с результатом транзакции.
                    //например вызов вашей аналитики Facebook Pixel
                    alert('complete')
                }
            }
        )
    };
</script>
</body>
</html>
```

# Changelog

See [CHANGELOG.md](CHANGELOG.md).

# Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md).

# License

[MIT](LICENSE)

---

Developed by Garpix / [https://garpix.com](https://garpix.com)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/garpixcms/garpix_cloudpayments",
    "name": "garpix-cloudpayments",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "",
    "author": "Garpix LTD",
    "author_email": "info@garpix.com",
    "download_url": "https://files.pythonhosted.org/packages/5c/d1/60666bba08a5592de16b5ddeda6cbb9c800e96fa810d3e4aae67e7259556/garpix_cloudpayments-1.2.0.tar.gz",
    "platform": null,
    "description": "# Garpix CloudPayments\n\n\u041f\u0440\u0438\u0435\u043c \u043f\u043b\u0430\u0442\u0430\u0436\u0435\u0439 \u0441 CloudPayments.\n\n## \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 pipenv:\n\n```bash\npipenv install garpix_cloudpayments\n```\n\n\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 `garpix_cloudpayments` \u0432 `INSTALLED_APPS` \u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0439:\n\n```python\n# settings.py\n\nINSTALLED_APPS += [\n    'garpix_cloudpayments',\n]\nMIGRATION_MODULES = {\n    # ...\n}\nMIGRATION_MODULES['garpix_cloudpayments'] = 'app.migrations.garpix_cloudpayments'\n```\n\n\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u0444\u0430\u0439\u043b\u044b:\n\n```bash\nbackend/app/migrations/garpix_cloudpayments/\nbackend/app/migrations/garpix_cloudpayments/__init__.py\n```\n\n\u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043c\u0438\u0433\u0440\u0438\u0440\u0443\u0439\u0442\u0435:\n\n```bash\npython3 backend/manage.py makemigrations\npython3 backend/manage.py migrate\n```\n\n\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0442\u0438 \u0432 `urls.py`:\n\n```python\nfrom django.urls import path, include\n\nurlpatterns = [\n    path('cloudpayments/', include('garpix_cloudpayments.urls')),\n    # ...\n]\n```\n\n\u0422\u0430\u043a\u0436\u0435, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435 CloudPayments \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u044d\u0442\u0438 \u043a\u043e\u043b\u043b\u0431\u0435\u043a\u0438:\n\n* `Pay \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435` => `https://example.com/cloudpayments/pay/`\n\n* `Fail \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435` => `https://example.com/cloudpayments/fail/`\n\n\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0439\u0442\u0438 \u0432 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438\u0437 \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0430 CloudPayments.\n\n\u041f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043f\u043b\u0430\u0442\u0435\u0436\u0430, \u0434\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0432 `app/settings.py` (\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e \u043d\u0435\u0435):\n\n```\n# app/settings.py\n\nGARPIX_PAYMENT_STATUS_CHANGED_CALLBACK = 'garpix_payment.callbacks.empty_callback'\n```\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:\n\n```python\nfrom garpix_cloudpayments.models.choices import PAYMENT_STATUS_COMPLETED, PAYMENT_STATUS_CANCELLED, PAYMENT_STATUS_DECLINED\n\n\ndef my_callback(payment):\n    if payment.status == PAYMENT_STATUS_COMPLETED:\n        print('\u041c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0439')\n    elif payment.status in (PAYMENT_STATUS_CANCELLED, PAYMENT_STATUS_DECLINED):\n        print('\u0417\u0430\u043a\u0430\u0437 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d')\n    else:\n        print('\u041c\u043e\u0436\u0435\u043c \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c')\n```\n\n\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435 (\u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0442\u043e\u0447\u043a\u0438 `/cloudpayments/payment_data/` \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 `Payment`):\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Garpix CloudPayments</title>\n    <script src=\"https://widget.cloudpayments.ru/bundles/cloudpayments\"></script>\n    <script src=\"https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js\"></script>\n</head>\n<body>\n\n<label>\u041d\u043e\u043c\u0435\u0440 \u0437\u0430\u043a\u0430\u0437\u0430 (payment_uuid):<input type=\"text\" value=\"1\" name=\"payment_uuid\" class=\"jsPaymentUUID\"></label>\n<button onclick=\"getDataAndPay(); return false;\">\u041e\u043f\u043b\u0430\u0442\u0438\u0442\u044c</button>\n\n<script>\n    function getDataAndPay() {\n        var paymentUUID = document.querySelector('.jsPaymentUUID').value;\n        axios.get('/cloudpayments/payment_data/?payment_uuid=' + paymentUUID)\n            .then(function (paymentData) {\n                console.log(paymentData);\n                pay(paymentData);\n            })\n    }\n\n\n    function pay(paymentData) {\n        var widget = new cp.CloudPayments();\n        widget.pay('auth', // \u0438\u043b\u0438 'charge'\n            paymentData,\n            {\n                onSuccess: function (options) { // success\n                    //\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u043f\u043b\u0430\u0442\u0435\n                    alert('success');\n                },\n                onFail: function (reason, options) { // fail\n                    //\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0438 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u043f\u043b\u0430\u0442\u0435\n                    alert('fail');\n                },\n                onComplete: function (paymentResult, options) { //\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 api.cloudpayments \u043e\u0442\u0432\u0435\u0442 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.\n                    //\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0437\u043e\u0432 \u0432\u0430\u0448\u0435\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 Facebook Pixel\n                    alert('complete')\n                }\n            }\n        )\n    };\n</script>\n</body>\n</html>\n```\n\n# Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md).\n\n# Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n# License\n\n[MIT](LICENSE)\n\n---\n\nDeveloped by Garpix / [https://garpix.com](https://garpix.com)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "",
    "version": "1.2.0",
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "976bae12caf5c24758988683e042c8f0d99d6de4ed59274c7ebffe9622de00c4",
                "md5": "562fe54c0f8bad98499ededad834c268",
                "sha256": "3ce2c20724b2165f3db3a539f9205bda0c1b3b9c384b237d711db4fdb80a77fb"
            },
            "downloads": -1,
            "filename": "garpix_cloudpayments-1.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "562fe54c0f8bad98499ededad834c268",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 25293,
            "upload_time": "2023-02-09T07:15:27",
            "upload_time_iso_8601": "2023-02-09T07:15:27.120077Z",
            "url": "https://files.pythonhosted.org/packages/97/6b/ae12caf5c24758988683e042c8f0d99d6de4ed59274c7ebffe9622de00c4/garpix_cloudpayments-1.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5cd160666bba08a5592de16b5ddeda6cbb9c800e96fa810d3e4aae67e7259556",
                "md5": "942cab64f53d2fd435da2f780f8e02bf",
                "sha256": "5f20946ef98692830be0479c539c81001895149a2a09e9feea4494e0d9d9cc20"
            },
            "downloads": -1,
            "filename": "garpix_cloudpayments-1.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "942cab64f53d2fd435da2f780f8e02bf",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 15912,
            "upload_time": "2023-02-09T07:15:29",
            "upload_time_iso_8601": "2023-02-09T07:15:29.280354Z",
            "url": "https://files.pythonhosted.org/packages/5c/d1/60666bba08a5592de16b5ddeda6cbb9c800e96fa810d3e4aae67e7259556/garpix_cloudpayments-1.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-02-09 07:15:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "garpixcms",
    "github_project": "garpix_cloudpayments",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "garpix-cloudpayments"
}
        
Elapsed time: 0.04102s