For Marketplace
  • Для Маркетплейсов
  • Платежные запросы
    • Платежные запросы
    • 1. Прием платежей с банковской карты на маркетплейсе или в виджете
      • 1.1 Перевод покупателя на платежную форму с помощью ссылки
      • 1.2 Перевод покупателя на платежную форму с помощью HTML - формы
      • 1.3 Создание операции с индивидуальными параметрами с помощью MONETA.MerchantAPI
    • 2. Уведомление о проведенной оплате
    • 3. Прием платежей с холдированием
    • 4. Запоминание банковской карты и прием платежей с сохраненной картой.
    • 5. Перевод денежных средств после подтверждения сделки (Безопасная сделка)
    • 6. Приём платежей в пользу разных продавцов одной операцией (Мультикорзина)
    • 7. Управление размером комиссии маркетплейса
    • 8. Выплаты продавцу на банковскую карту
  • ПОДКЛЮЧЕНИЕ ИНДИВИДУАЛЬНЫХ ПРЕДПРИНИМАТЕЛЕЙ И ЮРИДИЧЕСКИХ ЛИЦ К СИСТЕМЕ МОНЕТА.РУ
    • Личный кабинет маркетплейса
    • Уведомления E-mail при редактировании профиля продавца
    • Уведомления URL при редактировании профиля продавца
    • Варианты подключения к Системе МОНЕТА.РУ
      • ‌Вариант 1. Клиент маркетплейса подключается самостоятельно
      • ‌Вариант 2. Маркетплейс подключает клиента
        • Основные понятия
        • Набор полей в личном кабинете клиента
        • CreateProfileRequest
        • CheckProfileRequest
        • EditProfileRequest базового профиля
        • EditProfileRequest подпрофиля руководителя
        • FindProfileDocumentsRequest документа руководителя
        • EditProfileDocumentRequest документа руководителя
        • EditProfileRequest подпрофиля учредителя
        • EditProfileRequest подпрофиля бенефициарного владельца
        • FindProfileDocumentsRequest документа бенефициарного владельца
        • EditProfileDocumentRequest паспорта бенефициарного владельца
        • CreateBankAccountRequest
        • FindLegalInformationRequest подпрофиля юридических реквизитов
        • EditLegalInformationRequest
        • EditProfileRequest базового профиля с атрибутом CONDITIONS_CORRECT_DATA
        • CreateAccountRequest
        • FindProfileDocumentFilesRequest
  • РЕГИСТРАЦИЯ ФИЗИЧЕСКОГО ЛИЦА
    • Создание электронного кошелька
      • Пример 1. Последовательность запросов.
        • CreateProfileRequest
        • CreateProfileDocumentRequest
        • ApprovePhoneSendConfirmationRequest
        • ApprovePhoneApplyCodeRequest
        • SimplifiedIdentificationRequest
        • AsyncRequest
        • CreateAccountRequest
      • Пример 2. Последовательность запросов.
        • CreateProfileRequest
        • ApprovePhoneSendConfirmationRequest
        • ApprovePhoneApplyCodeRequest
        • SimplifiedIdentificationRequest
        • AsyncRequest
        • CreateAccountRequest
      • Актуализация данных клиента
    • Идентификация с помощью MonetaId
      • Схема взаимодействия
      • Стенды
      • Регистрация маркетплейса
      • Установление доверия
      • Аутентификация
      • Встраивание в iframe
      • Проверка возможности полной идентификации
      • Уведомления о статусе идентификации
  • САМОЗАНЯТЫЕ
    • Самозанятые
    • Защита маркетплейса в ФНС РФ
    • Сценарии использования MonetaNPD
      • 1. Регистрация самозанятого в Системе МОНЕТА.РУ
      • 2. Привязка самозанятого к маркетплейсу по номеру телефона
      • 3. Привязка самозанятого к маркетплейсу по ИНН
      • 4. Уведомление маркетплейса о статусе привязки
      • 5. Проведение упрощенной идентификации самозанятого
      • 6. Смена номера телефона самозанятого
      • 7. Привязка банковской карты для вывода средств с ЭСП "МОНЕТА.РУ"
      • 8. Выплата в пользу самозанятого от юридического лица
      • 9. Регистрация дохода самозанятого в ФНС и отправка чека
      • 10. Регистрацию дохода самозанятого в ФНС (offline режим)
      • 11. Вывод с ЭСП "МОНЕТА.РУ" на банковскую карту
      • 12. Выплата самозанятому через СБП
      • 13. Получение сообщений от ФНС
      • 14. Отметка о прочтении сообщений от ФНС
      • 15. Ежедневная проверка статуса привязки к маркетплейсу с контролем прав
      • 16. Установка прав для маркетплейса
    • Дополнительные возможности MonetaNPD
      • 17. Отвязка от маркетплейса
      • 18. Запрос баланса ЭСП "МОНЕТА.РУ" самозанятого
      • 19. Запрос статуса самозанятого
      • 20. Запрос суммы дохода, отмененного дохода и налога самозанятого за текущий год
      • 21. Запрос на сторнирование чека
      • 22. Регистрация статического QR-кода
      • 23. Регистрация и обновление Кассовой ссылки
      • 24. Получение ссылки на пополнение ЭСП самозанятого
      • 25. Получение статуса операции из Системы МОНЕТА.РУ
      • 26. Получение данных о самозанятом в Системе МОНЕТА.РУ
      • 27. Получение паспортных данных самозанятого в Системе МОНЕТА.РУ
      • 28. Получение состояния лицевого счета НП НПД
      • 29. Возврат по операции
      • 30. Получение истории операций
      • 31. Получить данные по начислению и уплате налога
      • 32. Получить реквизиты для уплаты налогов и пеней
      • 33. Оплата налога
    • Сценарий выплат самозанятым без открытия ЭСП
  • Управление денежными средствами на расчетных счетах клиентов
    • Управление расчетными счетами клиентов маркетплейса
  • Перевод денежных средств клиентов в Федеральное Казначейство
    • Перевод денежных средств в Федеральное Казначейство
  • 54-ФЗ
    • Применение контрольно-кассовой техники при осуществлении расчетов
      • Формирование чека в ККТ продавца
      • Формирование чека в ККТ маркетплейса
      • Формирование чека в ККТ ООО "ПЭЙ ЭНИ ВЭЙ"
        • Создание invoice
        • Оплата invoice
        • Рекуррентный платеж
        • Операции возврата
        • Получить данные операции
  • СБП
    • Система быстрых платежей
    • Описание полей для переводов СБП
    • Получение списка участников СБП
    • Протокол С2С. Сценарий C2C/Me2Me Push
    • Протокол С2С.Сценарий Me2Me Pull
    • Протокол C2B. Оплата товаров и услуг по QR
    • Протокол C2B. Многоразовые QR
    • Протокол C2B. Выставление счёта (InvoiceRequest) для оплаты по Кассовой ссылке СБП
    • Протокол C2B. Выставление счёта (InvoiceRequest) для оплаты по динамическому QR
    • Протокол C2B. Привязка счёта Плательщика (подписка)
      • Привязка счёта без оплаты
      • Оплата с привязкой счёта
      • Оплата с привязанного счёта
    • Протокол C2B. Возврат ранее принятых QR-платежей (C2B refund)
    • Протокол B2C «Прочие выплаты физическому лицу»
    • Получение статуса операции перевода СБП
    • Сервис Widget SBP/FPS
      • Схема взаимодействия
      • Регистрация маркетплейса
      • Установление доверия
      • Аутентификация
      • Встраивание в iframe
      • Уведомления о событиях
      • Пример запроса PaymentRequest
      • Просмотр истории транзакций
