Результаты поиска
    Ничего не найдено
    Оглавление
    Сервис Widget SBP/FPS

    Сервис Widget SBP/FPS

    Данный раздел содержит инструкцию и рекомендации по подключению к сервису Moneta SBP/FPS.

    Moneta SBP/FPS - cервис, предназначенный для автоматизации вывода средств (переводов) с помощью СБП С2С/Ме2Ме Push c ЭСП МОНЕТА.РУ по номеру телефона.

    Схема взаимодействия
    Регистрация маркетплейса
    Установление доверия
    Аутентификация
    Встраивание в iframe
    Уведомления о событиях
    Пример запроса PaymentRequest
    Просмотр истории транзакций

    Подразделы Сервис Widget SBP/FPS

    Результаты поиска
      Ничего не найдено
      Оглавление
      Схема взаимодействия

      Схема взаимодействия

      Схема взаимодействия между приложением маркетплейса и сервисом Moneta SBP/FPS выглядит следующим образом:

      • Приложение маркетплейса формирует и подписывает токен, в котором сохранена информация номер юнита Пользователя, номер ЭСП МОНЕТА.РУ, время действия токена и другая информация.
      • Приложение маркетплейса перенаправляет браузер Пользователя ЭСП МОНЕТА.РУ на специальный адрес, передав токен безопасности.
      • Moneta SBP/FPS запрашивает номер телефона Получателя (физического лица) перевода.
      • Moneta SBP/FPS предлагает Пользователю ЭСП МОНЕТА.РУ выбрать банк для перевода.
      • Moneta SBP/FPS показывает Пользователю ЭСП МОНЕТА.РУ PAM-фразу (ФИО) Получателя перевода.
      • Moneta SBP/FPS формирует операцию в статусе “Операция создана”.
      • Moneta SBP/FPS отправляет приложению маркетплейса уведомление с указанием номера операции (operationId) и номера сообщения СБП (messageId).
      • Moneta SBP/FPS возвращает Пользователя ЭСП МОНЕТА.РУ в приложение маркетплейса.
      • Приложение маркетплейса отправляет запрос PaymentRequest, указывая в поле payee номер операции (operationId) с ведущим нулем, а также дополнительные атрибуты СБП, полученные в уведомлении.
      Результаты поиска
        Ничего не найдено
        Оглавление
        Регистрация маркетплейса

        Регистрация маркетплейса

        Маркетплейсу необходимо предоставить следующие данные на адрес mp@payanyway.ru:

        • Обязательная информация:
          • Полное и краткое наименование проекта.
          • URL для отправки уведомлений о статусе перевода (callback url).
        • Опциональная информация:
          • Иконка проекта в SVG-формате или высоком разрешении.
          • URL для возврата Пользователя ЭСП МОНЕТА.РУ обратно в приложение маркетплейса, если используется режим отличный от iframe (return url).

        Со стороны Moneta SBP/FPS будет предоставлена следующая информация:


        1. ApiSecret будет направлен на адрес электронной почты от Личного кабинета маркетплейса, указанный им в Договоре. ↩︎

        Результаты поиска
          Ничего не найдено
          Оглавление
          Установление доверия

          Установление доверия

          Для формирования сервисом Moneta SBP/FPS операций перевода (вывода) необходимо пройти процедуру установления доверия с сервисом.

          Маркетплейсу необходимо:

          • Войти в Личный кабинет маркетплейса с Пользователями ЭСП МОНЕТА.РУ на moneta.ru (или demo.moneta.ru для тестового контура).
          • Перейти по ссылке, которую предоставил сервис Moneta SBP/FPS.
          • В появившемся диалоге ознакомиться с информацией о том, какие разрешения маркетплейс предоставит сервису SBP/FPS.
          • Подтвердить предоставление разрешений.

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

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

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

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

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

          • Необходимо пройти процедуру регистрации маркетплейса и получить ApiKey и ApiSecret.
          • Необходимо установить доверительные отношения с сервисом Moneta SBP/FPS.

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

          • RFC 3986 Uniform Resource Identifier (URI): Generic Syntax.
          • RFC 2104 HMAC: Keyed-Hashing for Message Authentication.
          • RFC 4648 The Base16, Base32, and Base64 Data Encodings.

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

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

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

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

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

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

          КлючОписаниеТипПример
          cidИдентификатор операции на стороне маркетплейсаStringi-17-203112
          cidExpireAtДата/время до которой можно провести оплату (в EpohMills)Число1610464610097
          keyApiKey полученный при регистрации в MonetaIdUrl Encoded Stringsite-x
          nonceЧисло, использующееся для невозможности повторного использования одного и того же токена (см. ниже)Число10201010
          unitIdНомер профиля/юнита пользователя ЭСП МОНЕТА.РУЧисло987654321
          accountIdНомер ЭСП МОНЕТА.РУ для списания средствЧисло1230567
          callbackUrlОпциональный параметр для demo окружения: Возможность задать тестовый callback url, отличный от того, что задан партнеру при регистрации.Url Encoded Stringhttp%3A%2F%2Fya.ru

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

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

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

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

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

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

          • Вычислить HMAC-SHA512 хеш используя пару (информационное сообщение, секрет).
          • Полученный массив байт перевести в строку в шестнадцатеричном представлении.
          // 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}}

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

          $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);
          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));
          Результаты поиска
            Ничего не найдено
            Оглавление
            Встраивание в iframe

            Встраивание в iframe

            Код для вставки виджета в iframe

            // DEV окружение
            <iframe
                src="https://fps-ui.dev.mnxsc.tech/withdrawal?frame=true&token={ONE_TIME_TOKEN}"
                style="
                width: 400px;
                height: 600px;
                border: 1px solid #CCC;
                border-radius: 10px">
            </iframe>
            
            
            // PROD окружение
            <iframe
                src="https://fps-ui.prod.mnxsc.tech/withdrawal?frame=true&token={OONE_TIME_TOKEN"
                style="
                width: 400px;
                height: 600px;
                border: 1px solid #CCC;
                border-radius: 10px">
            </iframe>
            • Рекомендуемые размеры iframe: 400 x 600
            • формирование ONE_TIME_TOKEN описано в разделе генерации токена партнера.

            Ограничения использования iframe

            ОграничениеРешение
            Не работает вставка https iframe в http родителя.Браузеры ограничивают возможности таких iframe, поэтому для тестов нужен https родитель. Например: https://localhost:8080

            Получение событий из iframe

            Виджет отправляет родительской странице события, которые можно обработать в js коде:

            // код на сайте:
            
            window.addEventListener("message", receiveMessage, false);
            
            function receiveMessage(event) {
            
              // событие от виджета
              if(event.origin === 'https://fps-ui.prod.mnxsc.tech'){
            
                  const data = event.data || {};
                  console.log(data.type);
              }
            }
            Тип событияОписание
            initializedВиджет инициализирован
            errorПроизошла ошибка отображения виджета, при этом data.error будет содержать код ошибки
            loggedOutПользователь завершил работу с виджетом
            verificationFinishedВерификация пользователя завершена, при этом в поле data.status будет результат операции: ‘SUCCESS’ либо ‘FAILED’
            withdrawalFinishedВывод завершен, при этом в поле data.status будет результат операции: ‘SUCCESS’ либо ‘FAILED’
            Результаты поиска
              Ничего не найдено
              Оглавление
              Уведомления о событиях

              Уведомления о событиях

              Операции перевода формируются сервисом Moneta SBP/FPS в статусе Операция создана и для продолжения операции необходимо воспользоваться методом PaymentRequest MONETA.MerchantAPI, указав в поле payee номер операции с ведущим нулем.

              Результат подготовки операции перевода будет передан на указанный маркетплейсом при регистрации callback url в виде POST запроса с JSON объектом содержащим параметры:

              • operationId - номер операции с ведущим нулем, который необходимо указать в PaymentRequest в поле payee
              • messageId - номер сообщения СБП, его необходимо указать в operationInfo в поле SECUREDFIELD:unsBo_79

              Информация, подтверждающая валидность сообщения, будет замещена в заголовке HTTP запроса X-Digest.Сервис Moneta SBP/FPS размещает в этом заголовке подпись данных из тела запроса, созданную при помощи ApiSecret, предоставленного при регистрации маркетплейса с использованием алгоритма HMAC-SHA512.

              Уведомление на callback url считается успешно доставленным в случае получения от маркетплейса HTTP ответа с кодом 200. В противном случае, сервис Moneta SBP/FPS будет пытаться повторить доставку уведомления до достижения таймаута, после которого проведение перевода будет невозможно.

              Результаты поиска
                Ничего не найдено
                Оглавление
                Пример запроса PaymentRequest

                Пример запроса PaymentRequest

                Запрос формируется согласно интерфейсу MONETA.MerchantAPI.

                {
                    "Envelope": {
                        "Header": {
                            "Security": {
                                "UsernameToken": {
                                    "Username": "USERNAME",
                                    "Password": "PASSWORD"
                                }
                            } 
                        },
                        "Body": {
                            "PaymentRequest": {
                                "payer": "номер ЭСП МОНЕТА.РУ",
                                "payee": "0operationId",
                                "amount": "10",
                                "isPayerAmount": false,
                                "paymentPassword": "010101010",
                                "operationInfo": {
                                "attribute": [
                                    {
                                        "key": "SECUREDFIELD:unsBo_79",
                                        "value": "1234123452345345645674567578"
                                    }
                                ] }
                
                            }
                        }
                    }
                }
                Результаты поиска
                  Ничего не найдено
                  Оглавление
                  Просмотр истории транзакций

                  Просмотр истории транзакций

                  Сервис Moneta SBP/FPS позволяет просмотреть историю транзакций. История отображается в убывающем по дате создания транзакции порядке и позволяет посмотреть детальную информацию по выбранной транзакции на отдельной странице. Данные в истории обновляются автоматически с определенным периодом. Для отображения истории необходимо:

                  • сформировать и подписать токен доступа;
                  • открыть URL “<BASE_URL>/wallet/wallets/transactions”, передав сформированный токен в качестве параметра.
                  // DEV окружение
                  <iframe
                      src="https://fps-ui.dev.mnxsc.tech/wallet/wallets/transactions?frame=true&token={ONE_TIME_TOKEN}"
                      style="
                      width: 400px;
                      height: 600px;
                      border: 1px solid #CCC;
                      border-radius: 10px">
                  </iframe>
                  
                  
                  // PROD окружение
                  <iframe
                      src="https://fps-ui.prod.mnxsc.tech/wallet/wallets/transactions?frame=true&token={ONE_TIME_TOKEN}"
                      style="
                      width: 400px;
                      height: 600px;
                      border: 1px solid #CCC;
                      border-radius: 10px">
                  </iframe>