Having worked with some legacy subscription code it can be quite nasty.
We had race conditions where we would charge users twice
This has made me paranoid that any time I see timeout or error related to money I assume it went through and come back later.