Code Example - Java

Code Example - Java

JAVA

Edit

main.java

  1. CTPaymentClient restv1Client = new CTPaymentClient("https://test.api.payfacto.com/", "00000000000000000000000000000000000" );


  2. // PURCHASE EXAMPLE
  3. HashMap<String, String> params = new HashMap<String, String>();
  4. params.put(CTPRequestFields.COMPANY_NUMBER, cie);
  5. params.put(CTPRequestFields.MERCHANT_NUMBER, merc);
  6. params.put(CTPRequestFields.CUSTOMER_NUMBER, cust);
  7. params.put(CTPRequestFields.AMOUNT, amount);
  8. params.put(CTPRequestFields.INVOICE_NUMBER, bill);
  9. params.put(CTPRequestFields.ORIGINAL_INVOICE_NUMBER, origBill);
  10. params.put(CTPRequestFields.INPUT_TYPE, input);
  11. params.put(CTPRequestFields.CARD_TYPE, cardType);
  12. params.put(CTPRequestFields.CARD_NUMBER, cardNumber);
  13. params.put(CTPRequestFields.EXPIRATION_DATE, expi);
  14. params.put(CTPRequestFields.CVV2CVC2_NUMBER, cvv2);
  15. params.put(CTPRequestFields.MERCHANT_TERMINAL_NUMBER, tpv);
  16. params.put(CTPRequestFields.LANGUAGE_CODE, lang);
  17. params.put(CTPRequestFields.CURRENCY_CODE, curr);
  18. params.put(CTPRequestFields.OPERATOR_ID, oper);


  19. TransactionOutput transactionOutputRestV1 = restv1Client.purchase("v1", params);

  20. if(transactionOutputRestV1 != null && transactionOutputRestV1.getReturnCode().equals("  00")) {
  21.   HashMap<String, String> paramsACK = new HashMap<String, String>();
  22.   paramsACK.put(CTPRequestFields.COMPANY_NUMBER, cie);
  23.   paramsACK.put(CTPRequestFields.MERCHANT_NUMBER, merc);
  24.   paramsACK.put(CTPRequestFields.TRANSACTION_NUMBER, transactionOutputRestV1.getTransactionNumber());
  25.   
  26.   AckOutput ackOutput = restv1Client.ack("v1", paramsACK);
  27.   //Validate ACK Results: Must be "true"
  28. }

  29. // REDIRECTION EXAMPLE
  30. HashMap<String, String> params = new HashMap<String, String>();
  31. params.put(CTPRequestFields.COMPANY_NUMBER, cie);
  32. params.put(CTPRequestFields.MERCHANT_NUMBER, merc);
  33. params.put(CTPRequestFields.CUSTOMER_NUMBER, cust);
  34. params.put(CTPRequestFields.AMOUNT, amount);
  35. params.put(CTPRequestFields.INVOICE_NUMBER, bill);
  36. params.put(CTPRequestFields.INPUT_TYPE, input);
  37. params.put(CTPRequestFields.MERCHANT_TERMINAL_NUMBER, tpv);
  38. params.put(CTPRequestFields.LANGUAGE_CODE, lang);
  39. params.put(CTPRequestFields.CURRENCY_CODE, curr);
  40. params.put(CTPRequestFields.OPERATOR_ID, oper);
  41. params.put(CTPRequestFields.SUCCESS_URL, successURL);
  42. params.put(CTPRequestFields.FAILURE_URL, failureURL);



  43. TransactionOutput transactionOutputRestV1 = restv1Client.createRedirectionSession("v1", params);


  44. if(transactionOutputRestV1 != null && transactionOutputRestV1.getReturnCode().equals("5000")) {
  45. // Perform browser redirection to
  46. // "https://test.form.payfacto.com/redirect/Redirect?SecureID=" + transactionOutputRestV1.getSecureID() + "&SecureTYPE=GET"
  47. }

  48. //On success or Failure Callback
  49. HashMap<String, String> params = new HashMap<String, String>();
  50. params.put(CTPRequestFields.COMPANY_NUMBER, cie);
  51. params.put(CTPRequestFields.MERCHANT_NUMBER, merc);
  52. params.put(CTPRequestFields.SECURE_ID, secureID);

  53. TransactionOutput transactionOutputRestV1 = restv1Client.getRedirectResponse("v1", params);

  54. if(transactionOutputRestV1 != null && transactionOutputRestV1.getReturnCode().equals("  00")) {
  55.   HashMap<String, String> paramsACK = new HashMap<String, String>();
  56.   paramsACK.put(CTPRequestFields.COMPANY_NUMBER, cie);
  57.   paramsACK.put(CTPRequestFields.MERCHANT_NUMBER, merc);
  58.   paramsACK.put(CTPRequestFields.TRANSACTION_NUMBER, transactionOutputRestV1.getTransactionNumber());
  59.   
  60.   AckOutput ackOutput = restv1Client.ack("v1", paramsACK);
  61.   //Validate ACK Results: Must be "true"
  62. }
  63. </payfacto-code>

  64. ==== CTPaymentClient.java ====
  65. <payfacto-code lang="java">
  66. public class CTPaymentClient {

  67.   private Logger logger = Logger.getRootLogger();

  68.  private static final String ACK  = "/ack";
  69.  private static final String NACK  = "/nack";
  70.  private static final String PURCHASE  = "/purchase";
  71.  private static final String PURCHASE_WITH_TOKEN = "/purchaseWithToken";  
  72.  private static final String REFUND = "/refund";
  73.  private static final String REFUND_WITHOUT_CARD = "/refundWithoutCard"; 
  74.  private static final String REFUND_WITH_TOKEN = "/refundWithToken"; 
  75.  private static final String PRE_AUTHORIZATION = "/preAuthorization"; 
  76.  private static final String PRE_AUTH_WITH_TOKEN = "/preAuthorizationWithToken"; 
  77.  private static final String COMPLETION = "/completion"; 
  78.  private static final String STANDALONE_COMPLETION = "/standaloneCompletion"; 
  79.  private static final String CASH = "/cash"; 
  80.  private static final String VERIFY_ACCOUNT = "/verifyAccount"; 
  81.  private static final String FORCE_POST = "/forcePost"; 
  82.  private static final String VOID = "/void"; 
  83.  private static final String TOTAL_BATCH = "/totalBatch"; 
  84.  private static final String CLOSE_BATCH = "/closeBatch"; 
  85.  private static final String IOP_PURCHASE = "/iopPurchase"; 
  86.  private static final String IOP_REFUND = "/iopRefund"; 
  87.  private static final String RECOVER = "/recover"; 
  88.  private static final String REDIRECT_CREATE_SESSION_PURCHASE = "/redirect/CreatePurchaseSession"; 
  89.  private static final String REDIRECT_CREATE_SESSION_PREAUTH = "/redirect/CreatePreAuthSession"; 
  90.  private static final String REDIRECT_RESPONSE = "/redirect/GetResponse"; 
  91.  private static final String RECUR_ADD_USER = "/recur/AddUser"; 
  92.  private static final String RECUR_MOD_USER = "/recur/ModUser"; 
  93.  private static final String RECUR_DEL_USER = "/recur/DelUser"; 
  94.  private static final String RECUR_INFO_USER = "/recur/InfoUser"; 
  95.  private static final String RECUR_VERIFY_USER = "/recur/VerifyUser"; 
  96.  private static final String RECUR_ADD_SUBSCRIPTION = "/recur/AddSubscription"; 
  97.  private static final String RECUR_MOD_SUBSCRIPTION = "/recur/ModSubscription"; 
  98.  private static final String RECUR_DEL_SUBSCRIPTION = "/recur/DelSubscription"; 
  99.  private static final String RECUR_INFO_SUBSCRIPTION = "/recur/InfoSubscription"; 
  100.  private static final String RECUR_MOD_INVOICE = "/recur/ModInvoice"; 
  101.  private static final String RECUR_INFO_INVOICE = "/recur/InfoInvoice"; 
  102.  private static final String RECUR_CREATE_SESSION = "/recur/CreateSession"; 
  103.  private static final String RECUR_RESPONSE = "/recur/GetResponse"; 
  104.  private static final String RECUR_ACK = "/recur/ack"; 
  105.  private static final String RECUR_NACK = "/recur/nack";  


  106.   private String hostname;
  107.   private String authApiKey;
  108.   
  109.   public CookieStore cookieStore = new BasicCookieStore();
  110.   public HttpContext httpContext = new BasicHttpContext();    
  111.   
  112.   int CONNECTION_TIMEOUT_MS = 180 * 1000; // Timeout in millis.
  113.   RequestConfig requestConfig = RequestConfig.custom()
  114.       .setConnectionRequestTimeout(CONNECTION_TIMEOUT_MS)
  115.       .setConnectTimeout(CONNECTION_TIMEOUT_MS)
  116.       .setSocketTimeout(CONNECTION_TIMEOUT_MS)
  117.       .build();


  118.   public CTPaymentClient(String hostname_, String authApiKey_) {
  119.     this.hostname = hostname_;
  120.     this.authApiKey = authApiKey_;
  121.   }

  122.   public AckOutput ack(String version_, HashMap<String, String> _params) {
  123.     return requestAckOutput("/"+ version_ +ACK, _params);
  124.   }  
  125.   
  126.   public NAckOutput nack(String version_, HashMap<String, String> _params) {
  127.     return requestNAckOutput("/"+ version_ +NACK, _params);
  128.   }  
  129.   
  130.   public TransactionOutput purchase (String version_, Map<String, String> params_)  {
  131.     return requestTransactionOutput("/"+ version_ +PURCHASE, params_);
  132.   }
  133.   
  134.   public TransactionOutput createRedirectionSession (String version_, Map<String, String> params_)  {
  135.     return requestTransactionOutput("/"+ version_ +REDIRECT_CREATE_SESSION_PURCHASE, params_);
  136.   }
  137. public TransactionOutput getRedirectResponse (String version_, Map<String, String> params_)  {
  138.     return requestTransactionOutput("/"+ version_ +REDIRECT_RESPONSE, params_);
  139.   }
  140.     
  141.   private StringBuilder requestGeneric(String path_, Map<String, String> params_)
  142.       throws UnsupportedEncodingException, IOException, ClientProtocolException {
  143.     List <NameValuePair> nvps = new ArrayList <NameValuePair>();
  144.     nvps.add(new BasicNameValuePair("auth-api-key", authApiKey));

  145.     StringBuffer paramToEncode = new StringBuffer();  
  146.     boolean isFirst = true;
  147.     if (params_ != null) {
  148.       for (String key : params_.keySet()) {
  149.         if (! isFirst) {
  150.           paramToEncode.append("&");          
  151.         }
  152.         paramToEncode.append( key + "=" + String.valueOf(params_.get(key)));
  153.         isFirst = false;
  154.       }
  155.     }
  156.     nvps.add(new BasicNameValuePair("payload", Base64.getEncoder().encodeToString( paramToEncode.toString().getBytes())));

  157.     
  158.     HttpClient client = HttpClientBuilder.create().disableRedirectHandling().build();  
  159.     httpContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);


  160.     HttpPost postRequest = new HttpPost(hostname + path_);
  161.     postRequest.setConfig(requestConfig);
  162.     postRequest.setHeader(HttpHeaders.ACCEPT, "application/json");
  163.     postRequest.setEntity(new UrlEncodedFormEntity(nvps));    
  164.     HttpResponse httpResponse = client.execute(postRequest, httpContext);
  165.     
  166.     
  167.     BufferedReader in = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));

  168.     StringBuilder response = new StringBuilder(); 
  169.     String line;

  170.     while ((line = in.readLine()) != null) {
  171.       response.append(line);
  172.     }

  173.     in.close();
  174.     return response;
  175.   }

  176.   private TransactionOutput requestTransactionOutput (String path_, Map<String, String> params_)  {

  177.     try {
  178.       StringBuilder response = requestGeneric(path_, params_);

  179.       // Decode JSON
  180.       ObjectMapper mapper = new ObjectMapper();
  181.       TransactionOutput obj = mapper.readValue(response.toString(), TransactionOutput.class);

  182.       return obj;
  183.     }
  184.     catch (Exception e) {
  185.       logger.error("Exception in requestPost:", e);
  186.     }
  187.     finally {

  188.     }
  189.     return null;
  190.   }




  191.   private AckOutput requestAckOutput (String path_, Map<String, String> params_)  {

  192.     try {
  193.       StringBuilder response = requestGeneric(path_, params_);

  194.       // Decode JSON
  195.       ObjectMapper mapper = new ObjectMapper();
  196.       AckOutput obj = mapper.readValue(response.toString(), AckOutput.class);

  197.       return obj;
  198.     }
  199.     catch (Exception e) {
  200.       logger.error("Exception in requestPost:", e);
  201.     }
  202.     finally {

  203.     }
  204.     return null;
  205.   }
  206.   
  207.   private NAckOutput requestNAckOutput (String path_, Map<String, String> params_)  {

  208.     try {
  209.       StringBuilder response = requestGeneric(path_, params_);

  210.       // Decode JSON
  211.       ObjectMapper mapper = new ObjectMapper();
  212.       NAckOutput obj = mapper.readValue(response.toString(), NAckOutput.class);

  213.       return obj;
  214.     }
  215.     catch (Exception e) {
  216.       logger.error("Exception in requestPost:", e);
  217.     }
  218.     finally {

  219.     }
  220.     return null;
  221.   }


  222. }
  223. </payfacto-code>

  224. ==== CTPRequestFields.java ====
  225. <payfacto-code lang="java">
  226. public final class CTPRequestFields {
  227.   
  228.   /** The TRANSACTION_NUMBER. */
  229.   public static final String TRANSACTION_NUMBER = "TransactionNumber";
  230.   
  231.   /** The COMPANY_NUMBER. */
  232.   public static final String COMPANY_NUMBER = "CompanyNumber";

  233.   /** The MERCHANT_NUMBER. */
  234.   public static final String MERCHANT_NUMBER = "MerchantNumber";

  235.   /** The CUSTOMER_NUMBER. */
  236.   public static final String CUSTOMER_NUMBER = "CustomerNumber";

  237.   /** The AMOUNT. */
  238.   public static final String AMOUNT = "Amount";

  239.   /** The INVOICE_NUMBER. */
  240.   public static final String INVOICE_NUMBER = "InvoiceNumber";

  241.   /** The ORIGINAL_INVOICE_NUMBER. */
  242.   public static final String ORIGINAL_INVOICE_NUMBER = "OriginalInvoiceNumber";

  243.   /** The INPUT_TYPE. */
  244.   public static final String INPUT_TYPE = "InputType";

  245.   /** The CARD_TYPE. */
  246.   public static final String CARD_TYPE = "CardType";

  247.   /** The CARD_NUMBER. */
  248.   public static final String CARD_NUMBER = "CardNumber";

  249.   /** The EXPIRATION_DATE. */
  250.   public static final String EXPIRATION_DATE = "ExpirationDate";

  251.   /** The CVV2CVC2_NUMBER. */
  252.   public static final String CVV2CVC2_NUMBER = "Cvv2Cvc2Number";

  253.   /** The MERCHANT_TERMINAL_NUMBER. */
  254.   public static final String MERCHANT_TERMINAL_NUMBER = "MerchantTerminalNumber";

  255.   /** The LANGUAGE_CODE. */
  256.   public static final String LANGUAGE_CODE = "LanguageCode";

  257.   /** The CURRENCY_CODE. */
  258.   public static final String CURRENCY_CODE = "CurrencyCode";  

  259.   /** The OPERATOR_ID. */
  260.   public static final String OPERATOR_ID = "OperatorID";  

  261.   /** The CARDHOLDER_ADDRESS. */
  262.   public static final String CARDHOLDER_ADDRESS = "CardHolderAddress";  

  263.   /** The CARDHOLDER_POSTALCODE. */
  264.   public static final String CARDHOLDER_POSTALCODE = "CardHolderPostalCode";  

  265.   /** The CARDHOLDER_AVV. */
  266.   public static final String CARDHOLDER_AVV = "CardHolderAVV";  

  267.   /** The XID. */
  268.   public static final String XID = "xID";  

  269.   /** The UCAF. */
  270.   public static final String UCAF = "uCAF";  

  271.   /** The USER_ECHO_DATE. */
  272.   public static final String USER_ECHO_DATA = "UserEchoData";  

  273.   /** The TRX_OPTIONS. */
  274.   public static final String TRX_OPTIONS = "TrxOption";  

  275.   /** The ORIGINAL_TRANSACTION_NUMBER. */
  276.   public static final String ORIGINAL_TRANSACTION_NUMBER = "OriginalTransactionNumber";  

  277.   /** The ORIGINAL_AUTHORIZATION_NUMBER. */
  278.   public static final String ORIGINAL_AUTHORIZATION_NUMBER = "OriginalAuthorizationNumber";  

  279.   /** The ORIGNAL_AMOUNT. */
  280.   public static final String ORIGNAL_AMOUNT = "OriginalAmount";  

  281.   /** The ORIGINAL_TERMINAL_INVOICE_NUMBER. */
  282.   public static final String ORIGINAL_TERMINAL_INVOICE_NUMBER = "OriginalTerminalInvoiceNumber";  

  283.   /** The TOKEN. */
  284.   public static final String TOKEN = "Token";  

  285.   /** The SUCCESS_URL. */
  286.   public static final String SUCCESS_URL = "SuccessURL";  

  287.   /** The FAILURE_URL. */
  288.   public static final String FAILURE_URL = "FailureURL";  

  289.   /** The EMAIL. */
  290.   public static final String EMAIL = "Email";  

  291.   /** The SESSION_ID. */
  292.   public static final String SECURE_ID = "SecureID";  

  293.   /** The IOP_ISSUER_CONFIRMATION_NUMBER. */
  294.   public static final String IOP_ISSUER_CONFIRMATION_NUMBER = "IopIssuerConfirmationNumber";  

  295.   /** The IOP_ISSUER_NAME. */
  296.   public static final String IOP_ISSUER_NAME = "IopIssuerName";  

  297.   /** The IOP_TRANSACTION_ID. */
  298.   public static final String IOP_TRANSACTION_ID = "IopTransactionId";  

  299.   /** The BATCH_NUMBER. */
  300.   public static final String BATCH_NUMBER = "BatchNumber";  

  301.   /** The RECUR_ID. */
  302.   public static final String ID = "ID";  

  303.   /** The NAME. */
  304.   public static final String NAME = "Name";  

  305.   /** The FREQUENCY. */
  306.   public static final String FREQUENCY = "Frequency";  

  307.   /** The START. */
  308.   public static final String START_DATE = "StartDate";  
  309.   
  310.   /** The FINISH. */
  311.   public static final String END_DATE = "EndDate";    

  312.   /** The NUMBER. */
  313.   public static final String NUMBER_OF_PAYMENTS = "NumberOfPayments";  

  314.   /** The ACCOUNT. */
  315.   public static final String ACCOUNT_NUMBER = "AccountNumber";  

  316.   /** The DESCRIPTION. */
  317.   public static final String DESCRIPTION = "Description";  

  318.   /** The STATUS. */
  319.   public static final String STATUS = "Status";  

  320. }
    • Related Articles

    • Code Example Microsoft .NET

      Microsoft .NET Edit main.cs PaymentTransaction paymentTransaction = new PaymentTransaction("https://test.api.payfacto.com/v1", "00000000000000000000000000000000000"); String purchaseInput = FillPurchaseInput(); transactionOutput = ...
    • Code Example : HTML - JavaScript

      form.html <html> <body> <script type="text/javascript"> function encodeString(str) { document.PURCHASE.payload.value = btoa(str); } </script> <form name="PURCHASE" action="https://test.api.payfacto.com/v1/purchase" method="POST"> auth-api-key<input ...
    • Code Example : PHP

      PHP Edit main.php <?php $payload="CompanyNumber=00000&MerchantNumber=00000000&CustomerNumber=00000000&Amount=00000001000&InvoiceNumber=505836912354&OriginalInvoiceNumber=505836912354&InputType=I&CardType= ...
    • Example Calls to the Secure Payment Application

      This page lists code examples for the various Secure Payment transactions Purchase JavaScript Intent intent = new Intent("com.payfacto.terminal.payment.PAYMENT_ACTIVITY");   intent.putExtra("TRANSACTION", "SALE"); intent.putExtra("AMOUNT", "100"); // ...
    • Credit Card Verification Code (CVV)

      Introduction This code is not found on the magnetic stripe, making it impossible for the defrauder to copy the magnetic stripe or to learn the card’s verification code. This code is not embossed on the credit card either (characters engraved in the ...