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

Виджет доступности MTS Flex


Макеты

Макеты виджета доступности MTS Flex

Установка sdk

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

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

После загрузки скрипта в глобальную область видимости добавится функция initMtsPayBnplLight.


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

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

В данный элемент будет рендериться виджет.

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

type TErrorRes = {
  requestId: string;
  code: string;
  message: string;
  userMessage: string;
  isFatal: boolean;
  name: string;
}
 
type TBnplLightOnEventData = {
  error?: TErrorRes
  value?: string | boolean
  message?: string
  eventName: 'error' | 'validationError' | 'flexPaymentUnavailable' | 'isFlexSwitched' | 'successPayment' | 'failPayment' | 'close'
}
 
type TBnplLightOnEvent = (data: TBnplLightOnEventData) => void
 
type TColorMode = 'light' | 'dark'
type TEnvironment = 'DEV' | 'TEST' | 'PROD' | 'LOCAL'
type TWindowType = 'current' | 'tab' | 'modal'
 
type TBnplFlexInfo = {
  type?: 'default' | 'schedule'
  onEvent: TBnplLightOnEvent
}
 
type TBnplFlexSwitchInfo = {
  type?: 'default' | 'schedule'
  onEvent: TBnplLightOnEvent
}
 
type TBnplLightFlexPayOnClick = () => Promise<string>
 
type TBnplLightSelectedPaymentToolType =
  | 'mtsBankCard'
  | 'boundCard'
  | 'mtsDengiBankCard'
  | 'sbpToken'
  | 'mtsCharging'
  | 'mtsMobileCommerce'
  | 'extMobileCommerce'
  | 'sbp'
  | 'newCard'
  | 'ewalletBinding'
 
type TBnplFlexPay = {
  tokenId?: string
  successReturnUrl: string
  failReturnUrl: string
  merchantUrl?: string
  type?: 'default' | 'schedule'
  btnType?: 'default' | 'payWithFlex'
  btnColorMode?: 'default' | 'mts'
  pageColorMode?: 'dark' | 'light'
  windowType?: TWindowType
  selectedPaymentToolType?: TBnplLightSelectedPaymentToolType
  selectedPaymentToolId?: string
  onEvent?: TBnplLightOnEvent
  onClick: TBnplLightFlexPayOnClick
}
 
interface InitBnplLightSdkProps {
  amount: string
  phone: string
  colorMode?: TColorMode
  environment?: TEnvironment
  flexInfo?: TBnplFlexInfo
  flexSwitchInfo?: TBnplFlexSwitchInfo
  flexPay?: TBnplFlexPay
}
 
type TInitMTSPayBnplLight = (props: InitBnplLightSdkProps) => {
  render: (param: string | HTMLElement) => void
  destroy: () => void
}

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

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

// Пример кода

function widgetEventHandler(data) {
  // business logic
}

var baseParams = {
  amount: '1000',
  phone: '74959214881',
  colorMode: 'dark',
  environment: 'PROD',
}

// Вариант с графиком платежей
var params = {
  ...baseParams,
  flexSwitchInfo: {
    type: 'schedule',
    onEvent: widgetEventHandler
  }
}
 
// Вариант с кнопкой оплаты
var params = {
  ...baseParams,
  flexPay: {
    onClick: () => Promise.resolve('000'),
    onEvent: widgetEventHandler,
    tokenId: '111',
    merchantUrl: 'https://google.com/merchantUrl',
    failReturnUrl: 'https://google.com/failReturnUrl',
    successReturnUrl: 'https://google.com/successReturnUrl',
    pageColorMode: 'light',
    btnColorMode: 'mts',
    windowType: 'modal',
    type: 'payWithFlex',
    selectedPaymentToolId: '',
    selectedPaymentToolType: ''
  }
}

var widget = window.initMtsPayBnplLight(params);
widget.render('widget');

