Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Создайте нередактируемые не редактируемые типы платежей для систем платежей. id типов платежей можно узнать также в справочнике, выделив нужный тип платежа и нажав Ctrl+i. id нужно будет указать в конфигурации.

Проинсталируйте модуль на сервер, обновите клиент биллинга. Затем создайте экземпляр модуля. Cоздайте Создайте в редакторе конфигурации модуля новую конфигурацию по нижеприведённому примеру и сделайте ее активной.

Для всех систем платежей рекомендуется использовать только https-порт.

Здесь и далее "псПС" - платёжная система.

Возможные параметры конфигурации модуля:

Блок кода
languageruby
titleКонфигурация
linenumbersfalse
collapsetrue
# параметр задает список конфигураций ПС, если не указан, то по умолчанию mps.ids=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
mps.ids=<mpsId_1>[,<mpsId_2>][,<mpsId_3>]...[,<mpsId_N>]
# Системы платежей добавляются как mps.<mpsId>.параметры, где <mpsId> - порядковыйуникальный номер
ключ в пределах данной конфигурации
# Вкл/выкл - 1/0 - принимать или нет платежи для этой псПС
mps.<mpsId>.mode=1
# Название
mps.<mpsId>.title=CyberPlat
# Используемый протокол для общения псПС с биллингом
mps.<mpsId>.protocol=cp
# Логин/пароль пс. Должен различаться для различных систем
mps.<mpsId>.login=
mps.<mpsId>.passw=
# id типа платежа, с которым добавляется платёж в договор, при проведении с этой псПС
mps.<mpsId>.pid=
#
# Комментарий, возвращающийся в ответе на проверку статуса/проведение платежа
# (если в протоколе есть комментарий ответа)
#mps.comment=$CONTRACT ($COMMENT)
#
# Сертификаты
# Проверять клиентский сертификат (рекомендуется, если позволяет протокол псПС)
mps.<mpsId>.cert=1
# Клиентский сертификат (открытый ключ)
# (для протокола eport открытый ключ указывается здесь же, а mps.1.cert=0)
# возможно указать через modulus и exponent:
#mps.<mpsId>.cert.mod=
#mps.<mpsId>.cert.exp=
# или в encoded(байты в 16-ричном представлении)
#mps.<mpsId>.cert.encoded=
# или в pem (base64), без header/footer (-----*** PUBLIC KEY-----) и переносов строк
mps.<mpsId>.cert.pem=
# кодировка параметров входящих запросов, например utf-8, cp1251
#mps.<mpsId>.request.encoding=
# Поиск договора для проведения платежа.
# В некоторых системах возможны типы поиска - дополнительное поле.
# Если их больше 1, то с дополнительным индексом. Если он отсутствует, используется тип поиска 0, 
# т.е. используются параметры поиска из mps.1.search.xxx (для mps.1.search.mode).
# Если присутствует то, например, параметры поиска будут из mps.1.search.1.xxx (для mps.1.search.1.mode)
# Обратите внимание, что если если задано без индекса (...search.mode=), то и остальные параметры должны
# соответствовать (...search.pattern=) и для остальных индексов аналогично.
#
# Поддержка передачи типа поиска через префикс
# (т.е. если ищется договор x0000 c типом поиска 1, то в поле account протокола osmp передаётся 1_x0000)
#mps.<mpsId>.protocol.ext=osmpPrefix
# Отключение Base-аутентификации
#mps.<mpsId>.protocol.ext=noBaseAuth
# Если используется несколько расширений, их нужно прописать через запятую:
#mps.<mpsId>.protocol.ext=noBaseAuth, osmpPrefix
#
# Тип поиска (mps_login|contract|login|voice|email|phone|parameter|inet_login|custom)
mps.<mpsId>.search.mode=
# Код модуля для поиска (необходим для типов поиска login, phone)
#mps.<mpsId>.search.mid=
# Включение "множественного поиска", то есть проверка всего списка regex
# при влючении этого режима возможно задание нескольких условий поиска в формате
#mps.1<mpsId>.search.multi=1
#mps.<mpsId>.search.1.mode=contract
#mps.<mpsId>.search.1.pattern=afsdfaf
#mps.<mpsId>.search.2.mode=parameter
#mps.<mpsId>.search.2.pid=4
#mps.<mpsId>.search.3.mode=phone
#mps.<mpsId>.search.3.mid=5
# Шаблон преобразования - pattern:::result, если пришедшее значение подходит под regexp, то 
# оно преобразуется перед поиском, если нет - остаётся без изменений, по умолчанию - без изменений.
# Например, \A((?:\d{5})|(?:\d{6})|(?:\d{7}))(\d{2})\z:::NK$1-$2
# если пришедший номер для поиска представляет собой 12345608, то он будет преобразован в NK123456-08,
# и уже по нему будет произведён поиск договора
#mps.<mpsId>.search.pattern=
# пользовательский класс реализующий поиск, должен реализовывать интерфейс ru.bitel.bgbilling.modules.mps.server.bean.FindContract
#mps.<mpsId>.search.custom=
 # regexp названий договоров, для которых возможен поиск. Если название договора не совпадает с regexp, 
