Payment integration is the least error-tolerant part of any e-commerce project. Reading the docs and getting a happy path working is the easy part; the real test starts with installment options, 3D Secure redirects, and properly surfacing failed transactions.
In the first version of the IsPool project, we left payment status checks entirely to the callback URL. If a user closed the payment page or the browser, the order stayed stuck in 'pending'. The fix was adding a periodic status-polling job alongside the callback, and treating the payment provider itself as the single source of truth for order status.
Installment options look like a simple UI detail, but if you don't reflect bank-specific commission differences accurately, you lose customer trust fast. On BalkoLüx, we added a layer that dynamically calculates the installment table based on cart total and pulls current commission rates by card BIN number.
Translating error messages into something a user can act on is also easy to underestimate. Instead of showing iyzico's raw technical error codes, we wrote clear, actionable messages for the 10-15 most common failure codes (e.g., 'Your card may have insufficient limit, try another card').
In the end, the real work in payment integration isn't wiring up the API — it's thinking through every way it can fail.
{ }
