В главное меню

Виджет


Общая информация

Данная страница описывает интеграцию web-виджета на страницу вашего интернет магазина.

Бизнес логика работы интерфейса задается на уровне создания сессии и передачи токена SSO.

Виджет не поддерживает работу с WebView. Для работы с WebView просьба использовать платёжную страницу.

Установка виджета

Для установки платёжного виджета необходимо прописать на сайте скрипт в раздел head:

<script src="https://pay.mts.ru/web-sdk/sdk.js"></script>

Затем добавить в body новый элемент:

<div id="widget"></div>

Интерфейсы виджета

interface ResultHandlerData {
  errorCode?: string
  message?: string
  eventName: 'successPayment' | 'failPayment' | 'validationError' | 'close'
}
 
type TResultHanlder = (data: ResultHandlerData) => void
 
type TScenarioType = 'pay' | 'refill'
type TColorMode = 'light' | 'dark'
type TBtnEndText = 'complete' | 'returnToStore' | 'close' | 'return'
type TSelectedPaymentToolType = 'mtsBankCard' | 'boundCard' | 'mtsCharging' | 'mtsMobileCommerce' | 'extMobileCommerce' | 'applePay' | 'googlePay' | 'samsungPay' | 'sbp' | 'newCard' | 'ewalletBinding' | 'mtsDengiBankCard' | 'sbpToken'

interface InitSdkProps {
  scenarioType: TScenarioType
  sessionId: string
  tokenId?: string
  successReturnUrl?: string
  failReturnUrl?: string
  selectedPaymentToolType?: TSelectedPaymentToolType
  selectedPaymentToolId?: string
  environment?: 'TEST' | 'PROD'
  colorMode?: TColorMode
  btnEndText?: TBtnEndText
  hasSuccessScreen?: boolean
  isBnplActive?: boolean
  resultHandler?: TResultHanlder
}
 
type TMTSPay = (props: InitSdkProps) => {
  render: (param: string | HTMLElement) => void
  destroy: () => void
}

Инициализация виджета

Для инициализации виджета необходимо при клике по кнопке оплаты пользователем вставить следующий код:

function widgetResultHandler({ errorCode = '', message = '', eventName }) {
  // business logic
}
 
var params = {
  scenarioType: 'pay', 
  sessionId: 'sessionId',
  tokenId: 'tokenId',
  successReturnUrl: 'https://merchant.site/success',
  failReturnUrl: 'https://merchant.site/failed',
  selectedPaymentToolType: 'sbp',
  environment: 'PROD',
  colorMode: 'light',
  btnEndText: 'complete',
  hasSuccessScreen: true,
  resultHandler: widgetResultHandler
}
 
var widget = new MTSPay(params);
widget.render('widget');

Где params - объект с инициализируемыми данными.

В него входят:

  1. scenarioType - тип сценария, для разовой оплаты нужно передать значение 'pay' (обязательный параметр).
  2. sessionId - id сессии, который мерчант получает при ее создании (обязательный параметр).
  3. tokenId - токен, необходимый для бесшовной авторизации, позволяет показать привязанные карты пользователя, если такие имеются (необязательный параметр).
  4. successReturnUrl - ссылка на страницу завершения оплаты при успешном сценарии, обязательно начинается с 'https://' (необязательный параметр).
  5. failReturnUrl - ссылка на страницу завершения оплаты при негативном сценарии, обязательно начинается с 'https://' (необязательный параметр).
  6. selectedPaymentToolType - предвыбранный тип платёжного инструмента (необязательный параметр).
  7. selectedPaymentToolId - предвыбранный идентификатор платёжного инструмента. Для передачи идентификатора обязательно должен быть определен тип платёжного инструмента, т.е. selectedPaymentToolType (необязательный параметр).
    1. Если selectedPaymentToolType=ewalletBinding, идентификационный номер привязанного способа оплаты (поиск осуществляется по cardId ПЦЭК и bindingId ПЦЭК)
  8. environment - если нужно использовать боевое апи, то необходимо передать значение 'PROD', иначе все запросы будут идти на тестовое апи (необязательный параметр).
  9. colorMode - цветовая палитра виджета по умолчанию (необязательный параметр).
  10. btnEndText - текст кнопки завершения на финальном экране виджета (необязательный параметр).
  11. hasSuccessScreen - при переданном значении true пользователю будет показываться финальный экран успеха платежа. Если не передать параметр или передать false, то финального экрана успеха не будет, виджет закроется, и передадутся события успеха платежа и закрытия виджета. Если был передан successReturnUrl, то также будет переход на этот урл. (необязательный параметр).
  12. isBnplActive - при переданном значении true и пользователю доступен BNPL - будет предустановлен тоггл BNPL в переданное положение. (необязательный параметр).
  13. resultHandler - callback функция, в которую будет передаваться информация об ошибках, статусе платежа (необязательный параметр).


widget.render - функция, которая отрендерит виджет в тот id, который в нее передается.

widget.destroy - функция, которую можно вызвать, чтобы размонтировать виджет.

Передача в метод render HTMLElement

Вместо id элемента, куда будет рендериться виджет, можно передать сам элемент:

var widget = new MTSPay(params); // инициализируем
var element = document.getElementById('widget') // ищем элемент
widget.render(element); // рендерим

Ручное удаление отрендеренного виджета

Если по каким-то причинам необходимо вручную удалить виджет с экрана, то необходимо выполнить следующий код:

var widget = new MTSPay(params); //
инициализируем widget.render('widget'); // рендерим
widget.destroy(); // удаляем

resultHandler

Callback функция - в которую будет передаваться информация об ошибках, статусе платежа.

resultHandler, вызывается:

    1. когда переданы некорректные параметры при инициализации:
      • eventName - validationError
    2. когда получили результат успешной оплаты :
      • eventName - successPayment
    3. когда получили результат отказ по оплате: 
      • eventName - failPayment
    4. когда пользователь закрывает виджет (крестиком), не зависимо от экрана:
      • eventName - close

Ошибки и часто задаваемые вопросы

Миграция с widget

В недавнем прошлом у нас существовал замечательный виджет, который многим не нравился, поэтому теперь он не развивается. Мы обновили дизайн, сделали логику более прозрачной и понятной. Однако (куда же без однако), требуется немного обновить способ взаимодействия. 

Что поменялось?

  1. Поменялся адрес инициализации, который указывается в script: https://sandbox.pay.mts.ru/widget/widget.js ->https://pay.mts.ru/assets/js/web-sdk/v1/sdk.js
  2. Поменялось название параметра с идентификатором платежной сессии: 'sessionPaymentId' стало 'sessionId'
  3. Добавился обязательный параметр scenarioType, в который надо передавать значение 'pay'
  4. Поменялась логика работы resultHandler'a - она описана в соответствующем разделе на этой странице
  5. ReturnUrl разделился на successReturnUrl и failReturnUrl

Использование глобальных стилей

Нельзя использовать глобальные стили вместе с нашим виджетом, так как они могут повлиять на его внешний вид и вызвать некорректное отображение.

Пример того, как делать нельзя:

<!DOCTYPE html>
<html lang="en">
  
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <style>
        h1 {
            color: red;
        }
    </style>
</head>
  
<body>
</body>
  
</html>

Обратите внимание, что при работе с виджетом идет обрезка лишних нулей (например, 10.10→10.1; 1,00→1), это является особенностью функционала.