Яндекс Пэй

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

Подключение одно на все способы. Какие из них показывать покупателю, вы выбираете
в настройках проекта или прямо в ссылке: например, только Сплит для дорогих товаров.

Подключение

Шаг 1. Настройки в кабинете Яндекс Пэй

  1. Зарегистрируйте магазин в консоли Яндекс Пэй и
    пройдите модерацию.
  2. Откройте Настройки и скопируйте Merchant ID.
  3. Там же нажмите Выпустить ключ Merchant API и сохраните ключ. Он показывается
    один раз, при закрытии окна посмотреть его снова нельзя.
  4. Нажмите Добавить Callback URL и вставьте адрес:
https://chatter.salebot.pro/yandex_pay_callback

Пункты «Добавить Callback URL для YCP» и «Чекаут» относятся к другому продукту
Яндекса и для работы с Salebot не нужны.

Шаг 2. Настройки в Salebot

Откройте в проекте Интеграции → Платёжные системы → Яндекс Пэй и заполните:

Поле Что указать
Merchant ID идентификатор из консоли Яндекса
Ключ Merchant API ключ из консоли Яндекса
Тестовый режим включите только на время проверки, см. раздел «Тестовый режим»
Ставка НДС для чека ставка, которая попадёт в чек покупателя. Если чеки вы не отправляете, оставьте пустым
Способы оплаты по умолчанию что показывать на форме оплаты: карта и Сплит, только карта или только Сплит

Чтобы отключить Яндекс Пэй, очистите поля Merchant ID и ключа.

Как принимать оплату

Кнопка оплаты в блоке

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

Функции калькулятора

get_yandex_pay_payment_url(amount, description, products_for_receipt, customer_phone, customer_email, expired, payment_methods, preferred_method, extra_params) — создаёт ссылку на оплату.

Параметр Описание
amount сумма в рублях, минимум 1 ₽. Единственный обязательный параметр
description назначение платежа. Показывается покупателю на форме оплаты и попадает в чек, если чек не задан отдельно. Необязательный параметр
products_for_receipt позиции чека, JSON-массив. Формат тот же, что у get_tinkoff_payment_url, см. раздел «Чек». Необязательный параметр
customer_phone телефон покупателя. Необязательный параметр
customer_email почта покупателя. На неё Яндекс отправит электронный чек. Необязательный параметр
expired срок жизни ссылки в секундах, от 120 до 604800 (7 дней). По умолчанию 1800 (30 минут). Необязательный параметр
payment_methods способы оплаты на форме: "CARD" — только карта, "SPLIT" — только Сплит, "CARD,SPLIT" — покупатель выбирает сам. Если не указать, берётся настройка проекта. Необязательный параметр
preferred_method какой способ будет выбран на форме заранее: "SPLIT" или "CARD". Необязательный параметр
extra_params JSON с дополнительными полями запроса к Яндексу для тонкой настройки, например {"orderSource":"CRM"}. Необязательный параметр

get_yandex_split_payment_url(amount, description, products_for_receipt, customer_phone, customer_email, expired, extra_params) — то же самое, но на форме только Сплит.

Результат функции — ссылка на оплату. Запишите её в переменную и отправьте клиенту.

Пример. Ссылка на 2990 ₽, покупатель сам выбирает карту или Сплит:

pay_link = get_yandex_pay_payment_url(2990, "Курс «Старт»")

Пример. Только Сплит, ссылка живёт час, чек уйдёт на почту клиента:

