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

Совет

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

Но лучше использовать API Яндекс Пэй вместе с нашими готовыми библиотеками умных бейджей, виджетов и кнопок оплаты (SDK), чтобы не потерять преимущества сервиса.

План интеграции

  1. Подайте заявку в личном кабинете и дождитесь письма об активации тестовой среды,

  2. Обратитесь к методу /orders, чтобы создать ссылку на платежную форму Яндекс Пэй, укажите параметры метода, например:

    Параметр Описание
    cart Свойства корзины товаров, включая код и наименование товаров
    availablePaymentMethods Доступные клиенту методы оплаты
  3. URL формы оплаты возвращается в поле paymentUrl ответа на запрос /orders. Перенаправьте пользователя на этот URL для оплаты заказа.

    Примеры кода

    Пример получения ссылки на оплату с помощью HTTPie:

    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.js:

    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");
    
  4. Получите подтверждение оплаты заказа при помощи /webhook или опросом метода /orders.

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

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

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

  6. Протестируйте работу сервиса.

  7. Не забудьте про фискализацию.

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

О доступных способах и механиках оплаты читайте в специальном разделе.