---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://pay.yandex.ru/docs/en/custom/integration-guide-link.md
  - https://pay.yandex.ru/docs/ru/custom/integration-guide-link.md
  - href: ru/custom/integration-guide-link.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
title: "Яндекс\_Пэй без SDK\_— интеграция через платежные ссылки | Документация"
description: "Принимайте платежи без установки SDK. Простая интеграция Яндекс\_Пэй через генерацию платежных ссылок и редиректы."
---
> **Documentation Index:** Fetch the complete configuration index at https://pay.yandex.ru/docs/ru/llms.txt


# Интеграция для онлайн-магазинов (без SDK)

{% note tip %}

Мы создали этот способ для тех, кто хочет использовать API для создания и использования прямой ссылки на платежную форму Яндекс Пэй.

Но лучше использовать API Яндекс Пэй вместе с нашими готовыми библиотеками умных бейджей, виджетов и кнопок оплаты (SDK), чтобы не потерять [преимущества сервиса](https://pay.yandex.ru/docs/ru/custom/index.md#guide).

{% endnote %}

## План интеграции {#plan}

1. [Подайте заявку](https://pay.yandex.ru/docs/ru/console/registration.md#application) в личном кабинете и дождитесь письма об активации [тестовой](https://pay.yandex.ru/docs/ru/testing.md) среды.

1. Обратитесь к методу [/orders](https://pay.yandex.ru/docs/ru/custom/backend/yandex-pay-api/order/merchant_v1_orders-post.md), чтобы создать ссылку на платежную форму Яндекс Пэй, укажите параметры метода, например:

    | **Параметр**                    | **Описание**                                                |
    | --------------------------------| ----------------------------------------------------------- |
    | `cart`                          | Свойства корзины товаров, включая код и наименование товаров|
    | `availablePaymentMethods`       | Доступные клиенту методы оплаты                             |

1. URL формы оплаты возвращается в поле `paymentUrl` ответа на запрос [/orders](https://pay.yandex.ru/docs/ru/custom/backend/yandex-pay-api/order/merchant_v1_orders-post.md#createorderresponsedata). Перенаправьте пользователя на этот URL для оплаты заказа.

    {% cut "Примеры кода" %}

    {% list tabs %}

    - httpie

      Пример получения ссылки на оплату с помощью [HTTPie](https://httpie.io):

      ```bash
      http POST https://sandbox.pay.yandex.ru/api/merchant/v1/orders \
        Authorization:"API-Key a5f49c84-0baa-41e1-814f-6f99746a6987" \
        cart:='{}' \
        orderId=Order-$RANDOM \
        currencyCode=RUB \
        availablePaymentMethods:='["CARD", "SPLIT"]' \
        redirectUrls:='{"onError": "https://merchant.example/error.html", "onSuccess": "https://merchant.example/success.html"}' \
        cart:='{ "total": {"amount": "10"}, "items": [{"productId": "p1", "title": "Яндекс.Станция Мини", "quantity": {"count": 1}, "total": "10"}]}'
      ```

    - Node

      Пример кода на бэкенде магазина на [Node.js](https://nodejs.org/):

      ```javascript
      const https = require("https");

      function createOrder(orderId) {
        const ORDER_CREATE_URL =
            "https://sandbox.pay.yandex.ru/api/merchant/v1/orders";

        // Для sandbox-окружения в качестве ключа авторизации используется идентификатор продавца.
        // Для production-окружения API Key необходимо получить в личном кабинете продавца.
        const API_KEY = "a5f49c84-0baa-41e1-814f-6f99746a6987";

        const orderData = {
            // Уникальный ID заказа в системе продавца (обязательный параметр)
            orderId: orderId,

            // Информация о корзине покупателя
            cart: {
                // Состав корзины
                items: [
                    {
                        productId: "3",
                        total: "15980.00",
                        title: "Яндекс.Станция Мини с часами, красный гранат",
                        quantity: {
                            count: "2",
                        },
                    },
                ],

                // Итоговая сумма заказа
                total: {
                    amount: "15480.00",
                },
            },

            // Код валюты заказа (ISO 4217)
            currencyCode: "RUB",

            // Merchant ID необходимо получить в личном кабинете продавца после регистрации.
            merchantId: "a5f49c84-0baa-41e1-814f-6f99746a6987",

            // Ссылки на сайт продавца, по которым будет перенаправлен пользователь после оплаты
            redirectUrls: {
                onSuccess: "https://your-site.ru/page/success",
                onError: "https://your-site.ru/page/error",
            },

            // Доступные методы оплаты.
            // Варианты:
            // - ["SPLIT"] — на форме доступна оплата только через Сплит
            // - ["CARD"] — на форме будет доступна оплата только банковской картой
            // - ["SPLIT", "CARD"] — на форме будет представлен выбор способа оплаты: карта или Сплит. 
            availablePaymentMethods: ["CARD", "SPLIT"],

            // Время жизни заказа (в секундах)
            ttl: 1800,
        };

        const data = JSON.stringify(orderData);

        const requestOptions = {
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                Authorization: `Api-Key ${API_KEY}`,
            },
        };

        const req = https.request(ORDER_CREATE_URL, requestOptions, (res) => {
            let response = [];

            res.on("data", (chunk) => {
                response.push(chunk);
            });

            res.on("end", () => {
                response = JSON.parse(Buffer.concat(response).toString());

                // На сторону фронтенда необходимо отправить paymentUrl
                console.log(response.data.paymentUrl);
            });
        });

        req.on("error", (err) => {
            console.log("Error: ", err.message);
        });

        req.write(data);
        req.end();
      }

      createOrder("your-order-id");
      ```

    {% endlist %}

    {% endcut %}

1. Получите подтверждение оплаты заказа при помощи [/webhook](https://pay.yandex.ru/docs/ru/custom/backend/merchant-api/webhook.md) или опросом метода [/orders](https://pay.yandex.ru/docs/ru/custom/backend/yandex-pay-api/order/merchant_v1_order-get.md).

1. Переключите среду с тестовой на боевую. Вы готовы принимать оплату!

    {% cut "Как выглядит платежная форма?" %}

    Выберите значение в списке **Способ оплаты** и нажмите **Перейти к оплате**. Откроется тестовая платежная форма.

    {% include notitle [_](./web-sdk/_snippets/psp-like.mdx) %}

    {% endcut %}

1. [Протестируйте](https://pay.yandex.ru/docs/ru/testing.md) работу сервиса.

1. Не забудьте про [фискализацию](https://pay.yandex.ru/docs/ru/fiscalization.md).

## Способы и механики оплаты

О доступных способах и механиках оплаты читайте в [специальном разделе](https://pay.yandex.ru/docs/ru/payments/index.md).

<!--

{% list tabs %}

- Полная оплата

  {% cut "Схема" %}

  ![Схема оплаты через платежную ссылку: создание заказа, редирект и подтверждение](./_assets/link-scheme.png)

  {% endcut %}

  Клиентский путь проведения оплаты покупки выполняется в следующей последовательности:

  1. Покупатель формирует корзину товаров.
  2. Покупатель выбирает метод оплаты Яндекс Пэй и переходит к оплате. Интерфейс выбора метода оплаты реализуется продавцом согласно [правилам оформления бренда](https://pay.yandex.ru/docs/ru/branding.md).
  3. Бэкенд магазина через запрос [/orders](https://pay.yandex.ru/docs/ru/custom/backend/yandex-pay-api/order/merchant_v1_orders-post.md) в [Яндекс Пэй API]../custom/back-index) отправляет в бэкенд Яндекс Пэй корзину товаров и в ответ получает ссылку на форму оплаты. Здесь же продавец передает доступные данному заказу способы оплаты (Пэй и/или Сплит).
  4. Фронтенд магазина перенаправляет пользователя на форму оплаты Яндекс Пэй.
  5. Покупатель авторизуется со своим Яндекс ID, если ранее он не был авторизован на Яндексе. Подробнее про использование сервиса Яндекс ID в вашей компании читайте в [документации](https://yandex.ru/dev/id/doc/ru/).
  6. Покупатель переходит на форму оплаты Яндекс Пэй, которая отрисовывает корзину и сумму к оплате.
  7. Покупатель выбирает способ оплаты покупки (Пэй или Сплит) и нажимает кнопку оплаты.
      1. {% include notitle [pay-type](../_includes/pay-type.md) %}
      2. Если выбран Сплит, то покупатель выбирает интересующее количество платежей и выполняет первый платеж со своих привязанных карт либо привязывает новую.

  8. Яндекс Пэй проводит платеж, списывая денежные средства с выбранной карты покупателя.
  9. Яндекс Пэй уведомляет продавца о статусе платежа через вызов [/webhook](https://pay.yandex.ru/docs/ru/custom/backend/merchant-api/webhook.md), если был настроен [Callback URL](https://pay.yandex.ru/docs/ru/console/settings.md#callback-settings). Также бэкенд магазина может самостоятельно получить статус заказа через запрос [/orders/\{order_id\}](https://pay.yandex.ru/docs/ru/custom/backend/yandex-pay-api/order/merchant_v1_order-get.md):

     1. `PENDING` — оплата еще в процессе, нужно запросить статус платежа позже. В нотификации данный статус не отправляется.
     2. `FAILED` — оплата завершилась неудачно. Терминальный неуспешный статус.
     3. `CAPTURED` — оплата совершена. Терминальный успешный статус.

  10. Яндекс Пэй перенаправляет покупателя на полученные в методе [/orders](https://pay.yandex.ru/docs/ru/custom/backend/yandex-pay-api/order/merchant_v1_orders-post.md) ссылки для успешных или неуспешных оплат.
  11. На следующие сутки партнеру осуществляется финансирование покупки.

- Оплата повторяющимися платежами (Подписка)

  {% cut "Схема" %}

  ![image.png](_assets/scheme-recurrents.png)

  {% endcut %}

  Клиентский путь проведение оплаты рекуррентных платежей выполняется в следующей последовательности:

  1. Покупатель формирует корзину товаров на сайте продавца. Здесь же выбирает продукт “Подписка“ и его условия. Продукты могут быть следующего вида

     1. Периодичность подписки в единицах измерения и их количество;

     2. Сумма следующих списаний;

     3. Наличие пробного периода (Триал): до конкретной даты или периодичность с единицей измерения

  2. По факту готовности оплатить покупатель нажимает размещенную ранее продавцом кнопку оплаты Яндекс Пэй.

  3. После нажатия кнопки оплаты Яндекс Пэй:

     1. Из SDK Яндекс Пэй вызывается callback на фронтенде магазина.

     2. Фронтенд магазина создает заказ на бэкенде магазина.

     3. Бэкенд магазина передает заказ в бэкенд Яндекс методом [/subscriptions](https://pay.yandex.ru/ru/docs/custom/backend/yandex-pay-api/subscriptions/merchant_v1_subscriptions-post). В ответ возвращается ссылка для перенаправления покупателя на фронтенд проведения оплаты в Яндекс.

     4. Фронтенд магазина получает ссылку на заказ Пэй, которую транслирует в SDK Яндекс Пэй.

  4. SDK Яндекс Пэй загружает с бэкенда Яндекс информацию о корзине товаров, которую необходимо оплатить покупателю.

  5. SDK Яндекс Пэй отображает покупателю форму оплаты с информацией о корзине товаров и условиями подписки.

     1. В случае Web SDK происходит перенаправление на полученную ссылку для оплаты.

     2. В случае Mobile SDK открывается формы для оплаты.

  6. Покупатель авторизуется со своим Яндекс ID, если ранее он не был авторизован на Яндексе. Подробнее про использование сервиса Яндекс ID в вашей компании читайте в [документации](https://yandex.ru/dev/id/doc/ru/).

     1. Покупатель выбирает способ оплаты покупки и нажимает кнопку оплаты. На текущий момент процесс подписок не поддерживает оплату Сплитом.

        1. При оплате сразу с кешбэком пользователь выбирает сохраненную в Яндексе банковскую карту или СБП-привязку к счету.

        2. Если клиент выбрал продукт с Триалом, то запускается процесс привязки карты за продуктом путем списания и возврата символической суммы.

  7. Яндекс Пэй проводит платеж, списывая денежные средства с выбранной карты покупателя.

  8. Яндекс Пэй уведомляет продавца о статусе платежа через вызов [/webhook](https://pay.yandex.ru/ru/docs/custom/backend/merchant-api/webhook), если был настроен [Callback URL](https://pay.yandex.ru/ru/docs/console/settings-pay-split.md#callback-settings). Также бэкенд магазина может самостоятельно получить статус заказа через запрос [/orders/\{order_id\}](https://pay.yandex.ru/ru/docs/custom/backend/yandex-pay-api/order/merchant_v1_order-get):

     1. `PENDING` — оплата еще в процессе, нужно запросить статус платежа позже. В нотификации данный статус не отправляется.

     2. `FAILED` — оплата завершилась неудачно. Терминальный неуспешный статус.

     3. `CAPTURED` — оплата совершена. Терминальный успешный статус.

  9. Яндекс Пэй перенаправляет покупателя на полученные в методе [/subscriptions](https://pay.yandex.ru/ru/docs/custom/backend/yandex-pay-api/subscriptions/merchant_v1_subscriptions-post) ссылки для успешных или неуспешных оплат.

  10. На следующие сутки продавцу осуществляется финансирование покупки. Если был у продукта подписки Триал, то денежные средства за покупку не перечисляются, продавцу нужно списать самостоятельно деньги в дату завершения Триала.

  <h3>Списание денежных средств у клиента</h3>

  Продавец инициирует списание денежных средств у клиента по факту завершения предыдущей подписки или если завершился пробный период:

  1. По факту наступления необходимости списания у клиента очередного платежа, бэкенд магазина формирует новую корзину товаров для оплаты и вызывает метод [/subscriptions/recur](https://pay.yandex.ru/ru/docs/custom/backend/yandex-pay-api/subscriptions/merchant_v1_subscriptions_recur-post), где передает так же orderId первоначального платежа.

  2. Яндекс Пэй связывает новую оплату с первоначальным платежом и списывает у клиента запрошенную продавцом стоимость заказа.

  3. Яндекс Пэй уведомляет продавца о статусе платежа через вызов [/webhook](https://pay.yandex.ru/ru/docs/custom/backend/merchant-api/webhook), если был настроен [Callback URL](https://pay.yandex.ru/ru/docs/console/settings-pay-split.md#callback-settings). Также бэкенд магазина может самостоятельно получить статус заказа через запрос [/orders/\{order_id\}](https://pay.yandex.ru/ru/docs/custom/backend/yandex-pay-api/order/merchant_v1_order-get):

     1. `PENDING` — оплата еще в процессе, нужно запросить статус платежа позже. В нотификации данный статус не отправляется.

     2. `FAILED` — оплата завершилась неудачно. Терминальный неуспешный статус.

     3. `CAPTURED` — оплата совершена. Терминальный успешный статус.

  4. На следующие сутки продавцу осуществляется финансирование покупки.

- Рекарринговый платеж (Привязка карты)

  Если вы хотите предложить вашим клиентам привязать карту для автоматических списаний, узнайте, как это работает в Яндекс Пэй.

  {% note info %}
  
  Данная механика **не подходит** для способа оплаты в **Сплит**.

  {% endnote %}

  <h2>Привязка карты</h2>

  1. Разместите кнопку привязки карты в удобном месте (например, в разделе «Способы оплаты»),

  1. Настройте бэкенд магазина так, чтобы после нажатия на кнопку он вызывал метод [/merchant_v1_subscriptions](./custom/backend/yandex-pay-api/subscriptions/merchant_v1_subscriptions-post),

  1. В ответ на метод, бэкенд магазина получит ссылку на оплату (см. параметр `paymentUrl`) и уникальный идентификатор подиски (см. параметр `subscriptionId`),

  1. Настройте бэкенд магазина так, чтобы он передавал значение параметра `paymentUrl` в SDK, а ссылка открылась в браузере покупателя.

  1. Чтобы получать уведомления о статусе оплаты, настройте бэкенд магазина так, чтобы он вызывал метод [/orders/{order_id}](./custom/backend/yandex-pay-api/order/merchant_v1_order-get) или ожидал уведомления по [/webhook](./custom/backend/merchant-api/webhook) (для этого настройте также параметр [Callback URL](https://pay.yandex.ru/docs/ru/console/settings-pay-split.md#callback-settings) в личном кабинете Яндекс Пэй).

    Статусы привязки:

     #|
     || PENDING |

   Привязка карты в процессе. Повторите запрос позже.

   Статус не отправляется в уведомлениях. ||
     || FAILED |

   Привязка карты завершилась неудачей либо покупатель не успел привязать свою карту за отведенное ему время (параметр `ttl`).

   Терминальный неуспешный статус. ||
     || CAPTURED |

   Карта привязана.

   Терминальный успешный статус. ||
     |#

  1. Покупатель приступает к привязке карты,
  
   - Открывает ссылку на оплату (привязку),
   - Авторизуется с [Яндекс ID](https://yandex.ru/dev/id/doc/ru/), если не был авторизован ранее,
   - Выбирает карту для привязки или добавляет новую,
   - Подтверждает списание тестовой суммы (1 руб.) для проверки 3ds. Сумма (1 руб.) будет возращена после прохождения проверки.
  
  1. Настройте страницу с информацией о статусе привязке карты и кнопкой возврата в магазин так, чтобы нажатие на кнопку вызывало URL, переданный ранее в параметре `redirectUrls`.

  1. Настройте отображение для пользователя информации о добавленной карте для оплаты (переданные в параметре `paymentMethod` метода [/orders/{order_id}](./custom/backend/yandex-pay-api/order/merchant_v1_order-get) и конпки для привязки новой карты при помощи Яндекс Пэй.

  Например:

   #|
   || cardLast4 | Последние 4 цифры привязанной карты ||
   || cardNetwork | Платежная система привязанной карты ||
   |#

  <h2>Списание средств</h2>
  
  1. Настройте бэкенд магазина так, чтобы после формирования корзины товаров для оплаты, он вызывал метод [/subscriptions/recur](./custom/backend/yandex-pay-api/subscriptions/merchant_v1_subscriptions_recur-post), и передавал в поле `parentOrderId` параметр `orderId`,

  1. Происходит списание стоимости заказа с карты, которая была привязана.

  1. Чтобы получать уведомления о статусе оплаты, настройте бэкенд магазина так, чтобы он вызывал метод [/orders/{order_id}](./custom/backend/yandex-pay-api/order/merchant_v1_order-get) или ожидал уведомления по [/webhook](./custom/backend/merchant-api/webhook) (для этого настройте также параметр [Callback URL](https://pay.yandex.ru/docs/ru/console/settings-pay-split.md#callback-settings) в личном кабинете Яндекс Пэй).

   Статусы оплаты:

   #|
   || PENDING |

   Оплата в процессе. Повторите запрос позже.

   Статус не отправляется в уведомлениях. ||
   || FAILED |

   Оплата завершилась неудачей либо покупатель не успел привязать свою карту за отведенное ему время (параметр `ttl`).

   Терминальный неуспешный статус. ||
   || CAPTURED |

   Оплата прошла успешно.

   Терминальный успешный статус. ||
   |#

  1. Деньги за покупку поступят партнеру на следующие сутки.

{% endlist %}

## Проведение возврата {#refund}

Проведение возврата возможно двумя способами:

1. В личном кабинете в разделе [Платежи](https://pay.yandex.ru/docs/ru/custom/refund-payments.md).
1. Через [интеграцию по API](https://pay.yandex.ru/docs/ru/custom/refund-payments.md).

## Что дальше {#next-step}

{% include notitle [pay-testing](../_includes/pay-testing.md) %}

## Виджеты Яндекс Пэй {#widget}

Ознакомьтесь с возможностями [SDK](https://pay.yandex.ru/docs/ru/custom/web-sdk/index.md), если вы хотите сделать на своем сайте динамическое отображение кнопок и виджетов. Вы можете использовать решения как для сайтов, так и для мобильных приложений.

В [план интеграции](#plan) в этом случае добавляется этап с установкой кнопки или виджета SDK.

Подробнее читайте в разделе [Оплата Яндекс Пэй и Сплит через кнопку](https://pay.yandex.ru/docs/ru/custom/integration-guide.md). -->

{% included (./web-sdk/_snippets/psp-like.mdx) %}
<!-- markdownlint-disable -->

<div class="ypd-preview">
    <a href="https://yastatic.net/s3/pay-static/docs/v46.0.0/custom/psp-like/index.html" target="_blank">
        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"><path fill="currentColor" d="M18 19H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h5c.55 0 1-.45 1-1s-.45-1-1-1H5c-1.11 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-6c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55-.45 1-1 1zM14 4c0 .55.45 1 1 1h2.59l-9.13 9.13c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L19 6.41V9c0 .55.45 1 1 1s1-.45 1-1V3h-6c-.55 0-1 .45-1 1z"></path></svg>
    </a>
    <iframe src="https://yastatic.net/s3/pay-static/docs/v46.0.0/custom/psp-like/index.html" style="height: 270px"></iframe>
</div>

{% endincluded %}