We implemented a PayPal IPN on our boards which places people into a usergroup upon payment and removes them when their subscription runs out. It emails the users as their payment clears, if it fails, when the cancel (letting them know that they can continue to access the board until their subscription period runs out) and when their subscription runs out (thanking them for being a member and offering a link if they want to sign up again). It also sends email to the board admin for any IPN notification that comes thru. We are in the process of adding a transaction log viewer, it currently keeps the records in a table, but just not a great interface to query them.
We will be adding a PayPal IPN transaction log visible on each user's profile (to admins only) and display their current status, & their expiration date and all related IPN messages about that user specifically. In the ACP, there will be a list of all current paying users with sorting available by expiration, subscription length, etc. As well as the more "noisy" raw IPN log with filtering to only show payments, cancelations, subscription end of term notices, etc.
In the "who's online" section we also have stats of "we have x paying members, y is the newest paying member" in addition to a stat on members of the "community sponsor" group (since we gave away about 20 memberships to friends and board 'pioneers'.) also only visible to admins. In a related mod, we have our default "only users granted special access" page display an ad to get a 15 minute sneak peek of the forum. If they have already done their sneak peek, they get an ad to become a subscriber.
Our promo banner ad at the top goes away based on paying status and is replaced by
(this copy of the image is not served from our forum server so don't bother following the url, the real graphic is but due to the nature of our board, i put the example on a separate server).
Users can do a 1 week trial for $1.99 if they want. we pass the user's user_id in the "custom" field of paypal which is passed back to us in the IPN messages.
Our subscription page adjusts itself to the current paying status of the member.
1) if they are not registered or not signed in, it will have links to do so.
2) if they are signed in and not a paying member, it will list the subscription options.
3) if they get to the page again after becoming a paying member, it gives them the option to cancel their membership.
After going to PayPal and completing payment, when you click on the PayPal button to "access subscription" it brings you back and you have instant access to the full forum.
We still have some fine tuning with the querying and display of the transactions for the admins, but our board only opened on Jan 1st (this year) so the log is not huge yet. (we had the idea to start our board on dec 10, phpbb made it very easy to get running, and both of us admins are programmers so we split the custom modding duties, but have used a lot from this site and phpbbhacks.com) IPN implementation and testing took a few nights after work but under a week. The Sneak Peek feature was about 20 hours of coding. Neither of us had ever programmed in PHP before, so a lot of time was just "how do i do x?" and getting familiar with phpBB as a framework and php as a language. both of use had previous SQL experience, though not with mySQL.
We considered using IBill but they want 5x the fees that paypal does and it's required that you cannot have a higher price for ibill transactions to compensate, or to mention the higher fees to users. yuck. their sales dept also sucks, they didn't respond to my emails then sent a letter stating they were waiting to hear back from me. when i responded, they didn't respond to me again!
The whole thing can work without any IPN table at all (which was how we did it at first so we could get up and running asap) and just have email notifications sent the admins, and just have it add/remove users from the usergroup. But I imagine a year down the road, i won't want to search thru IPN emails to figure out what happened to some user claiming he paid for x and didn't get it.
I'd be interested to see how other's have implemented it.