Auto subscription renewal

Hello Experts,

i am currently commissioned to build a subscription management system and I am not sure how to manage subscription renewals, notification and auto payment any assistance in detail will be appreciated.
LVL 7
XGISAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Todd GerbertConnect With a Mentor IT ConsultantCommented:
Well, like I said - you'll probably write a program that runs as a Windows Service, or runs as a Scheduled Task, to poll the database.  That program can then process the payment, notify the customer via e-mail of renewal status, perhaps advise them a week ahead of time it's about to auto-renew, etc.

You may be better off asking more specific questions as you actually encounter issues...your project would seem to involve several different issues, not all of which I can help you with.  Searching Experts-Exchange or Google would likely get you most, if not all, the answers you need.

1. How can I securely collect and store customers' payment information (credit card/PayPal/etc) from an ASP.Net application?

2. How can I query a SQL database at regular intervals and get records based on a DateTime column?

3. How can I automatically process a credit card payment using stored information, without human intervention, from a service using C#?

4. How can I send e-mail, through an SMTP server for example, from a .Net application?

These seem to be the questions I think you need to ask, and think you'll find someone has already answered these very questions here on EE; 2 and 4 are easy and I can help with that quickly.

2: Write a program in C# to do the work.  Use some mechanism, such as the Windows Task Scheduler, to run the program at regular intervals.
4: Use System.Net.Mail.SmtpClient and System.Net.Mail.MailMessage to send e-mails via an SMTP server.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Net;
using System.Net.Mail;

namespace ConsoleApplication1
{
	class Program
	{
		static void Main(string[] args)
		{
			// Connect to the SQL server
			using (SqlConnection cnx = new SqlConnection("Your Connection String"))
			{
				cnx.Open();

				// Get a SqlCommand object for this connection
				using (SqlCommand cmd = cnx.CreateCommand())
				{
					// Set the SQL query
					cmd.CommandText = "SELECT * FROM Subscriptions WHERE Expires <= @CurrentDate AND AutoRenew = true";
					// Set the value of the @CurrentDate parameter to today's date
					cmd.Parameters.AddWithValue("@CurrentDate", DateTime.Today).DbType = DbType.Date;

					// Create the SMTP client we'll use to send email
					using (SmtpClient smtp = new SmtpClient("your.email.server.com"))
					{
						// Set the logon username/password for the SMTP server (if needed)
						smtp.Credentials = new NetworkCredential("username", "Password");

						// Execute the command, and get a SqlDataReader object
						using (SqlDataReader reader = cmd.ExecuteReader())
						{
							// Loop through each record, process payment, send email
							if (ProcessPayment(reader["CreditCardNumber"].ToString()))
								SendEmail(smtp, reader["EmailAddress"].ToString(), "donotreply@yourdomain.com", "Payment Successful", "Your subscription auto-renewed.", false);
							else
								SendEmail(smtp, reader["EmailAddress"].ToString(), "donotreply@yourdomain.com", "Payment Failed", "Your subscription has expired.", false);
						}
					}
					
				}

				cnx.Close();
			}
		}

		static void SendEmail(SmtpClient smtpClient, string toAddress, string fromAddress, string subject, string message, bool html)
		{
			// Create an email message, set some properties, and use the
			// smtp client that was passed in to send it
			using (MailMessage email = new MailMessage(fromAddress, toAddress))
			{
				email.Body = message;
				email.BodyEncoding = Encoding.UTF8;
				email.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
				email.IsBodyHtml = html;
				email.Priority = MailPriority.High;
				email.Subject = subject;
				email.SubjectEncoding = Encoding.UTF8;
			}
		}

		static bool ProcessPayment(string cardNo)
		{
			// Process the payment here, return true if successful
			// or false otherwise
			return true;
		}
	}
}

Open in new window

0
 
Todd GerbertIT ConsultantCommented:
That's a fairly broad question on a somewhat involved task, and "assistance in detail" for such a question is probably beyond the scope of a forum such as this. ;)

But, to offer less detail and more of an overview...

Subscriptions will need to be stored in a database.  A simple Windows service, or scheduled task, to query the database daily WHERE Expires < TODAY() AND AutoRenew = True.  Then process the payment, and if successful update the database with the new subscription details; the System.Net.Mail classes can provide you the means to notify the customer.
0
 
XGISAuthor Commented:
hello tqerbert:

Thanks for your response, I understand that data is stored in a database I have got the sql 2008 schema in place, I was uncertain as to when the subscription expires how does the payment take place, and how is the email sent?? is the email sent via SQL or does a scheduled task run the classes in the website?? and how does the payment take place automatically until the client unsubscribes?
0
 
XGISAuthor Commented:
wonderfull
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.