...
Личному кабинету в некоторых случаях требуется знать базовый URL, по которому абоненты получают доступ к нему. Личный кабинет биллинга может получить это значение из запроса, однако при использовании NGINX значение из запроса может быть не правильным. Поэтому базовый URL следует указать в конфигурации в параметре baseUrl.
Также личному кабинету требуется знать IP-адрес абонента, который пользуется им в текущий момент (например, для авторизации по IP-адресу или блокировке при переборе логинов/паролей). Поэтому при использовании NGINX требуется указать HTTP-заголовок в параметре параметре context.hostHttpRequestHeader, из которого получать реальный IP-адрес вместо физического IP-адреса HTTP-соединения.
Блок кода |
---|
|
context {
... // Базовый адрес сервера (через который абоненты получают доступ к ЛК). По умолчанию используется значение из запроса
//baseUrl = 'https://provider.ru/selfcare'
baseUrl = 'https://my.provider.ru'
// Идентификатор хоста по HTTP-заголовку, например, X-Real-IP. По умолчанию используется IP-адрес хоста
hostHttpRequestHeader = 'X-Real-IP'
} |
...
Блок кода |
---|
|
content {
kernel {
// название контрагента, отображаемое на странице
customerTitle = { contract, contractParameterMap ->
// ID параметров договоров названия физ. лиц (для customerTitle)
def individualCustomerTitleParamIds = [33, 0, 0, 0, 0];
// ID параметров договоров названия юр. лиц (для customerTitle)
def corporationCustomerParamIds = [10, 0, 0, 0, 0];
def paramIds = contract.personType == 1 ? corporationCustomerParamIds : individualCustomerTitleParamIds;
String result = contractParameterMap.values().stream()
.filter{ v -> paramIds.contains( v.entitySpecAttrId ) && notBlankString( v.toString() ) }
.findFirst()
.map{ v -> v.toString() }
.orElse( null );
return result;
}
...
}
...
} |
Группировка субдоговоров в меню
...
Блок кода |
---|
|
content {
kernel {
// группировка субдоговоров (для меню)
subContractGroup = { subContractList ->
subContractList
.stream()
.sorted({ a,b -> a.title.compareTo(b.title) })
.collect( Collectors.groupingBy{ contract ->
// можно группировать субдоговора по группам договоров
if( contractInGroup( contract, [1, 2, 3, 4, 20] ) ) {
return "contract.sub.group.01.internet";
}else if( contractInGroup( contract, [5, 6, 7, 8, 9] ) ) {
return "contract.sub.group.02.phone";
} else {
return "contract.sub.group.99.other";
}
// если всем возвращать пустую строку - то группировки не будет
return "";
})
.entrySet()
.stream()
.sorted({ a,b -> a.key.compareTo(b.key) })
.collect( Collectors.toList() );
}
...
}
...
} |
В примере при группировке используются строки вида "contract.sub.group.01.internet". Число в данном случае используется для сортировки групп, а само название группы должно быть прописано в Locale_ru_RU.properties по ключу:
...
Блок кода |
---|
|
menu {
// список пунктов верхнего уровня
def firstLevel = [];
children = firstLevel;
// Новости
firstLevel << menu( page: "kernel/news", icon: "fa-newspaper-o", title: "menu.news" )
// если авторизован по логину/паролю
if( isCustomer() ) {
// Уведомления + Рассылки
firstLevel << menu( page: "kernel/notificationsEx", subPage: "notifications", icon: "fa-envelope-o",
title: "menu.notifications", badge: "#{notificationBean.getUnreadCount()}", badgeUpdate: "#{notificationBean.populate()}" )
} else {
// Уведомления
firstLevel << menu( page: "kernel/notifications", subPage: "", icon: "fa-envelope-o", title: "menu.notifications" )
}
// Баланс
firstLevel << menu( page: "kernel/balance", icon: "fa-rub", title: "menu.balance" )
// если авторизован по логину/паролю
if( isCustomer() ) {
// Лимит
firstLevel << menu( page: "kernel/limit", icon: "fa-umbrella", title: "menu.limit" )
// Тарифные опции
firstLevel << menu( page: "kernel/tariffOptions", icon: "fa-cogs", title: "menu.tariffOptions" )
... |
Конфигурация приема платежей (mybgbilling-payment.groovy)
В файле mybgbilling-payment.groovy настраивается, какие платежные системы будут присутствовать при проведении оплаты из личного кабинета. Часто значения по умолчанию не требуют изменений. ЛК сам создаст список провайдеров из платежных модулей и при проведении оплаты отобразит те из них, модули которых подключены к данному договору.
Блок кода |
---|
|
paymentConfig {
/* Если true - то используются только провайдеры/модули, которые указаны в providers. */
replaceProviders = false
/* Показывать оплату через модуль Card */
showCard = false
/* Нужно ли указывать email/телефон при оплате */
needReceiptContacts = true
providers = [
]
/* Список возможных способов пополнения можно указать вручную, но также нужно учитывать, что если модуль отсутствует на договоре -
то пункт с соответствующим модулем будет исключен из списка. */
payments = [
]
} |
Если вы хотите, чтобы дополнительно отображался вариант с активацией карты оплаты модуля Card, укажите в конфигурации showCard=true.
Блок кода |
---|
|
paymentConfig {
...
/* Показывать оплату через модуль Card */
showCard = true
...
} |
При необходимости к текущим платежным системам вы можете добавить кнопку-ссылку:
Блок кода |
---|
|
paymentConfig {
/* Если true - то используются только провайдеры/модули, которые указаны в providers. */
replaceProviders = false
/* Показывать оплату через модуль Card */
showCard = false
/* Нужно ли указывать email/телефон при оплате */
needReceiptContacts = true
providers = [
// внешняя ссылка
provider {
id = "externalLinkQiwi"
title = "Qiwi"
image = 'static/images/logos/qiwi.png'
config = config {
url = 'https://qiwi.com/payment/form.action?provider=297'
}
}
]
payments = [
]
} |
Информация |
---|
Обратите внимание на параметр replaceProviders. Если он указан true, то не будет автоматической подгрузки провайдеров из платежных модулей - будут только те провайдеры, которые указаны в providers. Т.е. если его установить в true в конфигурации, что представлена выше, то при проведении платежа будет доступна только эта внешняя ссылка, даже если к договору подключены какие-то платежные модули. |
Также для некоторых случаев с помощью providers можно переопределить конфигурацию провайдера, например, указать для Яндекс.Денег, какие именно типы платежей можно принимать:
Блок кода |
---|
|
paymentConfig {
/* Если true - то используются только провайдеры/модули, которые указаны в providers. */
replaceProviders = false
/* Показывать оплату через модуль Card */
showCard = false
/* Нужно ли указывать email/телефон при оплате */
needReceiptContacts = true
providers = [
// для Яндекс.Деньги возможно нужно указать типы платежей
provider {
// код модуля Яндекс.Деньги
moduleId = кодмодуля
config = config {
//Список доступных типов оплаты (Из в ЦПП). Пример: PC:Оплата со счета Яндекс.Денег;AC:Оплата с банковской карты;MC:Платеж со счета мобильного телефона;GP:Оплата наличными через кассы и терминалы;WM:Оплата с кошелька в системе WebMoney;SB:Оплата через Сбербанк Онлайн
//paymentTypes = 'PC:payment.yamoney.PC;AC:payment.yamoney.AC;MC:payment.yamoney.MC;GP:payment.yamoney.GP;WM:payment.yamoney.WM;SB:payment.yamoney.SB'
paymentTypes = 'PC:payment.yamoney.PC'
}
}
]
payments = [
]
}
|
Параметр payments предназначен для указания режимов оплаты и их порядка на странице вручную. Если в этом параметре указаны какие-то режимы, то при проведении платежа будут доступны только они (при дополнительном условии, что соответствующий модуль подключен к договору):
Блок кода |
---|
|
paymentConfig {
/* Если true - то используются только провайдеры/модули, которые указаны в providers. */
replaceProviders = false
/* Показывать оплату через модуль Card */
showCard = false
/* Нужно ли указывать email/телефон при оплате */
needReceiptContacts = true
providers = [
]
payments = [
payment {
title = 'payment.bankCard'
image = 'static/images/logos/visa_mastercard.png'
providerId = 'yamoney'
type = 'bankCard'
config = config {
paymentTypes = 'AC:payment.yamoney.AC'
}
},
payment {
title = 'payment.yamoney'
image = 'static/images/logos/yamoney.png'
providerId = 'yamoney'
type = 'bankCard'
config = config {
paymentTypes = 'PC:payment.yamoney.PC'
}
},
payment {
title = 'payment.card'
image = 'static/images/logos/card.png'
providerId = 'card'
}
]
} |
Еще один пример:
Блок кода |
---|
|
paymentConfig {
/* Если true - то используются только провайдеры/модули, которые указаны в providers. */
replaceProviders = false
/* Показывать оплату через модуль Card */
showCard = false
/* Нужно ли указывать email/телефон при оплате */
needReceiptContacts = true
providers = [
provider {
id = "externalLinkQiwi"
title = "Qiwi"
image = 'static/images/logos/qiwi.png'
config = config {
url = 'https://qiwi.com/payment/form.action?provider=297'
}
}
]
payments = [
payment {
title = 'payment.bankCard'
image = 'static/images/logos/visa_mastercard.png'
providerId = 'yamoney'
type = 'bankCard'
config = config {
paymentTypes = 'AC:payment.yamoney.AC'
}
},
payment {
title = 'payment.yamoney'
image = 'static/images/logos/yamoney.png'
providerId = 'yamoney'
type = 'bankCard'
config = config {
paymentTypes = 'PC:payment.yamoney.PC'
}
},
payment {
providerId = ’externalLinkQiwi’
}
]
} |
Параметр needReceiptContacts указывает, нужно ли абоненту указывать email или телефон перед проведением оплаты (введенную информацию далее можно использовать при создании электронного чека).
Обновление личного кабинета
...