Solved

Auto subscription renewal

Posted on 2010-11-22
4
703 Views
Last Modified: 2012-05-10
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.
0
Comment
Question by:XGIS
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 33

Expert Comment

by:Todd Gerbert
ID: 34190852
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
 
LVL 7

Author Comment

by:XGIS
ID: 34193452
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
 
LVL 33

Accepted Solution

by:
Todd Gerbert earned 500 total points
ID: 34200133
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
 
LVL 7

Author Closing Comment

by:XGIS
ID: 34203439
wonderfull
0

Featured Post

Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
How to leverage one TLS certificate to encrypt Microsoft SQL traffic and Remote Desktop Services, versus creating multiple tickets for the same server.
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

738 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question