# то он не будет найден для системы платежей для этого типа поиска
#mps.<mpsId>.search.allow.contract.regexp=NK-.*
# Группы договоров, для которых возможен поиск для этого типа поиска
#mps.<mpsId>.search.allow.contract.groups=4,2,5,3
#
# Ограничения на пополняемую сумму
# минимальная. По умолчанию - 0.
mps.<mpsId>.min.summ=
# максимальная. По умолчанию - 1000000
mps.<mpsId>.max.summ=
#
# Разница во времени в минутах между сервером биллинга и системой платежей (например система работает по московскому времени, биллинг
# по уфимскому +2 часа - 180)
#mps.<mpsId>.timeoffset=
# промежуток времени между временем платежа и реальным временем, с поправкой на timeoffset. 
# если задано и промежуток оказался больше то платёж не пройдёт
#mps.<mpsId>.paytime=
#
# Параметры логина mps (может использоваться для поиска договора при проведении платежа)
# Формат вывода значения числового логина mps (на web-статистике)
#mps.mps_login.format=
# regexp проверки введённого значения
#mps.mps_login.regexp=
# Ошибка, выводимая в web-статистике при несовпадении введённого логина mps с regexp
#mps.mps_login.regexp.error=
#
#mps.<mpsId>.request.encoding=utf-8
#mps.<mpsId>.response.encoding=utf-8

В поле mps.1.protocol.ext можно указать расширения, если их несколько - через запятую:

...

addBalanceInfo - в ответ добавляется текущий баланс в поле account_balance (ОСМП, Empay, Pegas, Rapida, Comepay).

Примечание

URL для платежных систем

...

формируется из шаблона https://

...

хост[:port]/контекст/mpsexecuter/<mid>/<mpsid>,

...

где контекст - по умолчанию bgbilling, <mid> - id модуля MPS, <mpsid> - код системы платежей, т.едля вышеописанной конфигурации у CyberPlat mpsid=1.

Например, https://server:8443/bgbilling/mpsexecuter/10/1

Типы поиска :

- login - поиск по логину модулей DialUp или Voip (необходимо указать id модуля (mid)):

...

Для протоколов, не поддерживающих передачу типа поиска, реализована передача типа поиска через префикс x_идентификаторклиента идентификатор клиента (например, для ОСМП в поле account для поиска по search.1 логина 13 в запросе должно приходить: account=1_13). Для поддержки этого режима нужно установить mps.x.protocol.ext=1.

В комментарии ответа (если такой поддерживатся поддерживается протоколом) можно передать номер, комментарий, параметр и/или баланс договора

...

Блок кода
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 );
    	    }
	    }
	}
}