Senior Full Stack Engineer - Payments

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Full Time

SALARY

PHP 100,000 - PHP 150,000.00

HOURS PER WEEK

40

DATE UPDATED

Aug 3, 2026

JOB OVERVIEW

Senior Fullstack Engineer - Payments

About OutsideHire
Outside Hire is a growing outsourcing company with over 75 employees, building custom products and solutions for our clients. We're dynamic, fast-paced, and always evolving!

----------

Why OutsideHire?
- An inclusive and dynamic work environment that values creativity and collaboration
- Opportunities to work on cutting-edge projects that make an impact
- Perks: Competitive salary, remote work, professional development support, etc.
- A team that truly values your skills and contributions

About the Role
You will build across the payments platform: the embeddable SDK that collects card and wallet credentials, the services that create sessions and route transactions to the right gateway, the tokenization boundaries that keep sensitive card data out of our systems, and the webhook and reconciliation flows that keep money accurate. This is not a role about building forms and CRUD screens. It is infrastructure that real money flows through, where a bug is not a broken layout but a failed transaction, a double charge, or a compliance i ---------- . You will work both sides of the wire, and you need to be genuinely strong on both.

What You'll Be Building
- The payment SDK and client layer. Hosted-fields integration with iframe isolation, a gateway-agnostic API so integrators write one integration regardless of processor, and the client-side state model for declines, 3DS, retries, and timeouts.
- The payment services. Session intent and gateway routing, tokenization boundaries, idempotency, HMAC-signed request flows, and the webhook and reconciliation logic that guarantees correctness.
- The platform around it. Versioning and deprecation so we evolve without breaking live merchants, observability across the payment path, and the developer experience for the engineers who integrate against us.

What We're Looking For

Required
- 7+ years building production software across frontend and backend
- Strong React and TypeScript. Not "I use React." You understand rendering behavior, state boundaries, effect lifecycles, and how to design a component API other engineers consume
- Strong backend. .NET and React are our core stack. You can design services, reason about API contracts, debug across the stack, and hold your own in an architecture discussion
- Payment systems experience. Gateway APIs, tokenization, hosted fields, webhooks, reconciliation, or equivalent work in a domain where correctness is non-negotiable
- Security fundamentals as instinct. Same-origin policy, CSP, CORS, XSS vectors, iframe isolation, token handling, why secrets never live in client bundles
- Agentic AI in your workflow. You use Claude Code, Cursor, Codex, or equivalents as a daily driver, not a novelty. We build AI-native and expect you to move at that speed
- Testing discipline. You write tests because untested payment code is a liability, not because a policy says to

Strong Plus
- Java, Kotlin, and Quarkus experience — strongly preferred
- Hands-on experience with gateway and tokenization stacks
- PCI DSS scope reduction, SAQ A or SAQ A-EP work
- 3D Secure 2 implementation
- Cloud and DevOps exposure (Azure or AWS), CI/CD ownership

How We Work
We move fast and requirements change. You will not get a fully specified ticket handed to you. You will get a problem, the business context behind it, and the autonomy to solve it.
- You ask the sharp question before writing code, not after shipping the wrong thing
- You escalate ambiguity early instead of guessing quietly
- You push back when an approach is wrong, with a better alternative
- You are comfortable working directly with product and client stakeholders
- You do not need to be managed into producing work you are proud of. If you have only worked in environments with detailed specs, dedicated QA, and long review cycles, you will find this uncomfortable. If you have worked in startups or fast-moving product teams, this will feel familiar.

The Bar
We are explicit about this because it saves everyone time.
We are hiring for craft. That means naming things well, keeping abstractions honest, deleting code that should not exist, reading the gateway documentation rather than guessing, and caring what the integration feels like for the engineer on the other side. We would rather ship one correct payment flow than five that mostly work.
If that sounds like unnecessary perfectionism, we are not a fit. If it sounds like how software should have been built all along, we want to talk.

Please submit your CV and a short cover letter to ----------

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0009
Controller Execution Time ( Jobseekers / Job )  0.0263
Total Execution Time  0.0278
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,524,456 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Full-Stack-Engineer-Payments-1701736
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0211 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1701736
 LIMIT 1 
0.0012   SELECT *
FROM `employers`
WHERE `employer_id` = 249035
 LIMIT 1 
0.0025   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1701736
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-08-09',ej.date_added) duration_daysDATEDIFF('2026-08-09',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-08-09',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1701736' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1701736 
0.0007   UPDATE employer_jobs SET hit_counts '***Aug-03-2026=359***Aug-04-2026=142***Aug-05-2026=15***Aug-06-2026=43***Aug-07-2026=31***Aug-08-2026=17***Aug-09-2026=2' WHERE job_id'1701736'  
0.0005   UPDATE employer_jobs SET monthly_hits '***Aug-2026=609' WHERE job_id'1701736'  
0.0006   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1701736' AND status LIKE 'sent%' ORDER BY id DESC  
0.0002   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1701736 
0.0134   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '249035'
AND `date_added` >= '2022-06-08' 
0.0003   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)