Инструменты страницы
Платёжный виджет SberPay для размещения оплаты на странице продавца
Модуль предназначен для размещения на страницах продавца с целью организации оплаты услуг посредством использования сервиса Сбербанк Онлайн, не покидая страницу магазина.
Платёжный виджет SberPay поддерживает работу с диплинком, push-уведомлением и СМС-уведомлением.
Если клиент оплачивает посредством мобильного устройства, то оплата будет производиться по диплинку.
Если клиент оплачивает с десктоп устройства - оплата производится по push-уведомлению.
При наличии соответствующей пермиссии у мерчанта также возможна оплата по СМС-уведомлению.
Подключение
На сайте продавца
Для подключения функционала на своем сайте продавец должен разместить на своей странице следующий код в блоке <head></head>:
<head> ... <script src="https://securecardpayment.ru/payment/modules/sbol-pay/sbol-pay.js"></script> ... </head>
На платежной странице
Для подключения функционала на платежной странице продавец должен разместить на своей странице следующий код в блоке <head></head>:
<head> ... <script src="../../modules/sbol-pay/sbol-pay.js"></script> ... </head>
Это относится к платежным страницам, находящимся на одном из URL:
- PROD - https://securecardpayment.ru/…..
и которые не имеют логин rbs
, sbersafe
, sbersafe_id
, sbersafe_cardholder
, sbersafe_sberid
- там этот модуль уже есть
Адрес скрипта на тестовом и боевом стенде
- Тестовый стенд (UAT) - https://secure-payment-gateway.ru/payment/modules/sbol-pay/sbol-pay.js
- Боевая среда (PROD) - https://securecardpayment.ru/payment/modules/sbol-pay/sbol-pay.js
Инициализация скрипта
Инициализацию скрипта рекомендуется делать в конце документа, перед закрытием тега <body>, разместив аналогичный указанному ниже блок:
<script> document.addEventListener("DOMContentLoaded", function() { var sbolWidget = new window.SbolPay({ // Селектор DOM-элемента на странице, куда будет добавлен виджет оплаты selector: '#sbol-pay-container', // Адрес, на который требуется перенаправить пользователя в случае успешной оплаты returnUrl: 'https://example-shop.com/success' // Адрес, на который требуется перенаправить пользователя в случае неуспешной оплаты failUrl: 'https://example-shop.com/fail' // Индивидуальный открытый ключ продавца token: 'j5d0bk0h860v407jg00806ab0p', // Сумма платежа в копейках amount: '123400', // Название магазина для отображения в окне виджета shopName: 'ООО «Промтовары»', // Номер заказа в системе магазина orderNumber: '123456', }); }); </script>
Значение token
можно получить в личном кабинете в разделе Настройки – Основные (см. ссылку).
Платежный виджет SberPay поддерживает двухстадийные платежи. Для регистрации двухстадийного платежа в скрипте необходимо указать параметр registerPreAuth
со значением true
.
Пример скрипта:
<script> document.addEventListener("DOMContentLoaded", function() { var sbolWidget = new window.SbolPay({ // Селектор DOM-элемента на странице, куда будет добавлен виджет оплаты selector: '#sbol-pay-container', // Адрес, на который требуется перенаправить пользователя в случае успешной оплаты returnUrl: 'https://example-shop.com/success' // Адрес, на который требуется перенаправить пользователя в случае неуспешной оплаты failUrl: 'https://example-shop.com/fail' // Индивидуальный открытый ключ продавца token: 'j5d0bk0h860v407jg00806ab0p', // Сумма платежа в копейках amount: '123400', // Название магазина для отображения в окне виджета shopName: 'ООО «Промтовары»', // Регистрация двухстадийного платежа. <<<<<<<<<<<<<<<<<<< registerPreAuth: 'true', }); }); </script>
Доступные параметры инициализации виджета
Ниже представлен полный перечень параметров для инициализации скрипта. Помеченные как обязательные параметры должны быть обязательно указаны при инициализации и не имеют значения по умолчанию.
Параметр | Обязательный | Значение по умолчанию | Описание |
---|---|---|---|
| Да | - |
Селектор DOM-элемента, куда будет размещен виджет оплаты. |
| Да | - |
Открытый ключ продавца. Чтобы получить открытый ключ, обратитесь в техническую поддержку. |
| Да | - |
Сумма заказа. Указывается в минорных единицах (в копейках). Например для записи значения 10 руб. нужно указать значение «1000» (в формате строки) |
| Да | - |
Адрес, на который требуется перенаправить пользователя в случае успешной оплаты, а также в случае неуспешной оплаты (при отсутствии переданного параметра Адрес нельзя указывать относительным путем, т.е. они не должны начинаться на «.» и «/». В противном случае вернется ошибка 4: «URL возврата некорректен». Например:
|
| Нет | - |
Адрес, на который требуется перенаправить пользователя в случае неуспешной оплаты. Адрес должен быть указан полностью, включая используемый протокол (например, https://test.ru вместо test.ru). Адрес нельзя указывать относительным путем, т.е. они не должны начинаться на «.» и «/». В противном случае вернется ошибка 4: «URL возврата некорректен». Например:
Параметр необязательный. В таком случае при неуспешной оплате, так же как и при успешной оплате, будет происходить переход на |
| Нет | - |
Название магазина для отображения в окне виджета. |
| Нет | - |
Номер (идентификатор) клиента в системе магазина. |
| Да | - |
Номер заказа в системе магазина. Необязательно только в случае подключения автоматической генерации номера заказа на шлюзе (для этого обратитесь в техническую поддержку). |
| Нет | - |
Описание заказа. |
| Нет | - |
Дополнительные параметры заказа в формате объекта. В параметре запрещено передавать зарезервированные имена (в случае их передачи заказ может быть отклонен):
|
| Нет | - |
Массив объектов для описания товаров в корзине. Пример:
[ { // Описание товарной позиции name: 'Шариковая ручка', // Объект, описывающий общее количество товарных позиций quantity: { // Количество товарных позиций value: 1, // Мера измерения количества товарной позиции measure: "шт" }, // Сумма стоимости всех товарных позиций указанного типа itemAmount: 23400, // Номер (идентификатор) товарной позиции в системе магазина itemCode: 'code_1', // Стоимость одной товарной позиции в минимальных единицах валюты itemPrice: 100 }, { name: 'Сыр. Российский', quantity: { value: 1.4, measure: "кг" }, itemAmount: 100000, itemCode: 'code_2' } ] |
|
Нет | false |
|
|
Нет | - |
|
| Нет | false |
Отображение виджета в виде линейного представления. Пример:
|
| Нет | 400 |
Значение ширины окна со страницей, при которой применяется стиль |
| Нет | - |
Телефон клиента, осуществляющего оплату. Если телефон заранее известен, Вы можете его передать в опцию. В таком случае виджет не будет запрашивать телефон у пользователя, а сразу отправить подтверждение оплаты на указанный номер телефона. |
| Нет | false |
Не добавлять на страницу стили, описывающие внешний вид для виджета. (На случай, если вебмастеру нужно будет назначить собственные стили для виджета). |
Методы
Название | Описание |
---|---|
|
Метод удаления инициированной кнопки. <script> document.addEventListener("DOMContentLoaded", function() { var sbolWidget = new window.SbolPay({ // Параметры }); function funcExample() { sbolWidget.destroy(); } }); </script> |
|
Метод для отслеживания состояния виджета. // Инициализация как обычно const sbolPay = new window.SbolPay( ... ); // Обработка изменений статуса виджета sbolPay.on('CHANGE_WIDGET_STATUS', function (event) { console.log('new status:', event.status, 'old status:', event.previousStatus); }); Возможные состояния:
Пример: // Инициализация как обычно const sbolPay = new window.SbolPay(...); // Обработка изменений статуса виджета sbolPay.on('CHANGE_WIDGET_STATUS', function(event) { if (event.status === 'IDLE') { // Пользователь закрыл модальное окно } else if (event.status === 'IN_PROGRESS') { // Пользователь открыл модальное окно } }); |
Пример кода для страницы на стороне продавца с подключенным модулем:
Данный пример будет работать только на стороне продавца. Наличие PCI DSS у продавца не обязательно, так как в модуле отсутствуют карточные данные.
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SBOL Example</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/5.0.3/jquery.inputmask.js"></script> <script src="https://3dsec.sberbank.ru/payment/modules/sbol-pay/sbol-pay.js"></script> <style type="text/css"> body { padding: 20px; } h1 { font-size: 18px; margin-top: 40px; } </style> </head> <body> <h1>Оплата с вводом номера телефона в модуле</h1> <div id="container"></div> <h1>Оплата с вводом номера на странице продавца</h1> <div class="row"> <div class="col-3"> <div class="form-group"> <label for="exampleInputEmail1">Номер телефона</label> <input type="text" id="phone" class="form-control"> </div> </div> </div> <div id="container_with_phone"></div> <script> // Дожидаемся когда все DOM-элементы загрузятся document.addEventListener("DOMContentLoaded", function() { $('#phone').inputmask({"mask": "+7(999) 999-9999"}); // Инициализация скрипта для оплаты с вводом номера телефона внутри модуля var sbolWidget = new window.SbolPay({ // Селектор DOM-элемента на странице, куда будет добавлен виджет оплаты selector: '#container', // Индивидуальный открытый ключ продавца token: 'j5djbk3h86qv4k7jg40826abbp', // Сумма платежа в копейках amount: '123400', // Название магазина для отображения в окне виджета shopName: 'ООО «Промтовары»', returnUrl: 'http://yandex.ru' }); // Инициализация скрипта для оплаты с вводом номера телефона на сайте продавца // Переинциализируется при изменении номера телефона и если он полностью заполнен $('#phone').on('input', function(e) { var rawPhone = $(this).val().replace(/\D/g,'').slice(1); // Проверка на длину номера. Поддерживаемый формат 9123456789 if (rawPhone.length === 10) { var sbolWidgetPhone = new window.SbolPay({ // Селектор DOM-элемента на странице, куда будет добавлен виджет оплаты selector: '#container_with_phone', // Индивидуальный открытый ключ продавца token: 'j5djbk3h86qv4k7jg40826abbp', // Сумма платежа в копейках amount: '123400', phone: rawPhone, // Название магазина для отображения в окне виджета shopName: 'ООО «Промтовары»', returnUrl: 'http://yandex.ru' }); } }) }); </script> </body> </html>
Пример подключения модуля SberPay на кастомной платежной странице: