Having integrated with many different merchants in the past, I could write a program to do this very thing in a very short time. Whilst the storefront may require you to login to reach their payment pages, that doesn't mean you can't simply login, get to the payment page, extrapolate all the form fields, and brute force away.
Many merchants don't require any form of authentication aside from a simple "merchant key." Nevermind the fact that these "merchant keys" are often easily obtainable. Having this information, you're thereby circumventing the storefront, and brute forcing directly against the provider. Most providers (Verisign, Authorize.net) do not limit the number of attempts so long as the order_id (or whatever key you define) are different.
I do agree with Skoorb though. The storefront should, at a very minimum, limit the number of transaction attempts by at least the ip. We do this very thing in our framework. We allow them three attempts to successfully process their card (maybe they mistyped their card number, etc.), then we fail the transaction and notify the user.