Интеграция платёжных агентов с BPay посредством Scenario Manager

 

Scenario Manager BPay позволяет партнёрам добавить оплату услуг в своих приложениях за считанные минуты, не беспокоясь об интеграциях с поставщиками услуг. С этим сервисом пользователи вашего приложения смогут оплатить любую услугу из каталога BPay не покидая его, а владелец приложения получит коммисионный процент от этих транзакций.

Интеграция нашего Scenario Manager особенно полезна платёжным агентам, которые оказывают платёжные услуги населению от имени BPay.

Scenario Manager  представляет собой веб-приложение, которое можно встроить в любой сайт или мобильное приложение с помощью WebView.

Шаги интеграции:

1. Авторизация и получение токена доступа

Для авторизации в системе BPay необходимо выполнить два HTTP POST запроса:

  • На получение доступа к системе;
  • Для авторизации как пользователь системы.

От администратора BPay будут получены следующие данные, необходимые для взаимодействия с системой:

  • OPID – идентификатор оператора;
  • POINTID – идентификатор точки входа;
  • PROJECT – идентификатор проекта (по умолчанию “scenariomaster”);
  • PASSWORD – пароль;
  • USER-AGENT – user-agent для выполнения запросов (по умолчанию “SCENARIOAPP”).

 

1.1. Для получения токена проекта используется следующий адрес:

 

https://bscm-xapi.bpay.md/Auth/AuthProject

 

Тело POST запроса выглядит следующим образом:

{

   «project»:»PROJECT»

}

 

где PROJECT — полученный идентификатор проекта.

USER-AGENT должен быть добавлен как один из заголовков запроса.

Тело ответа:

{

   «code»:100,

   «token»:“TOKEN”,

   «type»:»unauthorized»

}

 

Где TOKEN — значение токена доступа, которое приложение должно запомнить для дальнейшего использования.

 

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

 

https://bscm-xapi.bpay.md/Auth/Authorization

 

Тело POST запроса выглядит следующим образом:

{

    «token»:»TOKEN»,

    «project»:»PROJECT»,

    «opid»: «OPID»,

    «pointid»: «POINTID»,

    «password»: «PASSWORD»,

    «authtype»: «operator»

}

 

Где TOKEN — полученный в предыдущем запросе токен доступа, а PROJECT, OPID, POINTID и PASSWORD — значения, ранее полученные от администратора BPay и перечисленные выше.

Пример тела ответа выглядит так:

{

    «code»: 100,

    «text»: «authorized»,

    «opid»: «1031»,

    «userid»: «784»,

    «pointType»: «3»,

    «region»: «»,

    «accesses»: {

        «ChangeOperatorOnBpayout»: null,

        «menu»: «[]»,

        «AtmMonitoring»: «0»,

        «AtmMonitoringMenu»: «[]»,

        «AtmMonitoringOpList»: «»,

        «PaymentsWithdrawalBpay»: «0»,

        «PaymentsCreate»: «1»,

        «PaymentsGetAll»: «0»,

        «PaymentsCancel»: «0»,

        «PaymentsFinish»: «0»,

        «PaymentsSetSuspicious»: «0»,

        «PaymentsStateNew»: «0»,

        «PaymentsRefund»: «0»,

        «PaymentsCreateFromUserAcc»: «0»,

        «PaymentsEditCreatingDate»: «0»,

        «PaymentsAllowProcess»: «0»,

        «PaymentsEdit»: «0»,

        «PaymentsStateChange»: «0»,

        «FilesGetContracts»: «0»,

        «AccountsEdit»: «0»,

        «AccountsEditMaxCredit»: «0»,

        «AccountsGetPrivateAccounts»: «0»,

        «UsersSendmsg»: «0»,

        «UsersGet»: «0»,

        «UsersCreate»: «0»,

        «UsersEdit»: «0»,

        «UsersDelete»: «0»,

        «UsersEditVerifiedType»: «0»,

        «UsersEditState»: «0»,

        «UsersRestore»: «0»,

        «UsersSetAsChecked»: «0»,

        «UsersEditComissGroup»: «0»,

        «UsersEditIsPSP»: «0»,

        «OperatorsGetAll»: «0»,

        «OperatorsPointSet»: «0»,

        «OperatorsPointEdit»: «0»,

        «OperatorsPointDel»: «0»,

        «OperatorsBallanceGetAll»: «1»

    }

}

 

Полученный ранее токен будет использован во всех последующих запросах. Учётная запись, которая используется при авторизации, привязывается к токену. Таким образом сервис понимает, кто отправил запрос и как его правильно обрабатывать.

Признаком успешного запроса будет код 100. Любое отличное значение сообщает об ошибке, в этом случае также будет присутствовать поле text с описанием ошибки.

2. Запуск Scenario Manager

 

Для запуска Scenario Manager необходимо открыть в WebView адрес  https://www.bpay.md/scenario-master/?base64=<base64 входных данных>

