Создайте нередактируемые типы платежей для систем платежей. id типов платежей можно узнать также в справочнике, выделив нужный тип платежа и нажав Ctrl+i. id нужно будет указать в конфигурации.
Проинсталируйте модуль на сервер, обновите клиент биллинга. Затем создайте экземпляр модуля. Cоздайте в редакторе конфигурации модуля новую конфигурацию по нижеприведённому примеру и сделайте ее активной.
Для всех систем платежей рекомендуется использовать только https-порт.
Здесь и далее "пс" - платёжная система.
Возможные параметры конфигурации модуля:
В поле mps.1.protocol.ext можно указать расширения, если их несколько - через запятую:
osmpPrefix - означает, что тип поиска может быть передан как префикс в поле account. Расширение работает для протоколов ОСМП, Empay, Pegas, Rapida, Comepay.
noBaseAuth - означает, что в запросе не проверяется Base-аутентификация, т.е. параметры конфига mps.1.login и mps.1.passw не нужны.
payOnCheck - означает, что платеж проводится сразу при запросе на проверку.
addBalanceInfo - в ответ добавляется текущий баланс в поле account_balance (ОСМП, Empay, Pegas, Rapida, Comepay).
URL для систем платежей формируется из шаблона https://сервер/контекст/mpsexecuter/<mid>/<mpsid>, где <mid> - id модуля, <mpsid> - код системы платежей, т.е для вышеописанной конфигурации у CyberPlat mpsid=1.
Например, https://server:8443/bgbilling/mpsexecuter/10/1
Типы поиска :
- login - поиск по логину модулей DialUp или Voip (необходимо указать id модуля (mid)):
mps.1.search.mode=login
mps.1.search.mid=3
- contract - поиск по названию договора (например NK-0012; Здесь можно указать шаблон преобразования):
mps.1.search.mode=contract
mps.1.search.pattern=NK-$NUMBER - для поиска клиенту нужно будет ввести только 0012
или
mps.1.search.pattern=\A((?:\d\d\d\d\d\d)|(?:\d\d\d\d\d\d\d)|(?:\d\d\d\d\d))(\d\d)\z:::КФ$1-$2
(в последнем случае, если пришли 7, 8 или 9 цифр преобразовываем их к виду КФ$1-$2, т.е значения КФ12345-12 и 12345612 будут эквивалентны)
- phone - поиск по номеру телефона модуля phone (необходимо указать id модуля (mid));
- parameter - поиск по параметру договора (необходимо указать код типа параметра (pid)):
mps.1.search.mode=parameter
mps.1.search.pid=9
- mps_login - логин модуля MPS. Его выбирает себе клиент на странице статистики. Один для всех систем платежей.
- inet_login - логин модуля Inet (необходимо указать mid модуля Inet)
Для протоколов, не поддерживающих передачу типа поиска, реализована передача типа поиска через префикс x_идентификаторклиента (например, для ОСМП в поле account для поиска по search.1 логина 13 в запросе должно приходить: account=1_13). Для поддержки этого режима нужно установить mps.x.protocol.ext=1.
В комментарии ответа (если такой поддерживатся протоколом) можно передать номер, комментарий, параметр и/или баланс договора
mps.1.comment=$contract_title ($contract_comment) [$contract_param(4)] $contract_balance
Модификация ответа сервера биллинга на запросы от ПС
Для некоторых протоколов возможно модификация ответа сервера, например добавить дополнительные теги.
Для пртокола OSMP есть возможность дополнять ответ на запрос, например тегом <recsum> с программным выставлением значения рекомендованной суммы платежа.
Цель:
<response> <result>0</result> <osmp_txn_id>122</osmp_txn_id> <comment>3#0034586 (Для платежей Телевидение)</comment> <account_balance>0</account_balance> <recsum>1000</recsum> </response>
это можно реализовать в скрипте при обработке события MPSBeforeRequestEvent
public class AddRecsum extends EventScriptBase<MPSBeforeRequestEvent> { @Override public void onEvent( MPSOSMPRequestEvent event, Setup setup, ConnectionSet set ) throws Exception { event.getResponse().getParameters().put( "recsum", 1000 ); // event.setProcessed( true ); } }
С версии 7.2+ доступно событие MPSBeforeResponseEvent (поддерживается не всеми протоколами, есть в osmp, cp, kaspi, quickpay)
public class MPSResponseScript extends EventScriptBase<MPSBeforeResponseEvent> { @Override public void onEvent( MPSBeforeResponseEvent mpsBeforeResponseEvent, Setup setup, ConnectionSet connectionSet ) throws Exception { Contract contract = mpsBeforeResponseEvent.getResponse().getContract(); if ( contract != null ) { MPSResponse response = mpsBeforeResponseEvent.getResponse(); try( ContractParameterManager contractParameterManager = new ContractParameterManager( connectionSet.getConnection() ); ) { ContractAddressParamValue contractAddressParamValue = contractParameterManager.getAddressParam( contract.getId(), PARAM_ADDRESS_ID ); if ( contractAddressParamValue != null ) { address = contractAddressParamValue.getAddress(); } } Map<String, String> responseParameters = new HashMap<>(); if ( address != null ) { responseParameters.put( "add", "address: " + address ); } if ( !responseParameters.isEmpty() ) { response.getParameters().put( MPSTransactionManager.KEY_RESPONSE_PARAMETERS, responseParameters ); } } } }