Skip to content

Commit

Permalink
Merge pull request #10 from yoomoney/release/v2.2.0
Browse files Browse the repository at this point in the history
Release/2.2.0
  • Loading branch information
tonchik-tm authored Nov 16, 2021
2 parents e97ba42 + 7b68827 commit 0c2e5c0
Show file tree
Hide file tree
Showing 71 changed files with 2,607 additions and 233 deletions.
14 changes: 7 additions & 7 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ python:
- "3.6"
- "3.5"
- "3.4"
matrix:
include:
- python: 2.7
before_install:
- pip install -U mock
- pip install -U pytest
# matrix:
# include:
# - python: 2.7
# before_install:
# - pip install -U mock
# - pip install -U pytest
# command to install dependencies
install:
- pip install -r requirements.txt && pip install -e .
# command to run tests
script:
- pytest
- pytest
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
### v2.2.0 от 16.11.2021
* Добавлена поддержка Безопасной Сделки
* Удалено поле Payment.requestor

### v2.1.5 от 29.10.2021
* Добавлена поддержка Confirmation.mobile_application

Expand Down
27 changes: 25 additions & 2 deletions docs/examples/01-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,14 @@ var_dump.var_dump(Webhook.list())
import json
from django.http import HttpResponse
from yookassa import Configuration, Payment
from yookassa.domain.notification import WebhookNotificationEventType, WebhookNotification
from yookassa.domain.notification import WebhookNotificationEventType, WebhookNotificationFactory

def my_webhook_handler(request):
# Извлечение JSON объекта из тела запроса
event_json = json.loads(request.body)
try:
# Создание объекта класса уведомлений в зависимости от события
notification_object = WebhookNotification(event_json)
notification_object = WebhookNotificationFactory().create(event_json)
response_object = notification_object.object
if notification_object.event == WebhookNotificationEventType.PAYMENT_SUCCEEDED:
some_data = {
Expand Down Expand Up @@ -193,6 +193,29 @@ def my_webhook_handler(request):
}
# Специфичная логика
# ...
elif notification_object.event == WebhookNotificationEventType.DEAL_CLOSED:
some_data = {
'dealId': response_object.id,
'dealStatus': response_object.status,
}
# Специфичная логика
# ...
elif notification_object.event == WebhookNotificationEventType.PAYOUT_SUCCEEDED:
some_data = {
'payoutId': response_object.id,
'payoutStatus': response_object.status,
'dealId': response_object.deal.id,
}
# Специфичная логика
# ...
elif notification_object.event == WebhookNotificationEventType.PAYOUT_CANCELED:
some_data = {
'payoutId': response_object.id,
'payoutStatus': response_object.status,
'dealId': response_object.deal.id,
}
# Специфичная логика
# ...
else:
# Обработка ошибок
return HttpResponse(status=400) # Сообщаем кассе об ошибке
Expand Down
130 changes: 130 additions & 0 deletions docs/examples/05-deals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
## Работа со сделками

SDK позволяет создавать сделки, а также получать информацию о них.

Объект сделки `DealResponse` содержит всю информацию о сделке, актуальную на текущий момент времени.
Он формируется при создании сделки и приходит в ответ на любой запрос, связанный со сделками.

