I’ve done integrations with a number of credit card processing services recently. By far the easiest solution is to find a hosted provider, so that you don’t have to worry about CC data collection or storage. You don’t get a lot of options about that page, though. A middle ground is Stripe.com. You can build your form on your server, but the CC data is submitted only to Stripe. You have complete control over the customer, but have no access to the protected data.
The bit I’d really like to point out is that the stripe.com service is clearly documented. You’d think that something like Google Checkout would be presented clearly. However, the PHP API does not exactly match either the actual APIs. Despite having a code.google.com url, it was not created or maintained by Google. There is no documented example. If I could make sense out of how the provided example pages fit into the big picture, I wouldn’t need the “UseCase” functions they provide. The big picture is exactly what Stripe.com provides on its overview, and it makes it much easier to get something working. The Google documentation is almost too much data. After hundreds of links, several incompatible options, dozens of lists you find that it was only to submit an order. Processing the results of that order is another, equally large page. The stripe equivalent is maybe 200 lines of text, code samples and 5 links.
You could spend more time on Google Checkout’s API wizards to tell you which API you should implement than setting up a fully functional Stripe.com page.