Senior Software Engineer – Paysafe Group – Atlanta, GA
We are looking for a full-stack Senior Software Engineer to join the US Acquiring team, based in Atlanta, as a part of the Global Payment Processing unit of…From Paysafe Group – Mon, 01 Mar 2021 16:16:02 GMT – View all Atlanta, GA jobs …

“),r.close()),!r)throw Error(“base not supported”);var a=r.createElement(“base”);a.href=n,r.getElementsByTagName(“head”)[0].appendChild(a);var i=r.createElement(“a”);return i.href=t,i.href}finally{e&&e.parentNode.removeChild(e)}}());var l=i(t||””),f=function(){if(!(“defineProperties”in Object))return!1;try{var e={};return Object.defineProperties(e,{prop:{get:function(){return!0}}}),e.prop}catch(t){return!1}}(),h=f?this:document.createElement(“a”),m=new o(l.search?l.search.substring(1):null);return m._url_object=h,Object.defineProperties(h,{href:{get:function(){return l.href},set:function(e){l.href=e,r(),u()},enumerable:!0,configurable:!0},origin:{get:function(){return”origin”in l?l.origin:this.protocol+”//”+this.host},enumerable:!0,configurable:!0},protocol:{get:function(){return l.protocol},set:function(e){l.protocol=e},enumerable:!0,configurable:!0},username:{get:function(){return l.username},set:function(e){l.username=e},enumerable:!0,configurable:!0},password:{get:function(){return l.password},set:function(e){l.password=e},enumerable:!0,configurable:!0},host:{get:function(){var e={“http:”:/:80$/,”https:”:/:443$/,”ftp:”:/:21$/}[l.protocol];return e?l.host.replace(e,””):l.host},set:function(e){l.host=e},enumerable:!0,configurable:!0},hostname:{get:function(){return l.hostname},set:function(e){l.hostname=e},enumerable:!0,configurable:!0},port:{get:function(){return l.port},set:function(e){l.port=e},enumerable:!0,configurable:!0},pathname:{get:function(){return”/”!==l.pathname.charAt(0)?”/”+l.pathname:l.pathname},set:function(e){l.pathname=e},enumerable:!0,configurable:!0},search:{get:function(){return l.search},set:function(e){l.search!==e&&(l.search=e,r(),u())},enumerable:!0,configurable:!0},searchParams:{get:function(){return m},enumerable:!0,configurable:!0},hash:{get:function(){return l.hash},set:function(e){l.hash=e,r()},enumerable:!0,configurable:!0},toString:{value:function(){return l.toString()},enumerable:!1,configurable:!0},valueOf:{value:function(){return l.valueOf()},enumerable:!1,configurable:!0}}),h}var c,s=e.URL;try{if(s){if(“searchParams”in(c=new e.URL(“http://example.com”))){var f=new l(“http://example.com”);if(f.search=”a=1&b=2″,”http://example.com/?a=1&b=2″===f.href&&(f.search=””,”http://example.com/”===f.href))return}”href”in c||(c=undefined),c=undefined}}catch(m){}if(Object.defineProperties(o.prototype,{append:{value:function(e,t){this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},”delete”:{value:function(e){for(var t=0;t<this._list.length t="0;t<this._list.length;++t)if(this._list[t].name===e)return" this._list null n="!1,r=0;r1?arguments[1]:undefined;this._list.forEach(function(n){e.call(t,n.value,n.name)})},writable:!0,enumerable:!0,configurable:!0},toString:{value:function(){return r(this._list)},writable:!0,enumerable:!1,configurable:!0}}),”Symbol”in e&&”iterator”in e.Symbol&&(Object.defineProperty(o.prototype,e.Symbol.iterator,{value:o.prototype.entries,writable:!0,enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,e.Symbol.iterator,{value:function(){return this},writable:!0,enumerable:!0,configurable:!0})),s)for(var h in s)Object.prototype.hasOwnProperty.call(s,h)&&”function”==typeof s[h]&&(l[h]=s[h]);e.URL=l,e.URLSearchParams=o}(),function(){if(“1”!==new e.URLSearchParams([[“a”,1]]).get(“a”)||”1″!==new e.URLSearchParams({a:1}).get(“a”)){var r=e.URLSearchParams;e.URLSearchParams=function(e){if(e&&”object”==typeof e&&t(e)){var a=new r;return n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();a.append(r[0],r[1])}),a}return e&&”object”==typeof e?(a=new r,Object.keys(e).forEach(function(t){a.set(t,e[t])}),a):new r(e)}}}()}(self);}if (!(“Window”in self
)) {“undefined”==typeof WorkerGlobalScope&&”function”!=typeof importScripts&&function(o){o.constructor?o.Window=o.constructor:(o.Window=o.constructor=new Function(“return function Window() {}”)()).prototype=self}(self);}if (!((function(n){if(!(“Event”in n))return!1
try{return new Event(“click”),!0}catch(t){return!1}})(self)
)) {!function(){function e(e,t){if(!e)throw new Error(“Not enough arguments”);var n;if(“createEvent”in document){n=document.createEvent(“Event”);var o=!(!t||t.bubbles===undefined)&&t.bubbles,i=!(!t||t.cancelable===undefined)&&t.cancelable;return n.initEvent(e,o,i),n}return n=document.createEventObject(),n.type=e,n.bubbles=!(!t||t.bubbles===undefined)&&t.bubbles,n.cancelable=!(!t||t.cancelable===undefined)&&t.cancelable,n}var t={click:1,dblclick:1,keyup:1,keypress:1,keydown:1,mousedown:1,mouseup:1,mousemove:1,mouseover:1,mouseenter:1,mouseleave:1,mouseout:1,storage:1,storagecommit:1,textinput:1};if(“undefined”!=typeof document&&”undefined”!=typeof window){var n=window.Event&&window.Event.prototype||null;e.NONE=0,e.CAPTURING_PHASE=1,e.AT_TARGET=2,e.BUBBLING_PHASE=3,window.Event=Window.prototype.Event=e,n&&Object.defineProperty(window.Event,”prototype”,{configurable:!1,enumerable:!1,writable:!0,value:n}),”createEvent”in document||(window.addEventListener=Window.prototype.addEventListener=Document.prototype.addEventListener=Element.prototype.addEventListener=function o(){var e=this,n=arguments[0],o=arguments[1];if(e===window&&n in t)throw new Error(“In IE8 the event: “+n+” is not available on the window object. Please see https://github.com/Financial-Times/polyfill-service/issues/317 for more information.”);e._events||(e._events={}),e._events[n]||(e._events[n]=function(t){var n,o=e._events[t.type].list,i=o.slice(),r=-1,c=i.length;for(t.preventDefault=function a(){!1!==t.cancelable&&(t.returnValue=!1)},t.stopPropagation=function l(){t.cancelBubble=!0},t.stopImmediatePropagation=function s(){t.cancelBubble=!0,t.cancelImmediate=!0},t.currentTarget=e,t.relatedTarget=t.fromElement||null,t.target=t.target||t.srcElement||e,t.timeStamp=(new Date).getTime(),t.clientX&&(t.pageX=t.clientX+document.documentElement.scrollLeft,t.pageY=t.clientY+document.documentElement.scrollTop);++r-1)
)) {self.CustomEvent=function e(t,n){if(!t)throw Error(‘TypeError: Failed to construct “CustomEvent”: An event name must be provided.’);var l;if(n=n||{bubbles:!1,cancelable:!1,detail:null},”createEvent”in document)try{l=document.createEvent(“CustomEvent”),l.initCustomEvent(t,n.bubbles,n.cancelable,n.detail)}catch(a){l=document.createEvent(“Event”),l.initEvent(t,n.bubbles,n.cancelable),l.detail=n.detail}else l=new Event(t,n),l.detail=n&&n.detail||null;return l},CustomEvent.prototype=Event.prototype;}if (!(“document”in self&&”hidden”in document&&”visibilityState”in document
)) {!function(){function i(){document.hidden=document[t+”Hidden”],document.visibilityState=document[t+”VisibilityState”]}var t=document.webkitVisibilityState?”webkit”:document.mozVisibilityState?”moz”:null;t&&(i(),document.addEventListener(t+”visibilitychange”,function(){i(),document.dispatchEvent(new CustomEvent(“visibilitychange”))}))}();}if (!((function(){var n=!1
return document.documentElement.addEventListener(“focusin”,function(){n=!0}),document.documentElement.dispatchEvent(new Event(“focusin”)),n})()
)) {self.addEventListener(“focus”,function(e){e.target.dispatchEvent(new Event(“focusin”,{bubbles:!0,cancelable:!0}))},!0),self.addEventListener(“blur”,function(e){e.target.dispatchEvent(new Event(“focusout”,{bubbles:!0,cancelable:!0}))},!0);}if (!(“onhashchange”in self&&(null==self.onhashchange||”function”==typeof self.onhashchange)
)) {!function(n){function h(){a!==n.location.hash&&(a=n.location.hash,n.dispatchEvent(new Event(“hashchange”))),setTimeout(h,500)}var a=n.location.hash;n.onhashchange=function(){},h()}(self);}if (!(“XMLHttpRequest”in self&&”prototype”in self.XMLHttpRequest&&”addEventListener”in self.XMLHttpRequest.prototype
)) {!function(e,t){e.XMLHttpRequest=function s(){var e=this,n=e._request=t?new t:new ActiveXObject(“MSXML2.XMLHTTP.3.0”);n.onreadystatechange=function(){e.readyState=n.readyState;var t=4===e.readyState;e.response=e.responseText=t?n.responseText:null,e.status=t?n.status:null,e.statusText=t?n.statusText:null,e.dispatchEvent(new Event(“readystatechange”)),t&&e.dispatchEvent(new Event(“load”))},”onerror”in n&&(n.onerror=function(){e.dispatchEvent(new Event(“error”))})},e.XMLHttpRequest.UNSENT=0,e.XMLHttpRequest.OPENED=1,e.XMLHttpRequest.HEADERS_RECEIVED=2,e.XMLHttpRequest.LOADING=3,e.XMLHttpRequest.DONE=4;var n=e.XMLHttpRequest.prototype;n.addEventListener=e.addEventListener,n.removeEventListener=e.removeEventListener,n.dispatchEvent=e.dispatchEvent,n.abort=function r(){return this._request()},n.getAllResponseHeaders=function u(){return this._request.getAllResponseHeaders()},n.getResponseHeader=function i(e){return this._request.getResponseHeader(e)},n.open=function a(e,t){this._request.open(e,t,arguments[2],arguments[3],arguments[4])},n.overrideMimeType=function o(e){this._request.overrideMimeType(e)},n.send=function p(){this._request.send(0 in arguments?arguments[0]:null)},n.setRequestHeader=function d(e,t){this._request.setRequestHeader(e,t)}}(self,self.XMLHttpRequest);}if (!(“fetch”in self
)) {!function(t,e){“object”==typeof exports&&”undefined”!=typeof module?e(exports):”function”==typeof define&&define.amd?define([“exports”],e):e(t.WHATWGFetch={})}(this,function(t){“use strict”;function e(t){return t&&DataView.prototype.isPrototypeOf(t)}function r(t){if(“string”!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&’*+.^_`|~]/i.test(t))throw new TypeError(“Invalid character in header field name”);return t.toLowerCase()}function o(t){return”string”!=typeof t&&(t=String(t)),t}function n(t){var e={next:function(){var e=t.shift();return{done:e===undefined,value:e}}};return v.iterable&&(e[Symbol.iterator]=function(){return e}),e}function i(t){this.map={},t instanceof i?t.forEach(function(t,e){this.append(e,t)},this):Array.isArray(t)?t.forEach(function(t){this.append(t[0],t[1])},this):t&&Object.getOwnPropertyNames(t).forEach(function(e){this.append(e,t[e])},this)}function s(t){if(t.bodyUsed)return Promise.reject(new TypeError(“Already read”));t.bodyUsed=!0}function a(t){return new Promise(function(e,r){t.onload=function(){e(t.result)},t.onerror=function(){r(t.error)}})}function f(t){var e=new FileReader,r=a(e);return e.readAsArrayBuffer(t),r}function u(t){var e=new FileReader,r=a(e);return e.readAsText(t),r}function h(t){for(var e=new Uint8Array(t),r=new Array(e.length),o=0;o-1?e:t}function p(t,e){e=e||{};var r=e.body;if(t instanceof p){if(t.bodyUsed)throw new TypeError(“Already read”);this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new i(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,r||null==t._bodyInit||(r=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=e.credentials||this.credentials||”same-origin”,!e.headers&&this.headers||(this.headers=new i(e.headers)),this.method=y(e.method||this.method||”GET”),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,(“GET”===this.method||”HEAD”===this.method)&&r)throw new TypeError(“Body not allowed for GET or HEAD requests”);this._initBody(r)}function l(t){var e=new FormData;return t.trim().split(“&”).forEach(function(t){if(t){var r=t.split(“=”),o=r.shift().replace(/\+/g,” “),n=r.join(“=”).replace(/\+/g,” “);e.append(decodeURIComponent(o),decodeURIComponent(n))}}),e}function b(t){var e=new i;return t.replace(/\r?\n[\t ]+/g,” “).split(/\r?\n/).forEach(function(t){var r=t.split(“:”),o=r.shift().trim();if(o){var n=r.join(“:”).trim();e.append(o,n)}}),e}function m(t,e){e||(e={}),this.type=”default”,this.status=e.status===undefined?200:e.status,this.ok=this.status>=200&&this.status-1};i.prototype.append=function(t,e){t=r(t),e=o(e);var n=this.map[t];this.map[t]=n?n+”, “+e:e},i.prototype[“delete”]=function(t){delete this.map[r(t)]},i.prototype.get=function(t){return t=r(t),this.has(t)?this.map[t]:null},i.prototype.has=function(t){return this.map.hasOwnProperty(r(t))},i.prototype.set=function(t,e){this.map[r(t)]=o(e)},i.prototype.forEach=function(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.map[r],r,this)},i.prototype.keys=function(){var t=[];return this.forEach(function(e,r){t.push(r)}),n(t)},i.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),n(t)},i.prototype.entries=function(){var t=[];return this.forEach(function(e,r){t.push([r,e])}),n(t)},v.iterable&&(i.prototype[Symbol.iterator]=i.prototype.entries);var _=[“DELETE”,”GET”,”HEAD”,”OPTIONS”,”POST”,”PUT”];p.prototype.clone=function(){return new p(this,{body:this._bodyInit})},c.call(p.prototype),c.call(m.prototype),m.prototype.clone=function(){return new m(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new i(this.headers),url:this.url})},m.error=function(){var t=new m(null,{status:0,statusText:””});return t.type=”error”,t};var x=[301,302,303,307,308];m.redirect=function(t,e){if(-1===x.indexOf(e))throw new RangeError(“Invalid status code”);return new m(null,{status:e,headers:{location:t}})},t.DOMException=self.DOMException;try{new t.DOMException}catch(g){t.DOMException=function(t,e){this.message=t,this.name=e;var r=Error(t);this.stack=r.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}w.polyfill=!0,self.fetch=w,self.Headers=i,self.Request=p,self.Response=m,t.Headers=i,t.Request=p,t.Response=m,t.fetch=w,Object.defineProperty(t,”__esModule”,{value:!0})});}})(‘object’ === typeof window && window || ‘object’ === typeof self && self || ‘object’ === typeof global && global || {});
About Paysafe Group
Paysafe Group (Paysafe) is a leading global provider of end-to-end payment solutions. Its core purpose is to enable businesses and consumers to connect seamlessly through industry-leading capabilities in payment processing, digital wallet, card issuing and online cash solutions. With over 20 years of online payment experience, an annualized transactional volume of over US $80 billion, and approximately 3,000 employees located in 12+ global locations, Paysafe connects businesses and consumers across 200 payment types in over 40 currencies around the world. Delivered through an integrated platform, Paysafe solutions are geared toward mobile-initiated transactions, real-time analytics and the convergence between brick-and-mortar and online payments.
Are you ready to make an impact? Join our team that is inspired by a unified vision and propelled by passion.
Paysafe Group (Paysafe) is a leading specialized payments platform. Its core purpose is to enable businesses and consumers to connect and transact seamlessly through industry-leading capabilities in payment processing, digital wallet, card issuing and online cash solutions.
We are looking for a full-stack Senior Software Engineer to join the US Acquiring team, based in Atlanta, as a part of the Global Payment Processing unit of Paysafe. The US Acquiring teams owns the platform that includes merchant onboarding, customer portal, back office, and multiple customer APIs and backend services. This team is responsible for building the product suite capabilities used by over 100K customers as well as building and enhancing connections to backend payment processors, gateways, vendors, and APIs.
Your responsibilities would include:
- Working on an agile team to design, develop, and maintain systems across the platform
- Writing high-quality, performant, secure, and testable code
- Helping to drive the team forward in engineering disciplines and practices
- Giving and receiving candid code review feedback to maintain high quality code
You have:
- 7+ years of experience developing web applications, APIs, and backend systems using the Microsoft development platform and web application frameworks
- Experience with SOA & microservice architectures
- API design, development, and integration experience
- A bachelor’s degree or higher in a technical field or equivalent experience
Nice to have:
- Experience in building cloud-native solutions in Azure/AWS including both IaaS and PaaS
- Knowledge of event driven & distributed architectures
- Previous experience in the payment processing industry
Our culture values humility, high trust & autonomy, a desire for excellence and meeting commitments, tight team cohesion, a sense of urgency, a desire to learn, pragmatically pushing boundaries, and accomplishing goals that have a direct business impact. We encourage you to apply even if your experience does not exactly align as we value diverse thoughts, experience, and backgrounds.
Equal Employment Opportunity
Paysafe provides equal employment opportunities to all employees and applicants for employment and prohibits discrimination and harassment of any type without regard to race, color, religion, age, sex, national origin, disability status, genetics, protected veteran status, sexual orientation, gender identity or expression, or any other characteristic protected by federal, state or local laws. This policy applies to all terms and conditions of employment, including recruiting, hiring, placement, promotion, termination, layoff, recall, transfer, leaves of absence, compensation and training.