* [Запрос на создание сделки](#Запрос-на-создание-сделки)
* [Запрос на создание сделки через билдер](#Запрос-на-создание-сделки-через-билдер)
* [Получить информацию о сделке](#Получить-информацию-о-сделке)
* [Получить список сделок с фильтрацией](#Получить-список-сделок-с-фильтрацией)

---

### Запрос на создание сделки

[Создание сделки в документации](https://yookassa.ru/developers/api?lang=python#create_deal)

Чтобы создать сделку, необходимо создать объект сделки — `DealRequest`. Он позволяет создать сделку, в рамках которой
необходимо принять оплату от покупателя и перечислить ее продавцу.

В ответ на запрос придет объект сделки - `DealResponse` в актуальном статусе.

```python
import var_dump as var_dump
from yookassa import Deal

res = Deal.create({
"type": "safe_deal",
"fee_moment": "payment_succeeded",
"metadata": {
"order_id": "88"
},
"description": "SAFE_DEAL PYTHON 123554642-2432FF344R"
})

var_dump.var_dump(res)
```
---

### Запрос на создание сделки через билдер

[Создание сделки в документации](https://yookassa.ru/developers/api?lang=python#create_deal)

Билдер позволяет создать объект сделки — `DealRequest` программным способом, через объекты.

```python
import var_dump as var_dump
from yookassa import Deal
from yookassa.domain.models.deal import DealType, FeeMoment
from yookassa.domain.request import DealRequestBuilder

builder = DealRequestBuilder() \
.set_type(DealType.SAFE_DEAL) \
.set_fee_moment(FeeMoment.PAYMENT_SUCCEEDED) \
.set_description('SAFE_DEAL 123554642-2432FF344R') \
.set_metadata({'order_id': '37'})

request = builder.build()
# Можно что-то поменять, если нужно
request.description = 'SAFE_DEAL PYTHON 123554642-2432FF344R'
res = Deal.create(request)

var_dump.var_dump(res)
```
---

### Получить информацию о сделке

[Информация о сделке в документации](https://yookassa.ru/developers/api?lang=python)

Запрос позволяет получить информацию о текущем состоянии сделки по его уникальному идентификатору.

В ответ на запрос придет объект сделки - `DealResponse` в актуальном статусе.

```python
import var_dump as var_dump
from yookassa import Deal

res = Deal.find_one('dl-285e5ee7-0022-5000-8000-01516a44b147')

var_dump.var_dump(res)
```
---

### Получить список сделок с фильтрацией

[Список сделок в документации](https://yookassa.ru/developers/api?lang=python#get_deals_list)

Запрос позволяет получить список сделок, отфильтрованный по заданным критериям.

В ответ на запрос вернется список сделок с учетом переданных параметров. В списке будет информация о сделках,
созданных за последние 3 года. Список будет отсортирован по времени создания сделок в порядке убывания.

Если результатов больше, чем задано в `limit`, список будет выводиться фрагментами. В этом случае в ответе на запрос
вернется фрагмент списка и параметр `next_cursor` с указателем на следующий фрагмент.

```python
import var_dump as var_dump
from yookassa import Deal

cursor = None
data = {
"limit": 10, # Ограничиваем размер выборки
"status": "closed", # Выбираем только открытые сделки
"full_text_search": "PYTHON", # Фильтр по описанию сделки — параметру description
"created_at.gte": "2021-08-01T00:00:00.000Z", # Созданы начиная с 2021-08-01
"created_at.lt": "2021-11-20T00:00:00.000Z" # И до 2021-11-20
}

while True:
params = data
if cursor:
params['cursor'] = cursor
try:
res = Deal.list(params)
print(" items: " + str(len(res.items))) # Количество сделок в выборке
print("cursor: " + str(res.next_cursor)) # Указательна следующую страницу
var_dump.var_dump(res)

if not res.next_cursor:
break
else:
cursor = res.next_cursor
except Exception as e:
print(" Error: " + str(e))
break

```
[Подробнее о работе со списками](https://yookassa.ru/developers/using-api/lists)
91 changes: 91 additions & 0 deletions docs/examples/06-payouts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
## Работа с выплатами

SDK позволяет создавать, подтверждать, отменять выплаты, а также получать информацию о них.

Объект выплаты `PayoutResponse` содержит всю информацию о выплате, актуальную на текущий момент времени.
Он формируется при создании выплаты и приходит в ответ на любой запрос, связанный с выплатами.

* [Запрос на создание выплаты](#Запрос-на-создание-выплаты)
* [Запрос на создание выплаты через билдер](#Запрос-на-создание-выплаты-через-билдер)
* [Получить информацию о выплате](#Получить-информацию-о-выплате)

---

### Запрос на создание выплаты

[Создание выплаты в документации](https://yookassa.ru/developers/api?lang=python#create_payout)

Чтобы принять оплату, необходимо создать объект выплаты — `PayoutRequest`. Он содержит всю необходимую информацию
для проведения оплаты (сумму, валюту и статус). У выплаты линейный жизненный цикл,
он последовательно переходит из статуса в статус.

В ответ на запрос придет объект выплаты - `PayoutResponse` в актуальном статусе.

```python
import var_dump as var_dump
from yookassa import Payout
from yookassa.domain.common import PaymentMethodType
from yookassa.domain.models.currency import Currency

res = Payout.create({
"amount": {"value": 320.0, "currency": Currency.RUB},
"payout_destination_data": {'type': PaymentMethodType.YOO_MONEY, 'account_number': '41001614575714'},
"description": "Выплата по заказу №37",
"metadata": {
"order_id": "37"
},
"deal": {
"id": "dl-285e5ee7-0022-5000-8000-01516a44b147"
}
})

var_dump.var_dump(res)
```
---

### Запрос на создание выплаты через билдер

[Создание выплаты в документации](https://yookassa.ru/developers/api?lang=python#create_payout)

Билдер позволяет создать объект выплаты — `PayoutRequest` программным способом, через объекты.

```python
import var_dump as var_dump
from yookassa import Payout
from yookassa.domain.models.currency import Currency
from yookassa.domain.request import PayoutRequestBuilder

builder = PayoutRequestBuilder()
builder.set_amount({'value': 0.1, 'currency': Currency.RUB}) \
.set_description('Выплата по заказу №77') \
.set_payout_token('99091209012') \
.set_metadata({'order_id': '77'}) \
.set_deal({
'id': 'dl-285e5ee7-0022-5000-8000-01516a44b147'
})

request = builder.build()
# Можно что-то поменять, если нужно
request.description = 'Выплата по заказу №77'
res = Payout.create(request)

var_dump.var_dump(res)
```
---

### Получить информацию о выплате

[Информация о выплате в документации](https://yookassa.ru/developers/api?lang=python#get_payout)

Запрос позволяет получить информацию о текущем состоянии выплаты по его уникальному идентификатору.

В ответ на запрос придет объект выплаты в актуальном статусе.

```python
import var_dump as var_dump
from yookassa import Payout

res = Payout.find_one('po-21b23b5b-000f-5061-a000-0674e49a8c10')

var_dump.var_dump(res)
```
11 changes: 11 additions & 0 deletions docs/examples/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,14 @@
* [Запрос на создание чека через билдер](04-receipts.md#Запрос-на-создание-чека-через-билдер)
* [Получить информацию о чеке](04-receipts.md#Получить-информацию-о-чеке)
* [Получить список чеков с фильтрацией](04-receipts.md#Получить-список-чеков-с-фильтрацией)

#### [Работа со сделками](05-deals.md)
* [Запрос на создание сделки](05-deals.md#Запрос-на-создание-сделки)
* [Запрос на создание сделки через билдер](05-deals.md#Запрос-на-создание-сделки-через-билдер)
* [Получить информацию о сделке](05-deals.md#Получить-информацию-о-сделке)
* [Получить список сделок с фильтрацией](05-deals.md#Получить-список-сделок-с-фильтрацией)

#### [Работа с выплатами](06-payouts.md)
* [Запрос на создание выплаты](06-payouts.md#Запрос-на-создание-выплаты)
* [Запрос на создание выплаты через билдер](06-payouts.md#Запрос-на-создание-выплаты-через-билдер)
* [Получить информацию о выплате](06-payouts.md#Получить-информацию-о-выплате)
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8"
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9"
]
)
4 changes: 3 additions & 1 deletion src/yookassa/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
"""Top-level package for YooKassa API Python Client Library."""

from yookassa.configuration import Configuration
from yookassa.deal import Deal
from yookassa.payment import Payment
from yookassa.payout import Payout
from yookassa.receipt import Receipt
from yookassa.refund import Refund
from yookassa.settings import Settings
from yookassa.webhook import Webhook

__author__ = "YooMoney"
__email__ = '[email protected]'
__version__ = '2.1.5'
__version__ = '2.2.0'
Loading

0 comments on commit 0c2e5c0

Please sign in to comment.