') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - fatzebra/FatZebra-Java: Java Library for Fat Zebra's Gateway · GitHub
Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Fat Zebra Java Library

Release version 1.3

This library provides the basic functionality for developers to integrate their applications against the Fat Zebra API.

Currently the library provides the following functionality:

  • Create a Purchase
  • Find a Purchase
  • Refund a Purchase
  • Pre-auth a purchase (do not capture the purchase)
  • Capture a pre-authorised purchase

Usage

Within your application you can use the following code to perform transactions:

// Setup - you only need to do this once upon application initializationFatZebra.username = "TEST";
FatZebra.token = "TEST";
FatZebra.sandbox = true; // Omit this for production// Alternatively you can setup a Gateway Context:GatewayContextctx = newGatewayContext();
intcardExpiryMonth = 7;
intcardExpiryYear = 2023;
HashMap<String,Object> card_data = newHashMap<String, Object>();
card_data.put("card_number", "5123456789012346");
card_data.put("card_holder", "James Smith");
card_data.put("cvv", "123");
card_data.put("card_expiry", String.format("%d/%d", cardExpiryMonth, cardExpiryYear));
try {
Purchasep = Purchase.create(
100, // The amount, as an integer. i.e. $150.75 would be 15075card_data, // A HashMap of the card data we defined above"my_reference", // Your order reference, such as an invoice number"1.2.3.4", // The customers IP address"AUD"// The currency code (such as AUD, USD, EUR, GBP etc)
);
} catch(IOExceptionex) {
System.err.println("IOException in purchase request.");
ex.printStackTrace();
} catch(APIErrorex) {
System.err.println("API Error in purchase request.");
ex.printStackTrace();
} catch(NetworkErrorex) {
System.err.println("Network Error in purchase request.");
ex.printStackTrace();
}
// If no exceptions are raised then you can inspect the purchase object:if (p.successful) {
// Ok we are good to go with the successful transactions.System.out.println(String.format("Transaction successful: %s", p.toString());
} else {
// The transaction was declined in the bank networkSystem.err.println(String.format("Transaction failed. Message: %s. Transaction: %s", p.message, p.toString()));
}
// If the transaction is successful you can refund it:try {
booleanrefunded = p.refund(
100, // Amount of refund - must be less then or equal to the transaction amount or remaining amount should any refunds be already made"my_refund_reference"// Optional - if omitted we will use the purchase original reference.
);
} catch(IOExceptionex) {
System.err.println("IOException in refund request.");
ex.printStackTrace();
} catch(APIErrorex) {
System.err.println("API Error in refund request.");
ex.printStackTrace();
} catch(NetworkErrorex) {
System.err.println("Network Error in refund request.");
ex.printStackTrace();
}
System.out.println(String.format("Refund successful: %s", refunded));
// Alternatively you can create a refund without the purchasetry {
Refundr = Refund.create(
100, // Amount as integer"071-P-ABC123D5", // The transaction ID"my refund ref"// Optional
);
} catch(IOExceptionex) {
System.err.println("IOException in refund request.");
ex.printStackTrace();
} catch(APIErrorex) {
System.err.println("API Error in refund request.");
ex.printStackTrace();
} catch(NetworkErrorex) {
System.err.println("Network Error in refund request.");
ex.printStackTrace();
}
System.out.println(r.toString());
// Finally you can lookup transactions:try {
Purchasep2 = Purchase.find("my_reference"); // You can use the merchant reference, or the Fat Zebra Transaction ID such as 071-P-XXMRSYH6p2.refund(100);
} catch(IOExceptionex) {
System.err.println("IOException in purchase lookup or refund request.");
ex.printStackTrace();
} catch(APIErrorex) {
System.err.println("API Error in purchase lookup or refund request.");
ex.printStackTrace();
} catch(NetworkErrorex) {
System.err.println("Network Error in purchase lookup or refund request.");
ex.printStackTrace();
}

Authorisations and Capture

It is possible to pass a flag to the Purchase.create() method to perform an auth/capture transaction. Once a transaction is authorised it can be captured up to 72 hours after the successful auth.

// Setup - you only need to do this once upon application initializationFatZebra.username = "TEST";
FatZebra.token = "TEST";
FatZebra.sandbox = true; // Omit this for productionintcardExpiryMonth = 7;
intcardExpiryYear = 2023;
HashMap<String,Object> card_data = newHashMap<String, Object>();
card_data.put("card_number", "5123456789012346");
card_data.put("card_holder", "James Smith");
card_data.put("cvv", "123");
card_data.put("card_expiry", String.format("%d/%d", cardExpiryMonth, cardExpiryYear));
try {
Purchasep = Purchase.create(
100, // The amount, as an integer. i.e. $150.75 would be 15075card_data, // A HashMap of the card data we defined above"my_reference", // Your order reference, such as an invoice number"1.2.3.4", // The customers IP address"AUD", // The currency code (such as AUD, USD, EUR, GBP etc)false// Indicates whether the transaction should be captured or not - default = true
);
}
// Capture the transaction:if (p.successful) {
booleancaptured = p.capture(10); // The capture amount can be less then or equal to the authorisation amountif (captured) {
System.out.println(String.format("Transaction captured for %d", p.captured_total));
}
}

Exceptions

There are two exception classes defined:

  • NetworkError - raised when connectivity issues are presented, such as a timeout, resolve or connect error
  • API Error - raised when there is an error response from the API, such as validation issues, uniqueness colissions etc

3rd Party Dependencies

This library depends on the following external dependencies:

  • Google Gson version 2.2.4
  • Apache HTTP Commons commons-codec version 1.6

These dependencies have been included in the project and packaged within the included jar.

About

Java Library for Fat Zebra's Gateway

Topics

Resources

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages