Фильтр платежных шлюзов доступных только для конкретного магазина

Платежный шлюзВ платформе YC все платежные шлюзы общие для всех магазинов (объектов Shop). Это архитектурное решение было принято исходя из того, что, в основном,  все магазины будут иметь стандартный выбор платежных шлюзов. Тем самым, мы также упрощаем весь модуль системы оплат, чтобы он был отделен от других  основных модулей YC, насколько это возможно.

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

Проблема

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

Итак, кратко о поставленной задаче:

  • 2 магазина: SHOPFR и SHOPUS
  • 3 платежных шлюза: PGFR, PGUS и STORECOLLECT
  • SHOPFR должен предлагать на выбор только: PGFR, STORECOLLECT
  • SHOPUS должен предлагать на выбор только: PGUS, STORECOLLECT

Настройка платежных шлюзов

Первым шагом будет настройках 3-х платежных шлюзов, которые, как было сказано ранее, будут доступны по умолчанию для всех магазинов.

  1. Создайте класс, наследуясь от подходящего класса PaymentGateway, указывая поддерживаемые фичи.
  2. Создайте конфигурационный бин в Spring xml в модуле payment.
  3. Введите необходимые записи параметров TPAYMENTGATEWAYPARAMETER в базе данных yespay.
  4. Добавьте лейбы платежных шлюзов через запятую в атрибут YC_SYSTEM_ACTIVE_PAYMENT_GATEWAYS (или отметьте их в панели оплат в YUM).

Добавление нового атрибута для объектов Shop

Итак, все наши типы оплат доступны для выбора по всем магазинам. Теперь нам нужно указать, какие типы оплат будут доступны для каждого магазина отдельно.

Для этого мы добавим новый атрибут для объектов Shop – PAYMENTGATEWAYS. Атрибут будет принимать значение в виде списка разделенного запятыми (comma separated list). После чего мы можем использовать его через редактор YUM. Для магазина SHOPFR мы внесем значение – «PGFR,STORECOLLECT», для SHOPUS –  «PGUS,STORECOLLECT».

Пример кода

Теперь мы можем запросить наш дополнительный атрибут PAYMENTGATEWAYS и получить список платежных шлюзов для конкретного магазина. Далее внесем изменения в метод CheckoutPage.createPaymentFragment(), где мы добавим дополнительный фильтр для обработки списка оплат.

...
finalAttrValueShop paymentGatewaysLabels =ApplicationDirector.getCurrentShop().getAttributeByCode("PAYMENTGATEWAYS");

finalList<PaymentGatewayDescriptor> allowedPaymentGateways = paymentModulesManager.getPaymentGatewaysDescriptors(false);
finalString shopAllowed = paymentGatewaysLabels !=null&& paymentGatewaysLabels.getVal()!=null&&
paymentGatewaysLabels.getVal().length()>0? paymentGatewaysLabels.getVal():null;

finalIterator<PaymentGatewayDescriptor> itPayments = allowedPaymentGateways.iterator();
while(itPayments.hasNext()){
finalPaymentGatewayDescriptor current = itPayments.next();
finalboolean isShopAllowed =(shopAllowed ==null)||(shopAllowed !=null&&
shopAllowed.contains(current.getLabel()));
if(!isShopAllowed){
itPayments.remove();
}
}

finalAbstractChoice<PaymentGatewayDescriptor,PaymentGatewayDescriptor> gatewayDescriptorDropDownChoice =

newDropDownChoice<PaymentGatewayDescriptor>(
PAYMENT_FRAGMENT_GATEWAY_CHECKBOX,
newPaymentGatewayDescriptorModel(
newPropertyModel<String>(orderInfo,»paymentGatewayLabel»),
allowedPaymentGateways
),
allowedPaymentGateways){

Данный фрагмент кода сравнивает наш список оплат для конкретного магазина с общим списком и убирает из последнего те, которые отсутствуют в нашем списке.

Это все необходимые изменения, остальная часть кода работает корректно.

В этой статье мы рассмотрели некий механизм настройки YC платформы для правильного распределения платежных шлюзов.

Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: