Stripe charged me $714 for duplicate transactions within seconds
I just had a client pay $8,200, and they must have hit the submit button over and over. 6 times actually, but luckily their bank blocked all but 3 of the payments.
I had to refund 2 of those, and Stripe has charged me $714 in refund fees.
Their live chat and phone support all insist that it's expected that Stripe would process $8,200, submitted over and over within seconds to the same credit card, and wouldn't block it.
I guess it's true that I signed up for this when I signed up for Stripe. And it's obvious that the payment flow was misconfigured and the least I could do is disable the submit button upon click.
Although wow... I would have trusted Stripe to have some degree of obvious safety net against duplicate transactions until today.
I figured I'd put this out there in case anybody else finds themselves in the same situation.
30 comments
[ 4.3 ms ] story [ 83.1 ms ] threadhttps://stripe.com/docs/api/idempotent_requests
(i.e. the polished Stripe checkout version of wire transfer)
Not to mention the lack of protection the buyer would feel, as compared to a Credit Card.
There’s also no receipt you can point to to show the intended recipient was who received it.
That’s a huge disincentive for the client/customer to pay that way, and for the receiver the large delay in receiving money can be limiting as well.
Obviously it’s absurd that we’re still in this position in 2020 (that there isn’t a close approximation of instantaneous international transactions at a reasonable - eg fixed - price is beyond stupid)
The reversibility of card charges is a huge con, not a pro. Don't want it for large transactions, especially if involving physical goods (non recoverable costs). Besides, chargeback is a privilege reserved to consumers, it's not available to business accounts.
I've had clients that would prefer to pay 3% to be able to use their credit card to pay an invoice, rather than go through a wire transfer process.
You can just add the fee onto the charge, and let the customer decide if the convenience of paying with a card is worth it.
The biggest hit is usually the foreign currency conversion spread which is enormously unfavorable compared to the forex spot rate.
Then there are lots of problems if your bank doesn’t have a direct correspondant bank relationship with the Hong Kong bank and instead relies on other banks to handle that for them - this can lead to delays of up to a week and quite often leads to a link in the chain rejecting things for some reason (perhaps fraud checks or “know your customer” issues or perhaps one bank stripped all leading zeroes from the account number).
International wires are a pain in the ass, especially for relatively low sums like a few thousand dollars.
Personally, I use TransferWise for most international transactions now - it’s fast and the spread is much better.
As to if Stripe should "allow" this; while I think $8,200 is too much for repeat transactions, I don't think repeat identical transactions is that odd in general. Even within a couple of seconds (e.g. 99 cent in-app-purchases). The only thing that surprises me is that there is no upper limit/sanity check.
You could ask them to waive some of the fee, but some of it might be their costs.
[0] https://stripe.com/blog/idempotency
[1] https://stripe.com/docs/api/idempotent_requests
In that case I think some high velocity fraud filters should kick in (which they probably did). Indeed the purchase amount is very large, so you wouldn't really expect it to be a repeated high velocity buy. On the other hand Stripe can't really cover all possible edge cases all of the time.
Stripe will not allow an idempotent key to be reused w/i 24 hours.
You can use anything for the idempotent key and Stripe will actually track that along with the charge object so you can use something more meaningful if it's useful for your business.
edit: and if you generate a key that's more meaningful I'd be careful about leaking important/private data.
Take a look also at edwinwee's answer below.
(Also: Stripe‘s Payment Intents API is asynchronous, which means no double charges. I’d recommend looking into it! https://stripe.com/docs/payments/payment-intents)
I’d love to take a closer look at exactly what happened if you email me at edwin@stripe.com.
Shouldn't high velocity + high amount purchases be treated as potential (friendly) fraud and blocked by some fraud system somewhere?
For what you're talking about, that fraud system is already built into Stripe! Stripe's fraud shield detects high velocity (along with hundreds of other signals)[1]. You can also tune Stripe Radar[2] to block purchases with amounts that would be abnormally high for your business.
[1] https://stripe.com/docs/radar/risk-evaluation#high-risk
[2] https://stripe.com/docs/radar/rules
I have an old enough Stripe account from before they implemented this so I still enjoy free refunds but if I had to start today I’d definitely look around for another provider that doesn’t pull this kind of BS.