I think it could be done without changes to the UI. So instead of a creditId and a hosted wallet, the wallet would be in the client. Now the over-payment issue you always have when you don't know how much the service will cost can be solved by returning eTokens with the server answer. Always charge the theoretical maximum of the model and with the reply, return change.
Only problem is the backup of that extra data but that could be encrypted using the "creditId" to stick with the same UI.