I've been thinking about a similar method as part of the code for an exchange I'm working on, and it's almost correct other than if somebody has access to your database and knows your rules, they can insert or alter records in the database table that controls your payment processing service. The solution here would be to have the requests (database records) be nonced & signed. Preferably with both a server/application private key and a per-user private key derived from the users password.
Please look at Open Transactions system and maybe come help us get it widely deployed...
-MarkM-