mirror of
https://github.com/valitydev/adapter-flow-lib.git
synced 2024-11-06 00:05:22 +00:00
Refactor lib (#16)
This commit is contained in:
parent
063586c512
commit
6ffe114df5
@ -1,12 +1,14 @@
|
||||
### Как использовать бибилиотеку?
|
||||
|
||||
1. Необходимо провести аналитику и определить какой процесс вам подходит. Список процессов:
|
||||
* [Процесс с полным прохождением 3дс версии 1.0 и 2.0](./flows/Full Three Ds V1 V2 Flow Steps.md)
|
||||
* [Простой процесс с редиректом и поллингом статусов после всех операций](./flows/Full Three Ds V1 V2 Flow Steps.md)
|
||||
* [Процесс с полным прохождением 3дс версии 1.0 и 2.0](./flows/full_three_ds_v1_v2_flow_steps.md)
|
||||
* [Простой процесс с редиректом и поллингом статусов после всех операций](./flows/simple_redirect_with_polling_flow_steps.md)
|
||||
|
||||
2. Если подходящий вам процесс найден, процесс продолжается по следующему пути:
|
||||
1. Подготавливается конфигурация под spring-boot [настройка конфигурации](./spring-boot-configuration.md).
|
||||
2. Релизовать, соответствующие выбранному флоу, методы
|
||||
из [RemoteClient](../src/main/java/dev/vality/adapter/flow/lib/client/RemoteClient.java) [инструкция](./client_implementations_manual.md)
|
||||
3. Реализовать валидаторы для ваших входных параметров, уникальных для вашего адаптера и настраевымых командой
|
||||
поддержки поддержкой(options - на уровне протокола damsel) [интерфейс](../src/main/java/dev/vality/adapter/flow/lib/validator/Validator.java)
|
||||
поддержки поддержкой(options - на уровне протокола
|
||||
damsel) [интерфейс](../src/main/java/dev/vality/adapter/flow/lib/validator/Validator.java)
|
||||
4. Реализация тестов
|
@ -1 +0,0 @@
|
||||
### Простой процесс с редиректом и поллингом статусов после всех операций
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
8
docs/flows/simple_redirect_with_polling_flow_steps.md
Normal file
8
docs/flows/simple_redirect_with_polling_flow_steps.md
Normal file
@ -0,0 +1,8 @@
|
||||
### Простой процесс с редиректом и поллингом статусов после всех операций
|
||||
|
||||
![alt text](imgs/simple_redirect_with_polling_flow_steps.drawio.svg)
|
||||
|
||||
1. Запрос на авторизацию
|
||||
2. Получение ссылки для перенаправления клиента
|
||||
3. Перенаправление клиента
|
||||
4. Опрос статуса после прохождения таймаута
|
@ -1 +1,2 @@
|
||||
### Конфигурация Spring Boot?
|
||||
|
||||
|
2
pom.xml
2
pom.xml
@ -13,7 +13,7 @@
|
||||
</parent>
|
||||
|
||||
<artifactId>adapter-flow-lib</artifactId>
|
||||
<version>0.0.11</version>
|
||||
<version>0.1.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>adapter-flow-lib</name>
|
||||
|
@ -0,0 +1,7 @@
|
||||
package dev.vality.adapter.flow.lib.constant;
|
||||
|
||||
public enum HttpMethod {
|
||||
|
||||
GET, POST;
|
||||
|
||||
}
|
@ -66,8 +66,11 @@ public class CtxToEntryModelConverter implements Converter<PaymentContext, Entry
|
||||
.refundData(initRefundData(paymentInfo))
|
||||
.paymentId(idGenerator.get(paymentInfo.getInvoice().getId()))
|
||||
.createdAt(paymentInfo.getPayment().getCreatedAt())
|
||||
.currency(payment.getCost().getCurrency().getSymbolicCode())
|
||||
.amount(payment.getCost().getAmount())
|
||||
.currency(Currency.builder()
|
||||
.symbolicCode(payment.getCost().getCurrency().getSymbolicCode())
|
||||
.numericCode(payment.getCost().getCurrency().getNumericCode())
|
||||
.build()
|
||||
).amount(payment.getCost().getAmount())
|
||||
.details(paymentInfo.getInvoice().getDetails().getDescription())
|
||||
.payerInfo(PayerInfo.builder()
|
||||
.ip(ProxyProviderPackageCreators.extractIpAddress(context))
|
||||
|
@ -65,7 +65,13 @@ public class RecCtxToEntryModelConverter implements Converter<RecurrentTokenCont
|
||||
.cardData(cardData)
|
||||
.refundData(initRefundData(recurrentPaymentTool, orderId))
|
||||
.paymentId(orderId)
|
||||
.currency(recurrentPaymentTool.getMinimalPaymentCost().getCurrency().getSymbolicCode())
|
||||
.currency(Currency.builder()
|
||||
.symbolicCode(
|
||||
recurrentPaymentTool.getMinimalPaymentCost().getCurrency().getSymbolicCode())
|
||||
.numericCode(
|
||||
recurrentPaymentTool.getMinimalPaymentCost().getCurrency().getNumericCode())
|
||||
.build()
|
||||
)
|
||||
.amount(recurrentPaymentTool.getMinimalPaymentCost().getAmount())
|
||||
.details(recurrentPaymentTool.getId())
|
||||
.payerInfo(PayerInfo.builder()
|
||||
|
@ -18,8 +18,6 @@ public class SimpleRedirectWithPollingResultIntentResolver implements ResultInte
|
||||
@Override
|
||||
public Intent initIntentByStep(ExitStateModel exitStateModel) {
|
||||
Step nextStep = exitStateModel.getNextStep();
|
||||
EntryStateModel entryStateModel = exitStateModel.getEntryStateModel();
|
||||
Step currentStep = entryStateModel.getCurrentStep();
|
||||
return switch (nextStep) {
|
||||
case CHECK_STATUS -> exitStateModel.getLastOperationStatus() == Status.NEED_REDIRECT
|
||||
? intentResultFactory.createSuspendIntentWithCallbackAfterTimeout(exitStateModel)
|
||||
|
@ -17,7 +17,7 @@ import java.util.Map;
|
||||
public class BaseRequestModel {
|
||||
|
||||
/**
|
||||
* Uniq Long identifier for payment.
|
||||
* Uniq Long identifier for payment.
|
||||
*/
|
||||
private Long paymentId;
|
||||
/**
|
||||
@ -29,12 +29,12 @@ public class BaseRequestModel {
|
||||
*/
|
||||
private Long amount;
|
||||
/**
|
||||
* Currency in symbolic formats (example: "USD").
|
||||
* Code and symbolic code of currency.
|
||||
*/
|
||||
private String currency;
|
||||
private Currency currency;
|
||||
/**
|
||||
* Timestamp RFC 3339.
|
||||
*
|
||||
* <p>
|
||||
* The string must contain the date and time in UTC in the following format:
|
||||
* `2016-03-22T06:12:27Z`
|
||||
*/
|
||||
|
@ -0,0 +1,23 @@
|
||||
package dev.vality.adapter.flow.lib.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Currency {
|
||||
|
||||
/**
|
||||
* Currency in symbolic formats (example: "USD").
|
||||
*/
|
||||
private String symbolicCode;
|
||||
/**
|
||||
* Currency in symbolic formats (example: "USD").
|
||||
*/
|
||||
private Short numericCode;
|
||||
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package dev.vality.adapter.flow.lib.model;
|
||||
|
||||
import dev.vality.adapter.flow.lib.constant.HttpMethod;
|
||||
import dev.vality.adapter.flow.lib.constant.ThreeDsType;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@ -14,6 +15,10 @@ import java.util.Map;
|
||||
@AllArgsConstructor
|
||||
public class ThreeDsData {
|
||||
|
||||
/**
|
||||
* Http method type.
|
||||
*/
|
||||
private HttpMethod httpMethod = HttpMethod.GET;
|
||||
/**
|
||||
* Use type to select desired 3ds flow.
|
||||
*/
|
||||
|
@ -1,5 +1,6 @@
|
||||
package dev.vality.adapter.flow.lib.service;
|
||||
|
||||
import dev.vality.adapter.flow.lib.constant.HttpMethod;
|
||||
import dev.vality.adapter.flow.lib.constant.RedirectFields;
|
||||
import dev.vality.adapter.flow.lib.model.EntryStateModel;
|
||||
import dev.vality.adapter.flow.lib.model.ExitStateModel;
|
||||
@ -13,6 +14,7 @@ import dev.vality.adapter.flow.lib.utils.TimerProperties;
|
||||
import dev.vality.damsel.base.Timer;
|
||||
import dev.vality.damsel.proxy_provider.*;
|
||||
import dev.vality.damsel.timeout_behaviour.TimeoutBehaviour;
|
||||
import dev.vality.damsel.user_interaction.UserInteraction;
|
||||
import dev.vality.error.mapping.ErrorMapping;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@ -81,18 +83,22 @@ public class IntentResultFactory {
|
||||
Timer.timeout(TimeoutUtils.toSeconds(timerRedirectTimeoutMin)))
|
||||
.setTimeoutBehaviour(TimeoutBehaviour.callback(
|
||||
ByteBuffer.wrap(parametersSerializer.writeByte(params)))
|
||||
).setUserInteraction(createGetUserInteraction(threeDsData.getAcsUrl()))
|
||||
).setUserInteraction(createUserInteraction(threeDsData))
|
||||
);
|
||||
}
|
||||
|
||||
private UserInteraction createUserInteraction(ThreeDsData threeDsData) {
|
||||
if (threeDsData.getHttpMethod() == HttpMethod.GET) {
|
||||
return createGetUserInteraction(threeDsData.getAcsUrl());
|
||||
} else {
|
||||
return createPostUserInteraction(threeDsData.getAcsUrl(), threeDsData.getParameters());
|
||||
}
|
||||
}
|
||||
|
||||
public Intent createFinishIntentSuccess() {
|
||||
return Intent.finish(new FinishIntent(FinishStatus.success(new Success())));
|
||||
}
|
||||
|
||||
public Intent createSleepIntentForReinvocation() {
|
||||
return Intent.sleep(new SleepIntent(Timer.timeout(0)));
|
||||
}
|
||||
|
||||
public Intent createSleepIntentWithExponentialPolling(ExitStateModel exitStateModel) {
|
||||
EntryStateModel entryStateModel = exitStateModel.getEntryStateModel();
|
||||
PollingInfo pollingInfo = pollingInfoService.initPollingInfo(entryStateModel);
|
||||
|
Loading…
Reference in New Issue
Block a user