There are a few ways to approach it but I’m not aware of an existing solution per se. If it was me I’d do one of two things;
Authenticate the users using RADIUS & MySQL and write a Php script that handles the coupons, creating usernames & passwds at random will be easy, however I think authentication based on MAC addresses might be simpler for the end-user. Then you can setup a DHCP server and a firewall redirect so that unauthenticated users are forced to the webpage where they can get / purchase a coupon.
or
Authenticate the users with a proxy server (password popup prior to getting access to sites other than the site where coupons are available).
I’ve implemented both these solutions before but I prefer the former because it can be done using only php and mysql, the latter on the other hand gets tricky because squid user credentials aren’t stored in mysql so you’ll endup writing / using a PERL API between squid and your php site.