pay_link = get_yandex_split_payment_url(2990, "Курс «Старт»", "", #{phone}, #{email}, 3600)

Пример. Карта и Сплит, но форма открывается сразу на Сплите:

pay_link = get_yandex_pay_payment_url(2990, "Курс «Старт»", "", "", #{email}, "", "CARD,SPLIT", "SPLIT")

Если ссылка не создалась, функция вернёт пустое значение, а текст ошибки будет в
переменной error_payment_func.

Магазин, лендинги и курсы

В настройках оплаты магазина, минилендинга или тарифа курса выберите Яндекс Пэй
в списке платёжных систем. Способы оплаты на форме берутся из настроек проекта.

Яндекс Сплит

Сплит подключается в консоли Яндекса вместе с Яндекс Пэй, отдельной настройки в Salebot
для него нет. Чтобы предлагать покупателю только Сплит:

  • для всего проекта — выберите «Только Сплит» в поле «Способы оплаты по умолчанию»;
  • для отдельной ссылки — используйте get_yandex_split_payment_url или передайте
    "SPLIT" в параметре payment_methods.

Сумма к вам приходит целиком и сразу, независимо от того, на сколько частей покупатель
разбил платёж. Чем оплатили, можно узнать из переменных после оплаты:
yandex_pay_payment_method и yandex_pay_is_split.

Чек

Яндекс Пэй умеет отправлять покупателю электронный чек. Для этого:

  1. Включите фискализацию в консоли Яндекса.
  2. Укажите ставку НДС в настройках Яндекс Пэй в Salebot.
  3. Передавайте почту или телефон покупателя: без контакта чек отправить некуда.

Если в ссылке не передан список позиций, в чек попадает одна позиция с названием из
description на всю сумму. Чтобы передать несколько позиций, заполните
products_for_receipt:

[
  {
    "name": "Курс «Старт»",
    "quantity": 1,
    "price": 2490,
    "amount": 2490,
    "tax": "4",
    "object": "service",
    "method": "full_payment"
  },
  {
    "name": "Консультация",
    "quantity": 1,
    "price": 500,
    "amount": 500,
    "tax": "1"
  }
]
Поле Описание
name название позиции
quantity количество
price цена за единицу
amount сумма по позиции, price × quantity
tax ставка НДС: 1 — без НДС, 2 — 0 %, 3 — 10 %, 4 — 20 %, 5 — 10/110, 6 — 20/120, 7 — 5 %, 8 — 7 %, 10 — 5/105, 11 — 7/107, 12 — 22 %, 13 — 22/122. Если не указать, берётся ставка из настроек проекта
object предмет расчёта: commodity — товар, service — услуга, payment — платёж. Необязательное поле
method способ расчёта: full_payment — полная оплата, full_prepayment — предоплата. Необязательное поле

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

Колбеки: как бот узнаёт об оплате

После оплаты Яндекс присылает уведомление, и в диалог с клиентом приходит служебное
сообщение:

KEY_success 2990

где KEY — первые 10 символов вашего ключа Merchant API, а число — сумма платежа.

Настройте на это сообщение блок, который выдаёт клиенту доступ или подтверждает заказ.

Если оплата не прошла или ссылка истекла, приходит:

KEY_fail 2990

Обратите внимание на сроки. Ссылка перестаёт работать в момент истечения expired
(по умолчанию через 30 минут). Сообщение _fail по неоплаченной ссылке Яндекс
присылает позже, обычно через 15–40 минут после истечения. Если сценарию нужно точно
знать момент, когда ссылка перестала действовать, считайте его по таймеру от создания
ссылки, а _fail используйте как подтверждение.

Возврат покупателя со страницы оплаты обратно в бота оплату не подтверждает: он лишь
открывает диалог. Доступ выдавайте только по сообщению _success.

Переменные

После обработки уведомления в переменных клиента доступны:

Переменная Значение
yandex_pay_payment_completed True — оплачено, False — отказ или истекла ссылка
yandex_pay_payment_method чем оплатили: CARD — карта, SPLIT — Сплит, SBP — СБП, SPLIT_SBP — Сплит через СБП
yandex_pay_is_split True, если платили Сплитом
yandex_pay_order_id номер заказа в Salebot; по нему делается возврат
yandex_pay_operation_id номер операции списания у Яндекса
yandex_pay_error_code код причины отказа, например NOT_ENOUGH_FUNDS или USER_DID_NOT_START_PAYMENT

Тестовый режим

Проверить сценарий можно без реальных списаний.

  1. В консоли Яндекса включите переключатель Тестовые данные в правом верхнем углу
    раздела «Настройки». Кабинет покажет тестовые параметры.
  2. Нажмите Добавить Callback URL (с пометкой «Тестовый») и вставьте тот же адрес,
    что в шаге 1 подключения.
  3. В Salebot включите Тестовый режим, в поле Merchant ID и в поле ключа вставьте
    тестовый Merchant ID: в тестовой среде ключ равен ему.
  4. Создайте ссылку и оплатите её. Форма предложит тестовые карты, деньги не списываются.

Результат оплаты можно задать суммой:

Сумма Результат
10000 ₽ и любые другие оплата прошла
10001 ₽ ошибка «Оплата не прошла»
10002 ₽ ошибка «Недостаточно средств»

После проверки выключите тестовый режим и вставьте боевые Merchant ID и ключ.

Ограничения

  • Валюта — рубли (для магазинов в Узбекистане — сумы), минимальная сумма 1 ₽.
  • Автоплатежей и подписок по ссылке Яндекс Пэй нет.
  • Двухстадийная оплата (холдирование) не поддерживается.
  • Сплит доступен, только если он включён для вашего магазина в консоли Яндекса.