I am planning to participate in the Stellar Build Challenge, and I am working on a recurring payment system for Stellar. I would like your feedback on my conception of how this could work.
Model #1
The user's secret key and wallet address are stored in our database. Their lumens are kept in that wallet until a request is made for a payment. Once that happens, the lumens are automatically transferred to the requestor if the user has authorized that recurring payment for that amount. Insufficient balances in the lumen wallet are handled just like a declined credit card charge.
The benefit of this model is that the user never has to remember to send lumens, which is the main benefit of recurring payment systems. The downside is the security implications of storing the user's secret key and wallet address.
Model #2
The user sends a set number of lumens to an intermediate wallet controlled by us. That wallet is charged for the recurring payments, and when the user is forecasted to run out of lumens, they are promoted to refill the wallet.
This model allows the user to control the risk they are willing to take. On the other hand, they could already do that by having a separate wallet they control themselves in model #1.
Model #3
Just build what amounts to a notification system for payments; every month, the user is prompted to send a certain number of lumens to an address. If that payment is not received within 3 days or so, it is treated like a declined payment.
This model is very easy to build but really doesn't add that much value other than making it a plug-and-play process.