В среде .NET может быть использован элемент управления WebView2.

В приложении Android — Android WebView.

В приложении iOS — WKWebView.

Для React Native — React Native WebView.

Перед открытием необходимо сформировать пакет входных данных. Данные представляют собой json, конвертированный в строку формата base64.

Для встраивания сервиса в веб-приложение, нужно добавить тег <script src=»https://www.bpay.md/scenario-master/main.js»></script> перед  закрывающим тегом </body>, а также блок <div id=»scenario» data-param=»<base64 входных данных>»></div> в том месте страницы, где вы хотите отобразить Scenario Manager.

 

Пример кода для встраивания в веб-приложение:

<div id=»scenario» data-

params=»ewogICAgImJhc2VBZGRyZXNzIjogImh0dHBzOi8vbS10eGFwaS5icGF5Lm1kIiwKICAgICJpbm5hbWUiOiAibW9sZGNlbGwiLAogICAgImxhbmci
OiAicnUiLAogICAgIm1vZGUiOiAicHJvdmlkZXJzIiwKICAgICJvcHRpb25zIjogewogICAgICAgICJ1c2VyQWdlbnQiOiAiQlBBWUFQUCBpUGhvbmUiCiAg
ICB9LAogICAgInByb2plY3QiOiAibW9iaWxlYXBwIiwKICAgICJwcm92aWRlciI6ICJtb2xkY2VsbCIsCiAgICAidG9rZW4iOiAiODJmYTM5MmVlNDRiNjNl
ZjhhZjQ1NTlhNjU0ZTg4Y2MiCn0=»></div>

<script src=»https://www.bpay.md/scenario-master/main.js»></script>

 

Структура входных данных:

{

    «mode»: «other»,

    «provider»: «catalog»,

    «lang»: «ru»,

    «token»: «67ce2c466961a3a49cdea68ca91d72ab»,

    «enviroment»: «chromewebview»,

    «baseAddress»: «https://bscm-xapi.bpay.md»,

    «project»: «PROJECT»,

    «authtype»: «operator»,

    «initialStep»: «categories»,

    «options»: {

        «clearInvoicesBeforeCreate»: true,

        «showInvoiceInfo»: true,

        «catalogIgnoreVType»: true,

        «externalOperPayment»: true,

        «opid»: «OPID»,

        «userAgent»: «USER-AGENT»

    },

    «globalStyle»: [

        «https://www.bpay.md/scenario-master/scenario.css»,

        «https://www.bpay.md/scenario-master/light.css»

    ]

}

 

Описание параметров:

  • mode – категория сценариев, раздел providers является сценарием конкретных услуг.
  • provider – идентификатор конкретного сценария.
  • lang – используемый язык, присутствует поддержка русского и румынского языков.
  • token – токен, полученный в разделе 1.
  • enviroment – константа, указывающая на среду, где применяется Scenario Manager.
  • baseAddress – адрес API, совпадает с разделом 1.
  • project – константа, указанная в разделе 1.
  • authtype – константа.
  • options – набор опций,модифицирующих поведение сценариев.
  • globalStyle – набор стилей для интерфейса.

В зависимости от входных параметров, сервис будет отображать соответствующие экраны. В приведенном выше примере откроется страница со списком категорий.

Агент может применить свой набор стилей интерфейса вместо используемого по умолчанию. Для этого необходимо передать ссылку на css файл с этими стилями в качестве параметра globalStyle.

 

Примеры открытия других страниц

 

Форма оплаты Moldcell

{

    «mode»: «providers»,

    «provider»: «moldcell»,

    «lang»: «ru»,

    «token»: «67ce2c466961a3a49cdea68ca91d72ab»,

    «enviroment»: «chromewebview»,

    «baseAddress»: «https://bscm-xapi.bpay.md»,

    «project»: «PROJECT»,

    «authtype»: «operator»,

      «options»: {

        «clearInvoicesBeforeCreate»: true,

        «showInvoiceInfo»: true,

        «catalogIgnoreVType»: true,

        «externalOperPayment»: true,

        «opid»: «OPID»,

        «userAgent»: «USER-AGENT»

    },

    «globalStyle»: [

        «https://www.bpay.md/scenario-master/scenario.css»,

        «https://www.bpay.md/scenario-master/light.css»

    ]

}

 

Каталог услуг

{

    «mode»: «other»,

    «provider»: «catalog»,

    «lang»: «ru»,

    «token»: «67ce2c466961a3a49cdea68ca91d72ab»,

    «enviroment»: «chromewebview»,

    «baseAddress»: «https://bscm-xapi.bpay.md»,

    «project»: «PROJECT»,

    «authtype»: «operator»,

      «options»: {

        «clearInvoicesBeforeCreate»: true,

        «showInvoiceInfo»: true,

        «catalogIgnoreVType»: true,

        «externalOperPayment»: true,

        «opid»: «OPID»,

        «userAgent»: «USER-AGENT»

    },

    «globalStyle»: [

        «https://www.bpay.md/scenario-master/scenario.css»,

        «https://www.bpay.md/scenario-master/light.css»

    ]

}

 

