Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.25 KB | None | 0 0
  1. package com.ppretail.adyen.business;
  2.  
  3. import com.adyen.jni.clib.*;
  4. import com.ppretail.adyen.lib.ResultHandler;
  5. import com.ppretail.adyen.lib.ped.MerchantPed;
  6. import com.ppretail.adyen.lib.ped.PedCallbackHandler;
  7. import com.ppretail.adyen.lib.ped.PedCallbackResultHandler;
  8. import com.ppretail.adyen.lib.pos.MerchantPos;
  9. import com.ppretail.adyen.lib.pos.PosCallbackHandler;
  10. import com.ppretail.adyen.lib.pos.PosCallbackResultHandler;
  11. import com.ppretail.adyen.lib.pos.PosHandler;
  12. import lombok.ToString;
  13. import lombok.extern.slf4j.Slf4j;
  14.  
  15. import java.util.Collections;
  16. import java.util.List;
  17.  
  18. @Slf4j
  19. @ToString
  20. class PointOfSale {
  21.  
  22.     private final MerchantPos pos;
  23.     private final MerchantPed ped;
  24.     private final Environment environment;
  25.  
  26.     private PosHandler posHandler = new PosHandler();
  27.     private PosCallbackResultHandler posCallbackResultHandler = new PosCallbackResultHandler();
  28.     private PedCallbackResultHandler pedCallbackResultHandler = new PedCallbackResultHandler();
  29.     private String merchant;
  30.     private String user;
  31.     private String password;
  32.     private String posId;
  33.  
  34.     private Waiter initLibraryWaiter = new InitLibraryWaiter();
  35.     private Waiter pedRegistrationWaiter = new PedRegistrationWaiter();
  36.     private Waiter finalStateWaiter = new FinalStateWaiter();
  37.  
  38.     PointOfSale(String posId, String terminalIp, String terminalPedName, String environment, String merchant, String user, String password) throws Exception {
  39.         this.posId = posId;
  40.         this.merchant = merchant;
  41.         this.user = user;
  42.         this.password = password;
  43.         this.pos = new MerchantPos();
  44.         this.ped = new MerchantPed(terminalIp, terminalPedName);
  45.         this.environment = Environment.getEnvironment(environment);
  46.  
  47.         addPosCallBackHandler();
  48.         addPedCallbackHandler();
  49.         initLibrary();
  50.         registerPed();
  51.     }
  52.  
  53.     Tender createPayment(String merchantAccount, String merchantReference, String currency, long amount) throws TransactionException {
  54.         log.info("Starting tender creation for the merchant reference: {}" , merchantReference);
  55.         Tender basicTender = buildBasicTender(merchantAccount, merchantReference, currency, amount);
  56.         log.debug("Basic tender: {}" , basicTender);
  57.         LibraryResult result = ped.createTender(basicTender, new AdditionalData());
  58.         ResultHandler resultHandler = new ResultHandler();
  59.         resultHandler.checkResult(ped, result);
  60.         finalStateWaiter.run();
  61.         resultHandler.checkResult(ped, ped.getResultCreateTender());
  62.         Tender resultTenderFinal = ped.getResultTenderFinal();
  63.         log.info("The tender final result for merchant reference: {} is : {}" , merchantReference, resultTenderFinal);
  64.         return resultTenderFinal;
  65.     }
  66.  
  67.     private Tender buildBasicTender(String merchantAccount, String merchantReference, String currency, long amount) throws TransactionException {
  68.         List<Transaction.TenderOption> tenderOptions = Collections.singletonList(Transaction.TenderOption.ReceiptHandler);
  69.         Tender.TenderOption[] tenderOptionsArray = tenderOptions.toArray(new Tender.TenderOption[tenderOptions.size()]);
  70.         Tender.TenderType tenderType = Tender.TenderType.GOODS_SERVICES;
  71.  
  72.         return new Tender(
  73.                 merchantAccount,
  74.                 merchantReference,
  75.                 tenderType,
  76.                 currency,
  77.                 amount,
  78.                 tenderOptionsArray);
  79.     }
  80.  
  81.     private void addPedCallbackHandler() {
  82.         this.ped.addPedCallbackHandler(new PedCallbackHandler() {
  83.             @Override
  84.             public void pedStateChangeCallbackHandler() {
  85.                 log.info("ResultPedStateChange: " + ped.getResultPedStateChange().getPedState().getNameInClib());
  86.                 if (pedCallbackResultHandler.handlePedStateChangeResult(ped))
  87.                     log.debug("Ped: " + ped.getPedName() + " is ready");
  88.             }
  89.  
  90.             @Override
  91.             public void showScreenCallbackHandler() {
  92.                 pedCallbackResultHandler.handleShowScreenResult();
  93.             }
  94.  
  95.             @Override
  96.             public void createTenderCallbackHandler() {
  97.  
  98.                 if (pedCallbackResultHandler.handleCreateTenderResult(ped)) {
  99.                     log.debug("tenderCreated on the ped: " + ped);
  100.                 } else {
  101.                     log.error("tenderCreateError on the ped: " + ped);
  102.                     refreshPed();
  103.                 }
  104.             }
  105.  
  106.             private void refreshPed() {
  107.                 ped.refreshPEDstate(5);
  108.             }
  109.  
  110.             @Override
  111.             public void progressCallbackHandler() {
  112.                 if (pedCallbackResultHandler.handleProgressResult(ped)) {
  113.                     Transaction.TenderState tenderState = ped.getResultTenderProgress().getTenderState();
  114.                     log.debug("progressCallbackHandler - tenderState on ped: {} is: {}", ped, tenderState);
  115.                 } else {
  116.                     log.error("progressCallbackHandler error  on the ped: " + ped);
  117.                 }
  118.             }
  119.  
  120.             @Override
  121.             public void additionalDataCallbackHandler() {
  122.                 if (pedCallbackResultHandler.handleAdditionalDataResult(ped)) {
  123.                     Tender tender = ped.getResultTenderAdditionalData();
  124.                     log.debug("additionalDataCallbackHandler on the ped: {} with the tender: {}", ped, tender);
  125.                 } else {
  126.                     log.error("additionalDataCallbackHandler error on the ped: {} ", ped);
  127.                 }
  128.             }
  129.  
  130.             @Override
  131.             public void tenderDccCallbackHandler() {
  132.                 pedCallbackResultHandler.handleTenderDccResult(ped);
  133.             }
  134.  
  135.             @Override
  136.             public void tenderPrintReceiptCallbackHandler() {
  137.             }
  138.  
  139.             @Override
  140.             public void tenderCheckSignatureCallbackHandler() {
  141.                 if (pedCallbackResultHandler.handleTenderCheckSignatureResult(ped)) {
  142.                     Tender tender = ped.getResultTenderCheckSignature();
  143.                     log.debug("tenderCheckSignatureCallbackHandler on the ped: {} enableCheckSignatureForm: {}", ped,
  144.                             tender.getAdditionalData().get("signature.data"));
  145.                 }
  146.             }
  147.  
  148.             @Override
  149.             public void finalCallbackHandler() {
  150.                 if (pedCallbackResultHandler.handleFinalResult(ped)) {
  151.                     log.debug("finalCallbackHandler on ped: {}", ped);
  152.                     finalStateWaiter.stop();
  153.                 } else {
  154.                     log.error("transactionError");
  155.                     refreshPed();
  156.                 }
  157.             }
  158.  
  159.             @Override
  160.             public void pedExceptionCallbackHandler() {
  161.                 if (!pedCallbackResultHandler.handlePedExceptionResult(ped)) {
  162.                     log.error("Ped exception operation has returned null result with ped: {}", ped);
  163.                 } else {
  164.                     log.error("Ped exception with ped: {}. The error message is: {}", ped, ped.getResultPedException().getAdyenResult().getErrorMessage());
  165.                 }
  166.             }
  167.  
  168.             @Override
  169.             public void txStoreQueryCallbackHandler() {
  170.             }
  171.         });
  172.     }
  173.  
  174.     private void initLibrary() throws Exception {
  175.         log.info("starting initLibrary");
  176.         if (!posHandler.initLibrary(pos, buildInitLibraryRequest())){
  177.             String initLibraryErrorMessage = "initLibrary error with posId: " + this.posId;
  178.             log.error(initLibraryErrorMessage);
  179.             throw new InitLibraryException(initLibraryErrorMessage);
  180.         }
  181.         initLibraryWaiter.run();
  182.     }
  183.  
  184.     class InitLibraryException extends Exception {
  185.         InitLibraryException(String message) {
  186.             super(message);
  187.         }
  188.     }
  189.  
  190.     private void registerPed() throws Exception {
  191.         String pedName = this.ped.getPedName();
  192.         log.info("starting registration for ped: {}", pedName);
  193.         if (!posHandler.registerPed(this.pos, this.ped)){
  194.             log.error("Ped registration with ped: {} and pos: {}", pedName, pos);
  195.             throw new PedRegistrationException("Ped registration error");
  196.         }
  197.         pedRegistrationWaiter.run();
  198.  
  199.     }
  200.  
  201.     class PedRegistrationException extends Exception {
  202.         PedRegistrationException(String message) {
  203.             super(message);
  204.         }
  205.     }
  206.  
  207.     private InitLibraryRequest buildInitLibraryRequest() {
  208.         return new InitLibraryRequest.InitLibraryRequestBuilder(
  209.                 this.environment, this.posId, null, new LogConfig(LogLevel.DEBUG)).build();
  210.     }
  211.  
  212.     private void addPosCallBackHandler() {
  213.         pos.addCallbackHandler(new PosCallbackHandler() {
  214.             @Override
  215.             public void initLibraryCallbackHandler() {
  216.                 if (posCallbackResultHandler.handleInitLibraryResult(pos))
  217.                     registerPos();
  218.                 else {
  219.                     log.error("initLibError");
  220.                 }
  221.             }
  222.  
  223.             private void registerPos() {
  224.                 log.info("Starting pos registration for posId: " + posId);
  225.                 if (!posHandler.registerPos(pos, buildRegisterPosRequest(posId))) {
  226.                     log.error("Pos registration error for posId: " + posId);
  227.                 }
  228.             }
  229.  
  230.             @Override
  231.             public void registerPosCallbackHandler() {
  232.                 if (posCallbackResultHandler.handleRegisterPosResult(pos)) {
  233.                     log.info("Pos registration finished for posId: " + posId);
  234.                     initLibraryWaiter.stop();
  235.                 } else {
  236.                     log.error("Pos registration finished with error for posId: " + posId);
  237.                 }
  238.             }
  239.  
  240.             @Override
  241.             public void registerPedCallbackHandler() {
  242.                 if (posCallbackResultHandler.handleRegisterPedResult(pos, ped)) {
  243.                     log.info("Ped registration finished for {} on pos {}", ped, posId);
  244.                     pedRegistrationWaiter.stop();
  245.                 } else {
  246.                     log.error("Ped registration finished with error");
  247.                 }
  248.             }
  249.  
  250.             @Override
  251.             public void cancelOrRefundAtPspCallbackHandler() {
  252.                 if (posCallbackResultHandler.handleCancelOrRefundAtPspResult(pos)) {
  253.                     log.info("Ped cancelOrRefund finished");
  254.                 } else {
  255.                     log.error("Ped cancelOrRefund finished with error");
  256.                 }
  257.             }
  258.  
  259.             @Override
  260.             public void exitLibraryCallbackHandler() {
  261.                 posCallbackResultHandler.handleExitLibraryResult(pos);
  262.             }
  263.  
  264.             @Override
  265.             public void exceptionCallbackHandler() {
  266.                 posCallbackResultHandler.handleExceptionResult(pos);
  267.             }
  268.         });
  269.     }
  270.  
  271.     private RegisterPosRequest buildRegisterPosRequest(String posId) {
  272.         return new RegisterPosRequest(merchant, user, password, posId);
  273.     }
  274.  
  275.     private class InitLibraryWaiter extends Waiter {
  276.     }
  277.  
  278.     private class PedRegistrationWaiter extends Waiter {
  279.     }
  280.  
  281.     private class FinalStateWaiter extends Waiter {
  282.     }
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement