Прием платежей
Если вы используете решение Яндекс.Кассы для платформ, вы можете в одном платеже принимать оплату товаров из разных магазинов. Для этого нужно передать Яндекс.Кассе один общий запрос на создание платежа с дополнительными данными о том, как распределить деньги между магазинами.
 Сценарий взаимодействия
  1. Отправьте Яндекс.Кассе запрос на создание платежа, передайте в нём все необходимые параметры, включая данные о распределении денег между магазинами.
  2. При необходимости инициируйте сценарий подтверждения платежа пользователем.
  3. Если вы проводите платеж в две стадии, подтвердите, что вы готовы принять платеж.
После успешного завершения оплаты Яндекс.Касса перечислит деньги магазинам, в которых были приобретены товары.
 Создание платежа
Чтобы принять платеж от пользователя, отправьте Яндекс.Кассе запрос на создание платежа . В запросе передайте сумму платежа в параметре
amount
, данные для оплаты выбранным способом и массив
transfers
с распределением денег между магазинами.
В запросе можно передавать дополнительные параметры , кроме объекта
receipt
. Если вы используете решение Яндекс.Кассы для работы по 54-ФЗ, передавайте данные для формирования чека в отдельном запросе.
Пример запроса на создание платежа
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/payments \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "amount": {
          "value": "17000.00",
          "currency": "RUB"
        },        
        "capture": false,
        "confirmation": {
          "type": "redirect",
          "return_url": "https://www.merchant-website.com/return_url"
        },
        "description": "Заказ No1",
        "transfers": [
        {
          "account_id": "123",
          "amount": {
            "value": "5000.00",
            "currency": "RUB"
          }
        },
        {
          "account_id": "456",
          "amount": {
            "value": "12000.00",
            "currency": "RUB"
          }
        }
       ]
      }'
В ответ Яндекс.Касса отправит вам объект платежа  в актуальном статусе.
Пример объекта платежа
JSON
{  
  "id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
  "status": "waiting_for_capture",
  "paid": true,
  "amount": {
    "value": "17000.00",
    "currency": "RUB"
  },
  "authorization_details": {
    "rrn": "922892644501",
    "auth_code": "079297"
  },
  "created_at": "2019-08-16T10:44:12.717Z",
  "description": "Заказ No1",
  "expires_at": "2019-08-23T10:44:14.664Z",
  "metadata": {
  },
  "payment_method": {
    "type": "bank_card",
    "id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
    "saved": false,
    "card": {
      "first6": "666666",
      "last4": "4444",
      "expiry_month": "06",
      "expiry_year": "2022",
      "card_type": "MasterCard",
      "issuer_country": "RU",
      "issuer_name": "Tinkoff Bank"
    },
    "title": "Bank card *4444"
   },
  "recipient": {
    "account_id": "100001",
    "gateway_id": "10001"
  },"transfers": [{"account_id": "123","amount": {
        "value": "5000.00",
        "currency": "RUB"
     },
     "status": "waiting_for_capture"},{
     "account_id": "456",
     "amount": {
       "value": "12000.00",
       "currency": "RUB"
     },
     "status": "waiting_for_capture"
    }
   ],
  "refundable": false,
  "test": false
 }
 Подтверждение платежа
Если вы проводите платеж в две стадии, вам необходимо его подтвердить — отправить Яндекс.Кассе запрос на подтверждение .
Если вы подтверждаете платеж целиком, отправьте запрос без параметров — данные о распределении денег между магазинами у Яндекс.Кассы уже есть.
Пример запроса на подтверждение всей суммы платежа
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/payments/{payment_id}/capture \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json'
Если вы хотите подтвердить часть платежа (например, если в магазине нет одного или нескольких товаров), в запросе передайте Яндекс.Кассе объект
transfers
с актуальным распределением денег — сколько и в какой магазин нужно перевести.
Запрос на подтверждение платежа  нужно передавать без объекта
receipt
. После частичного подтверждения платежа нужно сформировать два новых чека: чек возврата прихода первоначального платежа (на полную сумму) и чек прихода с учетом скорректированных данных.
Пример запроса на частичное подтверждение платежа
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/payments/{payment_id}/capture \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
         "amount": {
           "value": "11000.00",
           "currency": "RUB"
         },
         "transfers": [
         {
           "account_id": "123",
           "amount": {
             "value": "2000.00",
             "currency": "RUB"
           }
         },
         {
           "account_id": "456",
           "amount": {
             "value": "9000.00",
             "currency": "RUB"
           }
         }
        ]
      }'
При успешном подтверждении платеж перейдет в статус
succeeded
. Чтобы узнать текущий статус платежа, вы можете запросить информацию о платеже  или настроить уведомления от Яндекс.Кассы.
Пример объекта платежа
JSON
{
  "id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
  "status": "succeeded",
  "paid": true,
  "amount": {
    "value": "11000.00",
    "currency": "RUB"
  },
  "authorization_details": {
    "rrn": "922892644501",
    "auth_code": "079297"
  },
  "captured_at": "2019-08-16T12:23:12.849Z",
  "created_at": "2019-08-16T10:44:12.717Z",
  "description": "Заказ от Fri, 16 Aug 2019 13:43:59 +0300",
  "metadata": {
  },
  "payment_method": {
    "type": "bank_card",
    "id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
    "saved": false,
    "card": {
      "first6": "555555",
      "last4": "4444",
      "expiry_month": "06",
      "expiry_year": "2022",
      "card_type": "MasterCard",
      "issuer_country": "RU",
      "issuer_name": "Tinkoff Bank"
    },
    "title": "Bank card *4444"
  },
  "recipient": {
    "account_id": "100001",
    "gateway_id": "10001"
  },
  "refundable": true,
  "refunded_amount": {
    "value": "0.00",
    "currency": "RUB"
  },
  "transfers": [{"account_id": "123","amount": {
         "value": "2000.00",
         "currency": "RUB"
       },
       "status": "succeeded"
     },
     {
       "account_id": "456",
       "amount": {
         "value": "9000.00",
         "currency": "RUB"
       },
       "status": "succeeded"}
 ],
 "test": false
}
 Что почитать еще
Возврат платежей для платформОтправка чеков для платформОплата по 54-ФЗ