Service
Payment integrations that reconcile correctly
I have built a unified payment service spanning PayPal, Stripe and Razorpay, with webhook-driven state, refunds, and transaction status handling exposed as reusable APIs. The hard part of payments is never the happy path, it is idempotency, webhook ordering, partial refunds and reconciliation, and that is what I design for first.
What this includes
Multi-gateway abstraction
One internal payment interface across Stripe, PayPal and Razorpay so adding or swapping a provider is not a rewrite.
Idempotent transactions
Idempotency keys and safe retries so a dropped connection or a double-click never results in a duplicate charge.
Webhook-driven state
Signature-verified webhooks treated as the source of truth for payment state, with out-of-order and replayed events handled explicitly.
Refunds and reconciliation
Full and partial refunds, chargeback status, and reporting that matches the gateway dashboard line for line.
Proof
Shipped work using this
Payment Service API
Unified payment integration platform with PayPal, Stripe, Razorpay, webhooks, refunds, transaction status handling, and reusable APIs for external applications.
View case studyProduct Subscription App
Shopify subscription application enabling recurring billing, flexible delivery cycles, wallet and card payments, and customer/admin controls for pause, skip, cancel, and renew actions.
View case studyFizazzle Booking Platform
Booking-focused service platform with customer scheduling, admin booking management, vendor assignment workflows, invoice handling, payment status tracking, and customer/vendor communication flows.
View case studyCommon questions
Which payment gateways have you integrated?+
Stripe, PayPal and Razorpay in production, through a unified payment service with shared webhook, refund and transaction-status handling. The same pattern extends to most other providers.
How do you prevent duplicate charges?+
Idempotency keys on every charge request plus a transaction ledger that records intent before the call to the gateway. Retries then resolve to the same transaction instead of creating a new one.
Do you handle PCI compliance?+
By keeping card data out of the application entirely through tokenization and hosted fields from the gateway. That keeps the integration in the lightest PCI scope available.