params — объект с инициализируемыми данными, в который входят:

  1. amount — сумма платежа (обязательный параметр).
  2. phone — номер телефона (msisdn) (обязательный параметр).
  3. environment — если нужно использовать боевое апи при тесте, то необходимо передать значение ’PROD’, иначе все запросы будут идти на тестовое апи. (необязательный параметр).
  4. colorMode — цветовая палитра виджета по умолчанию (необязательный параметр).
  5. flexSwitchInfo – информационный блок без кнопки (условно обязательный – обязателен к передаче 1 из объектов flexInfo, flexPay):
    1. type –  тип блока (с расписание/без) (необязательный параметр)
      1. default – тоггл без графика платежей,
      2. schedule – тоггл с графиком платежей,
    2. onEvent — callback функция, в которую будет передаваться информация об ошибках, событии смены тоггла и т.п. (обязательный параметр).
      • eventName: 'error' | 'validationError' | 'flexPaymentUnavailable' | 'isFlexSwitched' 
        • error — ошибка при падении приложения.
          • value — значение ошибки,
          • message — сообщение ошибки.
        • validationError — при ошибках валидации параметров инициализации (после отправки события приложение завершает работу).
        • flexPaymentUnavailable — если пользователю недоступен функционал BNPL (после отправки события приложение завершает работу).
        • isFlexSwitched — если пользователю доступен Flex.
          • value = true/false положения тоггла.
  6. flexInfo – информационный блок без кнопки (условно обязательный – обязателен к передаче 1 из объектов flexInfo, flexPay):
    1. type –  тип блока (с расписание/без) (необязательный параметр)
      1. default – инфо без графика платежей,
      2. schedule – инфо с графиком платежей,
    2. onEvent — callback функция, в которую будет передаваться информация об ошибках, событии смены тоггла и т.п. (обязательный параметр).
      • eventName: 'error' | 'validationError' | 'flexPaymentUnavailable' | 'isFlexSwitched' 
        • error — ошибка при падении приложения.
          • value — значение ошибки,
          • message — сообщение ошибки.
        • validationError — при ошибках валидации параметров инициализации (после отправки события приложение завершает работу).
        • flexPaymentUnavailable — если пользователю недоступен функционал BNPL (после отправки события приложение завершает работу).
  7. flexPay – точка входа в приложение оплаты (условно обязательный – обязателен к передаче 1 из объектов flexInfo, flexPay)
    1. tokenId - токен, необходимый для бесшовной авторизации, позволяет показать привязанные карты пользователя, если такие имеются (необязательный параметр).
      Авторизация в сценарии Flex - обязательная, поэтому при отсутствии авторизации по cookie/tokenId пользователь будет перенаправлен на страницу авторизации.
    2. successReturnUrl — ссылка на страницу завершения оплаты при успешном сценарии, обязательно начинается с ’https://’ (обязательный параметр)
    3. failReturnUrl — ссылка на страницу завершения оплаты при негативном сценарии, обязательно начинается с ’https://’ (обязательный параметр)
    4. merchantUrl — ссылка на сайт мерчанта или партнера-интегратора (необязательный параметр)
    5. type –  тип блока (с расписание/без) (необязательный параметр)
      1. default – тоггл без графика платежей,
      2. schedule – тоггл с графиком платежей
    6. btnType  — тип кнопки (доступные типы кнопок указаны ниже) (необязательный параметр)
      1. default – оплатить частями,
      2. payWithFlex – оплатить с мтс флекс
    7. btnColorMode — цвет кнопки по умолчанию (необязательный параметр):
      1. default – flex-кнопка фиолетовая,
      2. mts – mts-кнопка красная,
    8. pageColorMode — цветовая схема платежной страницы, куда будет перенаправляться пользователь для оплаты (необязательный параметр).
    9. windowType — режим отображения платежной страницы (необязательный параметр)
      1. current — редирект на платежную страницу в текущем окне;
      2. modal — открытие платежной страницы в новом всплывающем окне;
      3. tab — открытие платежной страницы в новой вкладке (по умолчанию)
    10. selectedPaymentToolType — предвыбранный тип платёжного инструмента (необязательный параметр).
    11. selectedPaymentToolId — предвыбранный идентификатор платёжного инструмента. Для передачи идентификатора обязательно должен быть определен тип платёжного инструмента, т.е. selectedPaymentToolType (необязательный параметр).
      1. если selectedPaymentToolType=ewalletBinding, идентификационный номер привязанного способа оплаты (поиск осуществляется по cardId ПЦЭК и bindingId ПЦЭК).
    12. onClick — callback Promise функция, которая должна нам вернуть значение sessionId, по которому мы будем проводить платеж (обязательный параметр)
    13. onEvent — callback функция, в которую будет передаваться информация об ошибках и событиях оплаты (необязательный параметр).
      • eventName: 'error' | 'successPayment' | 'failPayment' | 'validationError' | 'close' | 'flexPaymentUnavailable' 
        • error — ошибка при падении виджета.
          • value — значение ошибки,
          • message — сообщение ошибки.
        • successPayment – успешная оплата.
        • failPayment – ошибки в процессе оплаты.
        • validationError – при ошибках валидации параметров инициализации (после отправки события приложение завершает работу).
        • close – пользователь закрыл страницу оплаты.
        • flexPaymentUnavailable – если пользователю недоступен функционал BNPL (после отправки события приложение завершает работу).
          • message - для flexPaymentUnavailable передаём:
            1. при неуспешной авторизации - "Неуспешная авторизация пользователя",
            2. если получена некорректная сессия (сценарий не flexPayment) - "Некорректная сессия",
            3. если не получили инструменты isBnplAvailable=true - "Нет доступных платёжных инструментов для оплаты Flex",
            4. если не получили данные для отображения BNPL (тарифы и т.п.) - "Не получены данные Flex",
            5. если приложение не может продолжить флоу из-за бэкенд ошибки (произошла ошибка до отображения экрана оплаты), то прокидывается её текст.

Приложение отправляет события:

  • error - ошибка при падении приложения.
  • successPayment – успешная оплата.
  • failPayment – ошибки в процессе оплаты.
  • validationError – при ошибках валидации параметров инициализации (после отправки события приложение завершает работу).
  • close – пользователь закрыл страницу оплаты.
  • flexPaymentUnavailable – если пользователю недоступен функционал BNPL (после отправки события приложение завершает работу).
  • isFlexSwitched — если пользователю доступен Flex.


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

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


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

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

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


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

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

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