29 Comments
User's avatar
Dr. Ashish Bamania's avatar

Very useful. Thanks for this!

Raul Junco's avatar

Glad to help. Thanks for reading!

Rafa PΓ‘ez's avatar

Great article. Nicely illustrated! Thank you, RaΓΊl.

jayamoorthi parasuraman's avatar

It's useful info,

Raul Junco's avatar

Glad to help. Thanks!

Dev Skills Unlock's avatar

I use to combined retry and DLQ, I appreciate your show up when retry or not retry. Seems obvious but worth to noticed!

Raul Junco's avatar

Retry and DLQ are a good combo for so many cases that they are hard to ignore.

Thanks, Romain.

Heru Hermawan's avatar

Great article with underrated topic, Raul!

Neo Kim's avatar

fantastic article, thanks a lot, Raul

Ashish Pratap Singh's avatar

Enjoyed reading it. Great article Raul!

Also, thanks for the mention.

Raul Junco's avatar

Glad you liked it, Ashish.

Thanks!

Daniel Moka's avatar

An excellent breakdown about and underrated topic.

And thanks for the mention my friend.

Raul Junco's avatar

Keep those articles coming, my friend.

Thanks!

Alfred Rowe's avatar

Great article, takes me back to many years ago. I’d like to contribute a perspective on handling retry mechanisms, particularly in the context of network timeouts. Based on my experience, network timeouts can escalate into critical issues, especially when interfacing with unreliable payment providers. There are numerous factors that contribute to network timeouts, and to mitigate risks such as financial loss or double-charging, the most secure approach is to leave transactions in a pending state rather than attempting retries. Final reconciliation can then be performed once the transaction status is confirmed, either implicitly or explicitly, by the provider. This reconciliation process is often scheduled at the end of the day or through periodic checks between involved parties.

A common issue arises when the payment provider receives the request but experiences delays due to inefficient processing or mismatched timeout configurations. In such cases, the requesting system may prematurely terminate the connection, assuming a failure, even though the transaction has already been committed and is likely to be processed successfully on the provider’s end. This underscores the importance of aligning timeout settings and implementing robust reconciliation mechanisms to ensure transactional integrity.

Ved Asole's avatar

When is the 2nd part going to be released?

Sourav Bandyopadhyay's avatar

Payment handling is critical! The complexity often comes from not understanding user needs first. Different customers (startups vs enterprises) have vastly different payment requirements and pain points. I've found that mapping out user personas before designing the payment flow saves so much refactoring later. Great deep-dive! πŸ’³

Ajay's avatar

This is a very insightful article. I wish you to cover asynchronous payments, where the customer initiates payment on the merchant site, authenticates details on the bank page, and in the background, the merchant polls the bank or gateway for status.

malik's avatar

thank you for the article ,

For stripe payment , they usually retry for insufficient funds in subscriptions

Petar Ivanov's avatar

Working with payments is crucial. This was one of the reasons I joined such a company last year.

Great article, Raul!