1
0
зеркало из https://github.com/glebtv/yookassa.git synced 2026-08-28 15:16:18 +03:00
Files
yookassa/docs/04-receipts.md
Ivan Shamatov a61bbaf461 Initial setup for docs (#22)
* Initial setup for docs

* running payments endpoints

* documentation for deals and payouts
2021-11-20 14:14:59 +03:00

6.7 KiB

Работа с чеками

Для тех, кто использует решение ЮKassa для 54-ФЗ.

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


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

Информация о создании чека в документации

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

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

res = Yookassa.receipts.create({
  "customer": {
    "full_name": "Ivanov Ivan Ivanovich",
    "email": "email@email.ru",
    "phone": "+79211234567",
    "inn": "6321341814"
  },
  "payment_id": "24b94598-000f-5000-9000-1b68e7b15f3f",
  "type": "payment",
  "send": true,
  "items": [
    {
      "description": "Наименование товара 1",
      "quantity": 1.000,
      "amount": {
        "value": "14000.00",
        "currency": "RUB"
      },
      "vat_code": "2",
      "payment_mode": "full_payment",
      "payment_subject": "commodity",
      "country_of_origin_code": "CN",
    },
    {
      "description": "Наименование товара 2",
      "quantity": 1.000,
      "amount": {
        "value": "1000.00",
        "currency": "RUB"
      },
      "vat_code": "2",
      "payment_mode": "full_payment",
      "payment_subject": "commodity",
      "country_of_origin_code": "CN",
    },
  ],
  "settlements": [
    {
      "type": "prepayment",
      "amount": {
        "value": "8000.00",
        "currency": "RUB"
      },
    },
    {
      "type": "prepayment",
      "amount": {
        "value": "7000.00",
        "currency": "RUB"
      },
    }
  ]
})

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

Информация о создании чека в документации

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


builder = ReceiptRequestBuilder()
builder.set_type(ReceiptType.PAYMENT) \
  .set_payment_id('215d8da0-000f-50be-b000-0003308c89be') \
  .set_customer({'phone': '79990000000', 'email': 'test@email.com'}) \
  .set_tax_system_code(1) \
  .set_items([
    {
      "description": "Product 1",
      "quantity": 2.0,
      "amount": {
        "value": 250.0,
        "currency": Currency.RUB
      },
      "vat_code": 2
    },
    ReceiptItem({
      "description": "Product 2",
      "quantity": 1.0,
      "amount": {
        "value": 100.0,
        "currency": Currency.RUB
      },
      "vat_code": 2
    })
  ]) \
  .set_settlements([
    Settlement({
      'type': SettlementType.CASHLESS,
      'amount': {
        'value': 350.0,
        'currency': Currency.RUB
      }
    })
  ])

request = builder.build()
# Можно что-то поменять, если нужно
request.on_behalf_of = 123456

Yokassa.receipts.create(request)

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

Информация о чеке в документации

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

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

Yookassa.receipts.find('rt-2da5c87d-0384-50e8-a7f3-8d5646dd9e10')

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

Список чеков в документации

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

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

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

cursor = nil
filters = {
  "limit": 2,                                            # Ограничиваем размер выборки
  "payment_id": "21b23b5b-000f-5061-a000-0674e49a8c10",  # Выбираем только по конкретному платежу
  "created_at.gte": "2020-08-08T00:00:00.000Z",          # Созданы начиная с 2020-08-08
  "created_at.lt": "2020-10-20T00:00:00.000Z"            # И до 2020-10-20
}

def get_items(filters:, next_cursor: nil, items: [])
  result = Yookassa.receipts.list(filters.merge(next_cursor: next_cursor))
  accumulated_items = result.items + items

  return accumulated_items if result.next_cursor.nil?

  get_items(filters: filters, next_cursor: result.next_cursor, items: accumulated_items)
end

get_items(filters: filters, next_cursor: cursor)

Подробнее о работе со списками