Powered by GitBook
On this page
  • Общая информация
  • Формирование токена и подписи
  • Формирование информационного сообщения
  • Формирование подписи
  • Примеры кода для формирования токена

Was this helpful?

  1. СБП
  2. Сервис Widget SBP/FPS

Аутентификация

PreviousУстановление доверияNextВстраивание в iframe

Last updated 2 years ago

Was this helpful?

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

Для инициализиции виджета Moneta SBP/FPS маркетплейсу необходимо передать одноразовый токен безопасности, в котором надежно зашифрована вся необходимая информация для проведения перевода. Токен безопасности должен формироваться на стороне маркетплейса, по указанным ниже правилам.

Формирование токена и подписи

Предварительные условия:

  1. Необходимо пройти процедуру и получить ApiKey и ApiSecret.

  2. Необходимо с сервисом Moneta SBP/FPS.

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

  1. RFC 3986 Uniform Resource Identifier (URI): Generic Syntax.

  2. RFC 2104 HMAC: Keyed-Hashing for Message Authentication.

  3. RFC 4648 The Base16, Base32, and Base64 Data Encodings.

Токен состоит из 2-х частей:

  1. Информационное сообщение, содержащее ключевую информацию о маркетплейсе и Пользователе ЭСП МОНЕТА.РУ, служебную информацию по переводу.

  2. Подпись/Хеш от информационного сообщения из п.1, и использованием заранее полученного общего секрета - ApiSecret.

Формирование информационного сообщения

Информационное сообщение состоит из набора ключ-значение, которые закодированы в соответствии с правилами URL-кодирования строк по RFC 3986. Пример:

key1=someKey&key2=Some%20Key2&extraKey=100500

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