Страница со списком методов для вывода денежных средств

{

    «mode»: «other»,

    «provider»: «cashout»,

    «lang»: «ru»,

    «token»: «67ce2c466961a3a49cdea68ca91d72ab»,

    «enviroment»: «chromewebview»,

    «baseAddress»: «https://bscm-xapi.bpay.md»,

    «project»: «PROJECT»,

    «authtype»: «operator»,

       «options»: {

        «clearInvoicesBeforeCreate»: true,

        «showInvoiceInfo»: true,

        «catalogIgnoreVType»: true,

        «externalOperPayment»: true,

        «opid»: «OPID»,

        «userAgent»: «USER-AGENT»

    },

    «globalStyle»: [

        «https://www.bpay.md/scenario-master/scenario.css»,

        «https://www.bpay.md/scenario-master/light.css»

    ]

}

Страница с формой Cashcode

{

    «mode»: «cashout»,

    «provider»: «bpay_cashcode»,

    «lang»: «ru»,

    «token»: «67ce2c466961a3a49cdea68ca91d72ab»,

    «enviroment»: «chromewebview»,

    «baseAddress»: «https://bscm-xapi.bpay.md»,

    «project»: «PROJECT»,

    «authtype»: «operator»,

       «options»: {

        «clearInvoicesBeforeCreate»: true,

        «showInvoiceInfo»: true,

        «catalogIgnoreVType»: true,

        «externalOperPayment»: true,

        «opid»: «OPID»,

        «userAgent»: «USER-AGENT»

    },

    «globalStyle»: [

        «https://www.bpay.md/scenario-master/scenario.css»,

        «https://www.bpay.md/scenario-master/light.css»

    ]

}

 

3. Подписка на события и завершение сценария

 

Для обратной связи необходимо подписаться на хуки (события), вызываемые Scenario Manager. Для этого надо подписаться на событие WebMessageReceived компоненты WebView. В обработчике этого события от Scenario Manager будут приходить события в виде json строки со следующей структурой:

{

    «invoke»: «<название события>»,

    «data»: «<объект данных, связанных с событием>»

}

 

3.1. Событие tokenUpdate

 

В некоторых обстоятельствах токен доступа к API может меняться в ходе работы Scenario Manager.

Когда это происходит, Scenario Manager публикует событие tokenUpdate. Хост-приложение должно обновить у себя токен, поскольку предыдущий будет инвалидирован. Пример данных:

{

“invoke”: “tokenUpdate”,

“data”: {

“token”: “67ce2c466961a3a49cdea68ca91d72ab”,

}

}

 

3.2. Событие invalidToken

 

Событие invalidToken публикуется при получении негативного результата проверки токена. При обработке этого события необходимо повторить процесс получения токена и авторизации.

{

“invoke”: “invalidToken”,

“data”: {

}

}

 

3.3. Событие scenarioEnd

 

Событие публикуется при завершении сценария. В случае завершения услуги в качестве данных будет получен объект, содержащий информацию о созданном платеже.

 

Пример завершения услуги moldcell:

{

«PayMethod»: «pos»,

«FromAmount»: 12.1,

«FromValute»: «498»,

«FromValuteName»: «MDL»,

«Provider»: «moldcell»,

«ProvAccount»: «79789456»,

«ProviderName»: «Moldcell»,

«ProvAmount»: «10.00»,

«ProvValute»: «498»,

«ProvValuteName»: «MDL»,

«ProvFee»: null,

«Rate1»: null,

«Rate2»: null,

«Description»: «Оплата услуги Moldcell»,

«Receipt»: null,

«Params»: {

«params»: {

«MinSum»: «0.00»,

«MaxSum»: «1000000»,

«sumType»: «receive»,

«opaccount»: 79789456,

«opamount»: 10,

«sumType:Name»: «Сумма получателя»,

«settlementMsg»: «Оплата услуги Moldcell»

}

},

«senderCommision»: null,

«AllowPay»: «1»,

«InvID»: «908»,

«comiss_group»: «»,

«logoPath»: «https://st.bpay.md/mdar/services/logo/mobile/Moldcell.png»,

«categ»: null,

«TemplateAllowed»: true,

«TemplateAutoPayment»: null,

«TemplateDynamicAmount»: null,

«UserID»: «4»

}

Описание ключевых параметров :

FromAmount – сумма для списания с оператора

Provider – идентификатор услуги в системе Bpay

ProvAccount – счёт получателя

ProvAmount – сумма получателя

ProviderName – наименование услуги

InvID – идентификатор инвойса