Advertisement
leandrofpaiva

Untitled

Mar 25th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.40 KB | None | 0 0
  1. package br.com.accio.cash.ws.server.handle;
  2.  
  3. import br.com.accio.cash.domain.core.Operacao;
  4. import co.aditum.mobilesdk.ConsoleLogger;
  5. import co.aditum.mobilesdk.IPinpad;
  6. import co.aditum.mobilesdk.ITransactionProvider;
  7. import co.aditum.mobilesdk.TransactionProvider;
  8. import co.aditum.mobilesdk.desktop.DesktopConfigurationManager;
  9. import co.aditum.mobilesdk.desktop.DesktopPinpadProvider;
  10. import co.aditum.mobilesdk.gateway.AditumGateway;
  11. import co.aditum.mobilesdk.gateway.IGateway;
  12. import co.aditum.mobilesdk.gateway.models.aditum.getTables.GetTablesResponse;
  13. import co.aditum.mobilesdk.logger.AditumLogger;
  14. import co.aditum.mobilesdk.models.AditumResultEnum;
  15. import co.aditum.mobilesdk.models.MessageTypesEnum;
  16. import co.aditum.mobilesdk.models.TransactionParameters;
  17. import co.aditum.mobilesdk.models.TransactionResult;
  18. import co.aditum.mobilesdk.models.callbacks.ITransactionCallbacks;
  19. import co.aditum.mobilesdk.models.callbacks.MenuTypeEnum;
  20. import co.aditum.mobilesdk.models.callbacks.ReceiptTypeEnum;
  21. import com.fasterxml.jackson.databind.ObjectMapper;
  22. import java.io.IOException;
  23. import java.util.List;
  24. import java.util.UUID;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.springframework.stereotype.Component;
  27. import org.springframework.web.socket.TextMessage;
  28. import org.springframework.web.socket.WebSocketSession;
  29. import org.springframework.web.socket.handler.TextWebSocketHandler;
  30.  
  31. @Component
  32. @Slf4j
  33. public class PinPadHandle extends TextWebSocketHandler {
  34. public static int DEBITO = 1;
  35. public static int PAY = 1;
  36. public static int STATUS_OK = 0;
  37. public static int STATUS_ERROR = 1;
  38. private Operacao operacao = null;
  39.  
  40. public static final String ADITUM_GATEWAY_ENDPOINT = "http://api-dev.aditum.co/v1";
  41. //public static final String ADITUM_GATEWAY_ENDPOINT = "http://localhost:61449/v1";
  42. public static final String MERCHANT_KEY = "mk_bmaQn7lvuUmRam02d3kEDg";
  43.  
  44. IPinpad abecsPinpad = null;
  45.  
  46. static {
  47. try {
  48. //abecsPinpad = DesktopPinpadProvider.getPinpad();
  49. } catch (Exception e) {
  50. log.debug("Error", e);
  51. }
  52. }
  53.  
  54. @Override
  55. public void handleTextMessage(WebSocketSession session, TextMessage message)
  56. throws InterruptedException, IOException {
  57. ObjectMapper mapper = new ObjectMapper();
  58. System.out.println(" -- ADITUM APLICACAO DE EXEMPLO -- \n");
  59.  
  60. ConsoleLogger consoleLogger = new ConsoleLogger();
  61.  
  62. IGateway aditumGateway = null;
  63. ITransactionProvider transactionProvider = null;
  64. IPinpad abecsPinpad = null;
  65.  
  66. // Create Aditum SDK main classes:
  67. try {
  68. // Create desktop implementation. This allows Aditum SDK to be used in a desktop environment.
  69. abecsPinpad = DesktopPinpadProvider.getPinpad();
  70.  
  71. // Create AditumGateway implementation, responsible for sending and receiving messages with
  72. // Aditum's Gateway.
  73. aditumGateway = new AditumGateway(ADITUM_GATEWAY_ENDPOINT, MERCHANT_KEY);
  74.  
  75. // Create class responsible for the entire transaction flow (pinpad communication, gateway
  76. // interaction and callbacks).
  77. transactionProvider =
  78. new TransactionProvider(abecsPinpad, aditumGateway, new DesktopConfigurationManager());
  79.  
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. return;
  83. }
  84.  
  85. try {
  86. String payload = message.getPayload();
  87. log.debug("CardReader - PAYLOAD: " + payload);
  88. operacao = mapper.readValue(payload, Operacao.class);
  89.  
  90. AditumLogger.setLogger(consoleLogger);
  91.  
  92. // Authorize a transaction:
  93. pay(transactionProvider, abecsPinpad, operacao.getTransacao().getValorCarga(), session);
  94. } catch (Exception e) {
  95. log.error("ERROR", e);
  96. operacao.setStatus(STATUS_ERROR);
  97. operacao.setMensagem("Falha na comunição com o serviço de autorização!");
  98. }
  99. }
  100.  
  101. private void pay(ITransactionProvider transactionProvider, IPinpad abecsPinpad,
  102. long transactionAmount, WebSocketSession session) {
  103. ObjectMapper mapper = new ObjectMapper();
  104. // Class responsible for handle terminal configurations:
  105. DesktopConfigurationManager desktopConfigurationManager = new DesktopConfigurationManager();
  106.  
  107. // Get last EMV table download:
  108. GetTablesResponse getTablesResponse = desktopConfigurationManager.getActivationData();
  109.  
  110. // Generate new transaction key:
  111. String transactionKey = UUID.randomUUID().toString();
  112.  
  113. System.out.printf("Transaction key: '%s'\n", transactionKey);
  114.  
  115. // long transactionAmount = getTransactionAmount();
  116.  
  117. System.out.printf("Transaction amount: '%d'\n", transactionAmount);
  118.  
  119. // Create transaction parameters:
  120. TransactionParameters transactionParameters = new TransactionParameters(transactionAmount,
  121. getTablesResponse.emvTables[0], transactionKey);
  122.  
  123. // Begin transaction flow:
  124. transactionProvider.transact(transactionParameters, new ITransactionCallbacks() {
  125.  
  126. // Callback used to update transaction status.
  127. @Override
  128. public void showMessage(MessageTypesEnum type, String message) {
  129. System.out.printf("Message: %s\n", message);
  130. }
  131.  
  132. // Basic console menu used to select transaction type and installment details:
  133. @Override
  134. public int menuShow(MenuTypeEnum menuType, String title, List<String> lsOpts) {
  135. return DEBITO;
  136. }
  137.  
  138. // Method called at the end of the transaction.
  139. // If the transaction was successfull, argument 'result' will be set to
  140. // AditumResultEnum.TRANSACTION_APPROVED. In
  141. // this case, argument 'data' will contain transaction information.
  142. // Otherwise, if argument 'result' is not set to AditumResultEnum.TRANSACTION_APPROVE, the
  143. // argument 'data' will
  144. // contain transaction error details.
  145. @Override
  146. public void onFinished(AditumResultEnum result, Object data) {
  147. try {
  148. System.out.printf("Result: %d - %s\n", result.getCode(), result.getMessage());
  149. if (result == AditumResultEnum.TRANSACTION_APPROVED) {
  150. TransactionResult transactionResult = (TransactionResult) data;
  151. System.out.printf("Transaction Result: \n %s \n", transactionResult.toString());
  152. operacao.setStatus(STATUS_OK);
  153. session.sendMessage(new TextMessage(mapper.writeValueAsString(operacao)));
  154. } else if (result == AditumResultEnum.TRANSACTION_DENNIED) {
  155. operacao.setStatus(STATUS_ERROR);
  156. operacao.setMensagem("Não Autorizado!");
  157. session.sendMessage(new TextMessage(mapper.writeValueAsString(operacao)));
  158. } else {
  159. operacao.setStatus(STATUS_ERROR);
  160. operacao.setMensagem("Falha na comunição com o serviço de autorização!");
  161. session.sendMessage(new TextMessage(mapper.writeValueAsString(operacao)));
  162. }
  163. } catch (Exception e) {
  164. log.error("Error", e);
  165. }
  166. }
  167.  
  168. // If transaction amount is not set, this callback is used to get transaction amount in
  169. // execution time, after
  170. // card reading. This could be useful in a vending machine context.
  171. @Override
  172. public long getAmount() {
  173. // Intentionally not implemented.
  174. return transactionAmount;
  175. }
  176.  
  177. // Responsible for print, show or send transaction receipt.
  178. @Override
  179. public void printReceipt(ReceiptTypeEnum receiptType, String data) {
  180. System.out.println(data);
  181. }
  182. });
  183. }
  184.  
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement