From c4001b2928450cfcd80b5bb84c6a961a450f802d Mon Sep 17 00:00:00 2001 From: esinev Date: Tue, 4 Jul 2023 09:45:27 +0300 Subject: [PATCH] Added terminalId to all requests --- .../impl/InpasNetworkClientExtended.java | 99 +++++++++++++++++++ .../pos/proxy/impl/InpasNetworkManager.java | 4 +- .../pos/proxy/impl/PaymentServiceImpl.java | 15 ++- .../pos/proxy/messages/CloseDayRequest.java | 2 + .../pos/proxy/messages/PaymentRequest.java | 2 + .../pos/proxy/messages/RefundRequest.java | 1 + swagger/messages/CloseDayRequest.yaml | 5 +- swagger/messages/PaymentRequest.yaml | 5 + swagger/messages/RefundRequest.yaml | 4 + 9 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 server/src/main/java/com/payneteasy/pos/proxy/impl/InpasNetworkClientExtended.java diff --git a/server/src/main/java/com/payneteasy/pos/proxy/impl/InpasNetworkClientExtended.java b/server/src/main/java/com/payneteasy/pos/proxy/impl/InpasNetworkClientExtended.java new file mode 100644 index 0000000..edeb0f9 --- /dev/null +++ b/server/src/main/java/com/payneteasy/pos/proxy/impl/InpasNetworkClientExtended.java @@ -0,0 +1,99 @@ +package com.payneteasy.pos.proxy.impl; + +import com.payneteasy.android.sdk.logger.ILogger; +import com.payneteasy.android.sdk.reader.inpas.config.InpasTerminalConfiguration; +import com.payneteasy.android.sdk.util.LoggerUtil; +import com.payneteasy.inpas.sa.client.SmartAgentClient; +import com.payneteasy.inpas.sa.messages.sale.*; + +import java.io.IOException; +import java.math.BigDecimal; + +public class InpasNetworkClientExtended { + + private static final ILogger LOG = LoggerUtil.create(InpasNetworkClientExtended.class); + + private final SmartAgentClient delegate; + private final String address; + private final InpasTerminalConfiguration configuration; + + public InpasNetworkClientExtended(String aAddress, InpasTerminalConfiguration aConfiguration) { + delegate = new SmartAgentClient(aConfiguration.createNetworkClientOptions(aAddress)); + address = aAddress; + configuration = aConfiguration; + } + + public void connect() throws InterruptedException { + while (!Thread.currentThread().isInterrupted()) { + try { + delegate.openConnection(); + return; + } catch (IOException e) { + if(configuration.throwExceptionIfCannotConnect()) { + throw new IllegalStateException("Cannot connect to " + address, e); + } else { + LOG.error("Cannot connect to {}. Sleeping 1 second ...", address, e); + Thread.sleep(1_000); + } + } + } + + } + + public Sa1PaymentResponse makeSale(String aCurrency, BigDecimal aAmount, String aTerminalId) throws IOException { + Sa1PaymentResponse saleResponse = delegate.sale(new Sa1PaymentRequest.Builder() + ._04_currencyCode(643) + ._00_amount(aAmount) + ._26_stan(configuration.getInvoice()) + ._27_terminalId(aTerminalId) + .build()); + return saleResponse; + } + + public Sa29ReversalResponse makeReversal(String aCurrency, BigDecimal aAmount, String aRrn, String aTerminalId) throws IOException { + + Sa29ReversalRequest request = new Sa29ReversalRequest.Builder() + ._00_amount(aAmount) + ._04_currencyCode(643) + ._26_stan(configuration.getInvoice()) + ._14_rrn(aRrn) + ._27_terminalId(aTerminalId) + .build(); + return delegate.reversal(request); + } + + public void makeReconciliation(String aTerminalId) { + try { + Sa59ReconciliationResponse reconciliation = delegate.reconciliation(new Sa59ReconciliationRequest.Builder()._27_terminalId(aTerminalId).build()); + } catch (IOException e) { + LOG.error("Cannot make reconciliation", e); + } + } + + public void closeConnection() { + try { + delegate.close(); + } catch (Exception e) { + LOG.error("Error while closing connection", e); + } + } + + public void sendEot() { + try { + delegate.sendEot(); + } catch (Exception e) { + LOG.error("Cannot send EOT", e); + } + } + + public Sa26TestConnectionResponse checkConnection(String aTerminalId ) { + try { + LOG.debug("InpasNetworkClient; checkConnection new branch"); + return delegate.testConnectionToHost(aTerminalId); + } catch (IOException e) { + LOG.error("Error while testConnectionLocal", e); + } + + return null; + } +} diff --git a/server/src/main/java/com/payneteasy/pos/proxy/impl/InpasNetworkManager.java b/server/src/main/java/com/payneteasy/pos/proxy/impl/InpasNetworkManager.java index aaeccc8..0a8f894 100644 --- a/server/src/main/java/com/payneteasy/pos/proxy/impl/InpasNetworkManager.java +++ b/server/src/main/java/com/payneteasy/pos/proxy/impl/InpasNetworkManager.java @@ -24,11 +24,11 @@ public InpasNetworkManager(String amount, String currency, String aPosAddress) { } public interface IInpasOperationHandler { - PaymentResponse invokeOperation(InpasNetworkClient aClient) throws IOException; + PaymentResponse invokeOperation(InpasNetworkClientExtended aClient) throws IOException; } public PaymentResponse makeOperation(IInpasOperationHandler aHandler) { - InpasNetworkClient client = new InpasNetworkClient(posAddress, new InpasTerminalConfiguration.Builder() + InpasNetworkClientExtended client = new InpasNetworkClientExtended(posAddress, new InpasTerminalConfiguration.Builder() .packetOptions(new DefaultClientPacketOptions()) .throwExceptionIfCannotConnect(true) .build() diff --git a/server/src/main/java/com/payneteasy/pos/proxy/impl/PaymentServiceImpl.java b/server/src/main/java/com/payneteasy/pos/proxy/impl/PaymentServiceImpl.java index 9133d1c..7d879ed 100644 --- a/server/src/main/java/com/payneteasy/pos/proxy/impl/PaymentServiceImpl.java +++ b/server/src/main/java/com/payneteasy/pos/proxy/impl/PaymentServiceImpl.java @@ -18,7 +18,11 @@ public PaymentResponse pay(PaymentRequest aRequest) { InpasNetworkManager manager = new InpasNetworkManager(aRequest.getAmount(), aRequest.getCurrency(), aRequest.getPosAddress()); return manager.makeOperation(aClient -> { - Sa1PaymentResponse saResponse = aClient.makeSale(aRequest.getCurrency(), new BigDecimal(aRequest.getAmount())); + Sa1PaymentResponse saResponse = aClient.makeSale( + aRequest.getCurrency() + , new BigDecimal(aRequest.getAmount()) + , aRequest.getTerminalId() + ); return PaymentResponse.builder() .amount ( saResponse.get_00_amount().toString() ) @@ -34,7 +38,12 @@ public PaymentResponse refund(RefundRequest aRequest) { InpasNetworkManager manager = new InpasNetworkManager(aRequest.getRefundAmount(), aRequest.getCurrency(), aRequest.getPosAddress()); return manager.makeOperation(aClient -> { - Sa29ReversalResponse saResponse = aClient.makeReversal(aRequest.getCurrency(), new BigDecimal(aRequest.getRefundAmount()), toRrn(aRequest.getOrderId())); + Sa29ReversalResponse saResponse = aClient.makeReversal( + aRequest.getCurrency() + , new BigDecimal(aRequest.getRefundAmount()) + , toRrn(aRequest.getOrderId()) + , aRequest.getTerminalId() + ); return PaymentResponse.builder() .amount ( saResponse.get_00_amount().toString() ) @@ -50,7 +59,7 @@ public CloseDayResponse closeDay(CloseDayRequest aRequest) { InpasNetworkManager manager = new InpasNetworkManager("0", "RUB", aRequest.getPosAddress()); PaymentResponse response = manager.makeOperation(aClient -> { - aClient.makeReconciliation(); + aClient.makeReconciliation(aRequest.getTerminalId()); return PaymentResponse.builder() .responseCode("00") .currency("RUB") diff --git a/server/src/main/java/com/payneteasy/pos/proxy/messages/CloseDayRequest.java b/server/src/main/java/com/payneteasy/pos/proxy/messages/CloseDayRequest.java index c2ad33b..0759b36 100644 --- a/server/src/main/java/com/payneteasy/pos/proxy/messages/CloseDayRequest.java +++ b/server/src/main/java/com/payneteasy/pos/proxy/messages/CloseDayRequest.java @@ -12,4 +12,6 @@ public class CloseDayRequest { @NonNull private final String posType; + private final String terminalId; + } diff --git a/server/src/main/java/com/payneteasy/pos/proxy/messages/PaymentRequest.java b/server/src/main/java/com/payneteasy/pos/proxy/messages/PaymentRequest.java index b886f07..8384954 100644 --- a/server/src/main/java/com/payneteasy/pos/proxy/messages/PaymentRequest.java +++ b/server/src/main/java/com/payneteasy/pos/proxy/messages/PaymentRequest.java @@ -18,4 +18,6 @@ public class PaymentRequest { @NonNull private final String posType; + private final String terminalId; + } diff --git a/server/src/main/java/com/payneteasy/pos/proxy/messages/RefundRequest.java b/server/src/main/java/com/payneteasy/pos/proxy/messages/RefundRequest.java index 545552c..ed2d0ca 100644 --- a/server/src/main/java/com/payneteasy/pos/proxy/messages/RefundRequest.java +++ b/server/src/main/java/com/payneteasy/pos/proxy/messages/RefundRequest.java @@ -23,4 +23,5 @@ public class RefundRequest { @NonNull private final String posType; + private final String terminalId; } diff --git a/swagger/messages/CloseDayRequest.yaml b/swagger/messages/CloseDayRequest.yaml index 6824980..805a084 100644 --- a/swagger/messages/CloseDayRequest.yaml +++ b/swagger/messages/CloseDayRequest.yaml @@ -9,9 +9,12 @@ properties: description: "POS terminal type" example: "INPAS" - posAddress: type: "string" description: "POS terminal address" example: "10.0.1.20:27015" + terminalId: + type: "string" + description: "Terminal ID" + example: "3A123456" diff --git a/swagger/messages/PaymentRequest.yaml b/swagger/messages/PaymentRequest.yaml index 469afc6..fd4caec 100644 --- a/swagger/messages/PaymentRequest.yaml +++ b/swagger/messages/PaymentRequest.yaml @@ -25,3 +25,8 @@ properties: description: "POS terminal address" example: "10.0.1.20:27015" + terminalId: + type: "string" + description: "Terminal ID" + example: "3A123456" + diff --git a/swagger/messages/RefundRequest.yaml b/swagger/messages/RefundRequest.yaml index 8b22203..d288322 100644 --- a/swagger/messages/RefundRequest.yaml +++ b/swagger/messages/RefundRequest.yaml @@ -28,3 +28,7 @@ properties: description: "POS terminal address" example: "10.0.1.20:27015" + terminalId: + type: "string" + description: "Terminal ID" + example: "3A123456"