Hi, my site allows users (marathon runners) to create a marathon profile page so that they can accept donations online from their friends and families.
A marathon runner has two buttons in the profile admin section:
1 - Release Funds (funds are sent to the charity because they successfully ran the marathon)
2 - Refund Funds (funds are sent back to each of the donators because the marathon runner did not run the marathon)
QUESTION 1 - What way do you think is best way to process / handle the 2 payments above?
A - each marathon profile has a different payment status for the charity ($charity_payment_status) and each donator (in a separate donations table), so when a marathon is completed and the runner clicks the Release Funds button, the $charity_payment_status field is updated to 'payment_pending' and then a cron runs to batch process all the payments every 15 mins, and then the $charity_payment_status is updated to 'settled'.
B - do you think it would be better to process payments on the fly... so as soon as the user presses the Release Funds button, this should process the payments there and then too.
QUESTION 2 - i am planning on using paypal for payments as i need a way that i can easily refund each of the donators if the marathon runner does not run the marathon and decides to press the Refund Funds button, HOWEVER, can you think of any other payment system that might work well.
Thanks in advance to any help you may be able to give with this...
What you are asking to do is a bit challenging. Probably the way to do what you are asking is to store the credit card information, and then run charges at the appropriate time. However, because of PCI compliance rules, this method will add more hoops for you to jump through. For instance you will need a separate database server for the card information, and the payment gateway will probably scrutinize you more closely.
I'm not sure paypal can act in the way you want, either. If you hold the cards until the "Release Funds" button is pressed, then you shouldn't need a "Refund" button. However you may have to account for rejected cards when they are charged.