I probably should have been more specific rather than expressing vague concerns in a public forum like that. Apologies.

Basically, for any payment service I’m looking for three things:

1. Can I integrate with it and collect money in the ways I want to?

2. Can I maintain proper records of those transactions for tax/audit/compliance purposes?

3. Can I test all of this thoroughly?

The new generation of payment services is great at fixing #1. Stripe and the like have made integration a much more pleasant and efficient experience.

Almost every payment service we’ve considered sucks at #2 to some degree. I do understand the desire to keep things simple and market with nonsense about five-minute integrations, but in the real world we still have to produce proper accounts and file things like VAT (sales tax) returns, so we do need the data to do those things available as easily as possible.

An almost universal failing in payment APIs we’ve looked at is having a data/API model built around mutable entities. I don’t want the details for a charge I already knew about to change if something like a refund or chargeback happens. I want a separate transaction recorded for that, with its own unique ID and date and records of things like fees and taxes, and of course a cross-reference to the original. This is easy to audit, and it’s easy to detect things like duplicate notifications while integrating.

An example more specific to Stripe is not applying a unique ID to the transfers it makes to our bank account, which of course occur close together and for similar amounts of money since we’re using it for B2C subscription charges. Unfortunately, different VAT criteria might apply to the underlying charges to our customers, depending on whether they’re in Europe or not. This leads to crazy things like manually reconciling records using spreadsheets, dashboards and the Mk I human eyeball, instead of writing a script that takes our downloaded bank statement and our Stripe API key and just works everything out quickly and accurately. It has also resulted in more in accountancy fees to prepare a tax return than the total amount of tax on the return! (If we must have this, please consider allowing us to have a single transfer weekly or monthly. In our case, a few days of drifting cash flow is no big deal, and the effort it would save every time we have to file a tax return would be well worth it.)

Also, slightly related, VAT invoices. Please, for the love of all that is holy, sort this out. It’s the law, a tiny amount of money is actually involved, but not keeping proper business records is not acceptable. We aren’t likely to get in a lot of trouble over 20p of misplaced tax. We are likely to get in trouble if we are picked for a Business Records Check and can’t show we’re following good practices, and right now that again means we waste crazy amounts of time fussing over literally pence on each transaction to make sure everything is squared away if anyone asks. Again, this stuff should just work, and our total effort required for compliance should be on the order of ten seconds to download a one-page PDF from the web site every month.

For #3, Stripe’s test facilities are a worthy effort. There’s a separate version of the system that can be used to check integrations without making real charges, and you can simulate a reasonable amount of real world behaviour with it. That is already better than a lot of payment services offer.

What you can’t do, unfortunately, is build an automated integration test suite that will fire off all the API calls we will ever want to make and receive all the incoming webhooks we might ever see in rapid succession. Some plausible things can’t be simulated as far as I know (e.g., what happens when someone’s card works for some subscription payments but then expires, or if someone raises a chargeback). Also, webhook notifications sometimes take a considerable time to arrive after whatever would have triggered them, which isn’t very test-friendly.

Despite our efforts to test our integration thoroughly, the lack of ability to run an automated suite quickly after we’ve made a change means again we’re talking about spending a lot of time manually testing all the key integration points every time we touch that part of our code.

I hope this is of interest to those in this discussion who work on payment services. Also, this has been a long post and obviously its purpose is mostly criticism, so I want to finish by reiterating that our experience with Stripe has been very positive overall. Even where I’m picking on them above, I don’t know of anyone else who’s actually doing things any better in most cases, and many other payment services seem to suffer from the same problems today.

Edit: And just to be clear, the two potentially loyalty-defeating issues I alluded to before are:

1. being able to automate the preparation of our accounts/tax records, matching up all transactions with our customers with the deposits that ultimately hit our bank account, and

2. being able to run a comprehensive, automated integration test suite.