Not only do they work different ways, each of these actually presents to the paying user in different ways. That means you can't really abstract them from the user, which means you really have to interface with each of them directly. There's no clean way to get around that.
The nearest alternative, then, is to find a wrapper (or set of wrappers) that allows you to internally manage them all similarly, so that you're not duplicating your efforts for each individual processor. I haven't found a dedicated library for this, but I've found a few options that are delivered with other frameworks. Magento has been mentioned; also Kohana, OpenCart, and even Zend Framework offer worthy and relatively modular solutions.
There are a few half-decent solutions mentioned here:
http://stackoverflow.com/questions/1993814/php-payment-library
...specifically, this one has been referred/linked to a lot:
http://www.stumbleupon.com/su/2sX5Ei/www.phpfour.com/blog/2009/02/php-payment-gateway-library-for-paypal-authorizenet-and-2checkout/
I did find this -- it purports to be a commercial solution to the problem, in case you're into that sort of thing -- but I doubt it really accomplishes quite what you're looking for:
http://www.transaxdevelopers.com/PHP-Payment-Processing/PHP-Payment-Integration.asp
Another:
http://www.flexsin.com/software-web-development/payment-gateway-integration.php