Ключ

Описание

Тип

Пример

cid

Идентификатор операции на стороне маркетплейса

String

i-17-203112

cidExpireAt

Дата/время до которой можно провести оплату (в EpohMills)

Число

1610464610097

key

ApiKey полученный при регистрации в MonetaId

Url Encoded String

site-x

nonce

Число, использующееся для невозможности повторного использования одного и того же токена (см. ниже)

Число

10201010

unitId

Номер профиля/юнита пользователя ЭСП МОНЕТА.РУ

Число

987654321

accountId

Номер ЭСП МОНЕТА.РУ для списания средств

Число

1230567

callbackUrl

Опциональный параметр для demo окружения: Возможность задать тестовый callback url, отличный от того, что задан партнеру при регистрации.

Url Encoded String

http%3A%2F%2Fya.ru

При формировании nonce удобно использовать текущее время в секундах на момент формирования токена. Каждый новый nonce в новом токене, формирующийся для данного unitId должен быть строго больше предыдущего для данного юнита (т.е. nonce должен строго монотонно возрастать), иначе он будет отброшен как некорректный.

Пример итогового информационного сообщения:

cid=i103020&cidExpireAt=1601375568244&key=partner123&nonce=1601375468244&unitId=987654321&accountId=1230567

Формирование подписи

После того, как информационное сообщение сформировано, необходимо вычислить подпись/хеш с использованием общего секрета - ApiSecret.

Алгоритм формирования:

  1. Вычислить HMAC-SHA512 хеш используя пару (информационное сообщение, секрет).

  2. Полученный массив байт перевести в строку в шестнадцатеричном представлении.

// message - инф. сообщение
// secret  - секрет/apiSecret

signatureBytes  = hmac_sha512(message, secret)
signatureString = bytesToHex(signatureBytes)

После того, как подпись в виде hex-строки сформирована, необходимо добавить ее к информационному сообщению с ключом signature:

cid=i103020cidExpireAt=1601375568244&key=partner123&nonce=1601375468244&unitId=987654321&accountId=1230567&signature=7d7b968768f664bcdbd67bbd4e3f59347b300226734ade68bed660ab7794522fe0e3e66ecdb211f746dae1c44681a306ee221f8706c63195607e525e979360

Финальным шагом необходимо полученную строку (информационное сообщение + подпись) закодировать при помощи base64, использовать при перенаправлении на виджет Moneta SBP/FPS.

// СЕРВЕР
// на стороне сервера формируем итоговый токен
message = "cid=i103020cidExpireAt=1601375568244&key=partner123&nonce=1601375468244&unitId=987654321&accountId=1230567&signature=7d7b968768f664bcdbd67bbd4e3f59347b300226734ade68bed660ab7794522fe0e3e66ecdb211f746dae1c44681a306ee221f8706c63195607e525e979360"
token   = base64(message)

// БРАУЗЕР КЛИЕНТА
// делаем редирект в браузере клиента на указанный адрес с этим токеном

// DEV окружение
https://fps-ui.dev.mnxsc.tech/?token={{token}}

// PROD окружение
https://fps-ui.prod.mnxsc.tech/?token={{token}}

Примеры кода для формирования токена

php

$secretKey = "secretKey"; 
$cid = "i103020"; 
$cidExpireAt = 1601375568244; 
$key = "partner123"; 
$nonce = time(); 
$unitId = 987654321;
$accountId = 1230567; 

$infoMessage = "cid=" . $cid . "&cidExpireAt=" . $cidExpireAt . "&key=" . $key . "&nonce=" . $nonce . "&unitId=" . $unitId . "&accountId" . $accountId; 
$signatureString = hash_hmac("sha512", $infoMessage, $secretKey); 

$token = base64_encode($infoMessage . "&signature=" . $signatureString);

js

const SECRET_KEY = 'secretKey';
const cid = "i103020";
const cidExpireAt = 1601375568244;
const key = 'partner123';
const nonce = Date.now();
const unitId = 987654321;
const accountId = 1230567;

const urlEncodedParams = 
    'cid='+encodeURIComponent(cid)
    +'&cidExpireAt='+encodeURIComponent(cidExpireAt)
    +'&key='+encodeURIComponent(key)
    +'&nonce='+encodeURIComponent(nonce)
    +'&unitId='+encodeURIComponent(unitId)
    +'&accountId='+encodeURIComponent(accountId);
const signature = CryptoJS.HmacSHA512(urlEncodedParams, SECRET_KEY);
const signatureHex = CryptoJS.enc.Hex.stringify(signature);
const finalParams = urlEncodedParams + '&signature='+encodeURIComponent(signatureHex);

const token = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(finalParams));
регистрации маркетплейса
установить доверительные отношения