Online Payment With ASP.NET Sites

J

Just Me

Hi,

OK, Ive been asked to provide a public site with a means of selling some
products, I have never done this before, so im a bit of a newbie really.
What I am looking for is a method of acheiving this within the ASP.NET
develpment arena,

Byt which I dont mean that I want to design a shopping cart system, I want a
low impact , low cost if possible way of being able to set up my products
and sell them using a third party like worldpay etc.

I know that there are dummy option button bits of HTML they can give you,
but I want something a bit slicker. In essence, I need to be able to allow
my customer to sell downloadable products on line such as white papers,
reports, e-books etc. Does anyone know of a good method of doing this.


Cheers
 
L

Larry Bud

Hi,

OK, Ive been asked to provide a public site with a means of selling some
products, I have never done this before, so im a bit of a newbie really.
What I am looking for is a method of acheiving this within the ASP.NET
develpment arena,

Byt which I dont mean that I want to design a shopping cart system, I want a
low impact , low cost if possible way of being able to set up my products
and sell them using a third party like worldpay etc.

I know that there are dummy option button bits of HTML they can give you,
but I want something a bit slicker. In essence, I need to be able to allow
my customer to sell downloadable products on line such as white papers,
reports, e-books etc. Does anyone know of a good method of doing this.

I don't see how you can do this without a shopping cart, unless you
plan on a lot of manual processing. I mean, in simplest forms, a user
could send you money via PayPal, then you e-mail him the file.

So what's wrong with a shopping cart? Click on the docs you want,
Check Out, and Pay. Once payment is verified, you can give the user a
temporary download link that contains a ZIP of all the docs he bought.
 
M

Mark Rae [MVP]

I don't see how you can do this without a shopping cart, unless you
plan on a lot of manual processing. I mean, in simplest forms, a user
could send you money via PayPal, then you e-mail him the file.

So what's wrong with a shopping cart? Click on the docs you want,
Check Out, and Pay. Once payment is verified, you can give the user a
temporary download link that contains a ZIP of all the docs he bought.

I agree - a shopping cart is definitely the way to go here...

Not only that, it's what potential customers will be expecting to see, and
are already familiar with...
 
J

Just Me

Who said, I didnt want a shopping cart ????

What I said was I dont want to 'Design' a shopping cart. Im looking for
something what has already been designed but will fit into the asp.net
development aread.

;-)
 
M

Mark Rae [MVP]

What I said was I dont want to 'Design' a shopping cart. Im looking for
something what has already been designed but will fit into the asp.net
development aread.

PayPal has an ASP.NET shopping card, but it's fairly awful...

I designed my own - took about half an hour...
 
J

Just Me

You must feel great being so competent, but it doesent help me much.


Dont worry, I'll research it and find an answer myself.
 
M

Mark Rae [MVP]

You must feel great being so competent, but it doesent help me much.


Didn't mean to sound dismissive - judging from your previous posts in this
newsgroup, you're clearly not a beginner, and this is most definitely not
beyond your abilities in any way...

At a basic level, it is simply a matter of storing a Dictionary<int, int>
object in Session

The first element of the Dictionary is the unique product identifier and the
second is the number of units that the customer has decided to purchase

Starting with that, the rest of it pretty much writes itself...

When the customer adds an item to their cart, it checks whether that product
id already exists in the Dictionary. If no, it adds it with a count of 1. If
yes, it increments the count by 1. Same process but in reverse if the
customer chooses to remove (or decrement the amount) of an item.

The checkout page uses the Session["cart"] object to fetch more detail about
the item(s), and adds stuff like VAT / sales tax, region etc.

When the user clicks the Checkout button, a PayPal form is built in the
background and then the whole thing redirects to the PayPal site, which
takes over from there.
 
J

Just Me

Mark,

Thanks for your reply. I dont actually have an issue with working out how to
select , store, pick etc from a list of choices. Perhaps I could have been
clearer in my question and thinking it through as I write this; undoubtedly
this is true, if I had put more thought into what I was trying to get from
an answer, I would not have left ambiguity in my question and wasted
everyones time including my own, for that I apologise.

I am interested in the building of the html page/form in the background for
submission as you refer to, if you have an example of this, i would be very
grateful, im sure I can work it out myself, but I would nevertheless like to
see how you did it.

Thank you.



Mark Rae said:
You must feel great being so competent, but it doesent help me much.


Didn't mean to sound dismissive - judging from your previous posts in this
newsgroup, you're clearly not a beginner, and this is most definitely not
beyond your abilities in any way...

At a basic level, it is simply a matter of storing a Dictionary<int, int>
object in Session

The first element of the Dictionary is the unique product identifier and
the second is the number of units that the customer has decided to
purchase

Starting with that, the rest of it pretty much writes itself...

When the customer adds an item to their cart, it checks whether that
product id already exists in the Dictionary. If no, it adds it with a
count of 1. If yes, it increments the count by 1. Same process but in
reverse if the customer chooses to remove (or decrement the amount) of an
item.

The checkout page uses the Session["cart"] object to fetch more detail
about the item(s), and adds stuff like VAT / sales tax, region etc.

When the user clicks the Checkout button, a PayPal form is built in the
background and then the whole thing redirects to the PayPal site, which
takes over from there.
 
M

Mark Rae [MVP]

I am interested in the building of the html page/form in the background
for submission as you refer to, if you have an example of this, i would be
very grateful, im sure I can work it out myself, but I would nevertheless
like to see how you did it.

This will only work for PayPal, obviously, but several other payment
gateways have similar mechanisms:

private void BindData()
{
Dictionary<string, byte> dicCart = (Dictionary<string,
byte>)Session["dicCart"];
string strPayPalForm;
DataRow objRow = null;
LinkButton lnkRemove;
decimal curItemTotal = 0;
decimal curSubTotal = 0;
decimal curShipping = 0;
decimal curShippingTotal = 0;
decimal curTotal = 0;

try
{
if(dicCart.Count == 0)
{
tblCart.Visible = false;
ClientScript.RegisterStartupScript(GetType(), "emptyCart",
"alert('There are no items in your shopping
cart');window.location='default.aspx';", true);
}
else
{
tblCart.Visible = true;

strPayPalForm = String.Empty;

strPayPalForm += "<form target=\"paypal\" id=\"frmPayPal\"
action=\"" +
System.Configuration.ConfigurationManager.AppSettings["PayPalURL"] + "\"
method=\"post\">\r\n";
strPayPalForm += "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"
/>\r\n";
strPayPalForm += "\t<input type=\"hidden\" name=\"upload\" value=\"1\"
/>\r\n";
strPayPalForm += "\t<input type=\"hidden\" name=\"business\"
value=\"" +
System.Configuration.ConfigurationManager.AppSettings["PayPalAccount"] + "\"
/>\r\n";
strPayPalForm += "\t<input type=\"hidden\" name=\"currency_code\"
value=\"GBP\" />\r\n";

using (DataSet objDS = new DataSet())
{
objDS.ReadXml(Request.PhysicalApplicationPath +
"\\App_Data\\merch.xml");
DataColumn[] objPK = new DataColumn[1];
objPK[0] = objDS.Tables[0].Columns["id"];
objDS.Tables[0].PrimaryKey = objPK;

int intItem = 1;

foreach (KeyValuePair<string, byte> kvpItem in dicCart)
{
objRow = objDS.Tables[0].Rows.Find(kvpItem.Key);

using (TableRow objTR = new TableRow()) // create a new row
{
// item -----------------------------------------------------
using (TableCell objTD = new TableCell())
{
objTD.Text = objRow["item_type"].ToString();
objTD.HorizontalAlign = HorizontalAlign.Left;
objTR.Cells.Add(objTD);
}

// description ----------------------------------------------
using (TableCell objTD = new TableCell())
{
objTD.Text = objRow["item_description"].ToString();
objTD.HorizontalAlign = HorizontalAlign.Left;
objTR.Cells.Add(objTD);
}
strPayPalForm += "<input type=\"hidden\" name=\"item_name_" +
intItem.ToString() + "\" value=\"" + objRow["item_description"].ToString() +
"\" />\r\n";

// quantity -------------------------------------------------
using (TableCell objTD = new TableCell())
{
objTD.Controls.Add(new LiteralControl(kvpItem.Value.ToString() +
"&nbsp;"));
lnkRemove = (LinkButton)pnlCart.FindControl("lnkRemove_" +
kvpItem.Key);
lnkRemove.Visible = true;
if (kvpItem.Value == 1)
{
lnkRemove.ToolTip = "Remove this item from your shopping cart";
}
else
{
lnkRemove.ToolTip = "Reduce the quantity of this item";
}
objTD.Controls.Add(lnkRemove);
objTD.HorizontalAlign = HorizontalAlign.Right;
objTR.Cells.Add(objTD);
}
strPayPalForm += "<input type=\"hidden\" name=\"quantity_" +
intItem.ToString() + "\" value=\"" + kvpItem.Value.ToString() + "\" />\r\n";

// unit cost ------------------------------------------------
using (TableCell objTD = new TableCell())
{
objTD.Text = objRow["item_cost"].ToString();
objTD.HorizontalAlign = HorizontalAlign.Right;
objTR.Cells.Add(objTD);
}
strPayPalForm += "<input type=\"hidden\" name=\"amount_" +
intItem.ToString() + "\" value=\"" + objRow["item_cost"].ToString() + "\"
/>\r\n";

// total cost -----------------------------------------------
curItemTotal = Convert.ToDecimal(Convert.ToDecimal(kvpItem.Value) *
Convert.ToDecimal(objRow["item_cost"].ToString()));
curSubTotal += curItemTotal;
switch (cmbShipping.SelectedValue)
{
case "1": // UK
{
curShipping = Convert.ToDecimal(objRow["item_ship_uk"].ToString());
strPayPalForm += "<input type=\"hidden\" name=\"shipping_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
if (kvpItem.Value > 1)
{
strPayPalForm += "<input type=\"hidden\" name=\"shipping2_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
}
curShippingTotal +=
Convert.ToDecimal(Convert.ToDecimal(kvpItem.Value) * curShipping);
break;
}
case "2": // EU
{
curShipping =
Convert.ToDecimal(objRow["item_ship_europe"].ToString());
strPayPalForm += "<input type=\"hidden\" name=\"shipping_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
if (kvpItem.Value > 1)
{
strPayPalForm += "<input type=\"hidden\" name=\"shipping2_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
}
curShippingTotal +=
Convert.ToDecimal(Convert.ToDecimal(kvpItem.Value) * curShipping);
break;
}
case "3": // rest of world
{
curShipping =
Convert.ToDecimal(objRow["item_ship_world"].ToString());
strPayPalForm += "<input type=\"hidden\" name=\"shipping_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
if (kvpItem.Value > 1)
{
strPayPalForm += "<input type=\"hidden\" name=\"shipping2_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
}
curShippingTotal +=
Convert.ToDecimal(Convert.ToDecimal(kvpItem.Value) * curShipping);
break;
}
}
using (TableCell objTD = new TableCell())
{
objTD.Text = curItemTotal.ToString("#,##0.00");
objTD.HorizontalAlign = HorizontalAlign.Right;
objTR.Cells.Add(objTD);
}

tblCart.Rows.AddAt(intItem, objTR); // add the row to the table
}
intItem++;
}
}

lblShipping.Text = curShippingTotal.ToString("#,##0.00");
curTotal = curSubTotal + curShippingTotal;
lblTotal.Text = curTotal.ToString("#,##0.00");
strPayPalForm += "<input type=\"button\" value=\"Continue shopping\"
onclick=\"location.href='default.aspx';\" />\r\n";
strPayPalForm += "&nbsp;\r\n";
strPayPalForm += "<input type=\"submit\" value=\"Proceed to checkout\"
onclick=\"return submitPayPal();\" />";

strPayPalForm += "</form>";
((Literal)Master.FindControl("litAdditional")).Text =
strPayPalForm.Replace("\r\n", String.Empty);
}
}
catch (Exception ex)
{
CApplication.GlobalExceptionHandler(ex);
}
}
 
J

Just Me

Many thanks for that.

I will digest it, and attempt to use it.


Regards


Mark Rae said:
I am interested in the building of the html page/form in the background
for submission as you refer to, if you have an example of this, i would
be very grateful, im sure I can work it out myself, but I would
nevertheless like to see how you did it.

This will only work for PayPal, obviously, but several other payment
gateways have similar mechanisms:

private void BindData()
{
Dictionary<string, byte> dicCart = (Dictionary<string,
byte>)Session["dicCart"];
string strPayPalForm;
DataRow objRow = null;
LinkButton lnkRemove;
decimal curItemTotal = 0;
decimal curSubTotal = 0;
decimal curShipping = 0;
decimal curShippingTotal = 0;
decimal curTotal = 0;

try
{
if(dicCart.Count == 0)
{
tblCart.Visible = false;
ClientScript.RegisterStartupScript(GetType(), "emptyCart",
"alert('There are no items in your shopping
cart');window.location='default.aspx';", true);
}
else
{
tblCart.Visible = true;

strPayPalForm = String.Empty;

strPayPalForm += "<form target=\"paypal\" id=\"frmPayPal\"
action=\"" +
System.Configuration.ConfigurationManager.AppSettings["PayPalURL"] + "\"
method=\"post\">\r\n";
strPayPalForm += "\t<input type=\"hidden\" name=\"cmd\" value=\"_cart\"
/>\r\n";
strPayPalForm += "\t<input type=\"hidden\" name=\"upload\" value=\"1\"
/>\r\n";
strPayPalForm += "\t<input type=\"hidden\"
name=\"business\" value=\"" +
System.Configuration.ConfigurationManager.AppSettings["PayPalAccount"] +
"\" />\r\n";
strPayPalForm += "\t<input type=\"hidden\" name=\"currency_code\"
value=\"GBP\" />\r\n";

using (DataSet objDS = new DataSet())
{
objDS.ReadXml(Request.PhysicalApplicationPath +
"\\App_Data\\merch.xml");
DataColumn[] objPK = new DataColumn[1];
objPK[0] = objDS.Tables[0].Columns["id"];
objDS.Tables[0].PrimaryKey = objPK;

int intItem = 1;

foreach (KeyValuePair<string, byte> kvpItem in dicCart)
{
objRow = objDS.Tables[0].Rows.Find(kvpItem.Key);

using (TableRow objTR = new TableRow()) // create a new row
{
// item -----------------------------------------------------
using (TableCell objTD = new TableCell())
{
objTD.Text = objRow["item_type"].ToString();
objTD.HorizontalAlign = HorizontalAlign.Left;
objTR.Cells.Add(objTD);
}

// description ----------------------------------------------
using (TableCell objTD = new TableCell())
{
objTD.Text = objRow["item_description"].ToString();
objTD.HorizontalAlign = HorizontalAlign.Left;
objTR.Cells.Add(objTD);
}
strPayPalForm += "<input type=\"hidden\" name=\"item_name_" +
intItem.ToString() + "\" value=\"" + objRow["item_description"].ToString()
+ "\" />\r\n";

// quantity -------------------------------------------------
using (TableCell objTD = new TableCell())
{
objTD.Controls.Add(new LiteralControl(kvpItem.Value.ToString() +
"&nbsp;"));
lnkRemove = (LinkButton)pnlCart.FindControl("lnkRemove_" +
kvpItem.Key);
lnkRemove.Visible = true;
if (kvpItem.Value == 1)
{
lnkRemove.ToolTip = "Remove this item from your shopping cart";
}
else
{
lnkRemove.ToolTip = "Reduce the quantity of this item";
}
objTD.Controls.Add(lnkRemove);
objTD.HorizontalAlign = HorizontalAlign.Right;
objTR.Cells.Add(objTD);
}
strPayPalForm += "<input type=\"hidden\" name=\"quantity_" +
intItem.ToString() + "\" value=\"" + kvpItem.Value.ToString() + "\"
/>\r\n";

// unit cost ------------------------------------------------
using (TableCell objTD = new TableCell())
{
objTD.Text = objRow["item_cost"].ToString();
objTD.HorizontalAlign = HorizontalAlign.Right;
objTR.Cells.Add(objTD);
}
strPayPalForm += "<input type=\"hidden\" name=\"amount_" +
intItem.ToString() + "\" value=\"" + objRow["item_cost"].ToString() + "\"
/>\r\n";

// total cost -----------------------------------------------
curItemTotal = Convert.ToDecimal(Convert.ToDecimal(kvpItem.Value) *
Convert.ToDecimal(objRow["item_cost"].ToString()));
curSubTotal += curItemTotal;
switch (cmbShipping.SelectedValue)
{
case "1": // UK
{
curShipping =
Convert.ToDecimal(objRow["item_ship_uk"].ToString());
strPayPalForm += "<input type=\"hidden\" name=\"shipping_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
if (kvpItem.Value > 1)
{
strPayPalForm += "<input type=\"hidden\" name=\"shipping2_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
}
curShippingTotal +=
Convert.ToDecimal(Convert.ToDecimal(kvpItem.Value) * curShipping);
break;
}
case "2": // EU
{
curShipping =
Convert.ToDecimal(objRow["item_ship_europe"].ToString());
strPayPalForm += "<input type=\"hidden\" name=\"shipping_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
if (kvpItem.Value > 1)
{
strPayPalForm += "<input type=\"hidden\" name=\"shipping2_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
}
curShippingTotal +=
Convert.ToDecimal(Convert.ToDecimal(kvpItem.Value) * curShipping);
break;
}
case "3": // rest of world
{
curShipping =
Convert.ToDecimal(objRow["item_ship_world"].ToString());
strPayPalForm += "<input type=\"hidden\" name=\"shipping_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
if (kvpItem.Value > 1)
{
strPayPalForm += "<input type=\"hidden\" name=\"shipping2_" +
intItem.ToString() + "\" value=\"" + curShipping.ToString() + "\" />\r\n";
}
curShippingTotal +=
Convert.ToDecimal(Convert.ToDecimal(kvpItem.Value) * curShipping);
break;
}
}
using (TableCell objTD = new TableCell())
{
objTD.Text = curItemTotal.ToString("#,##0.00");
objTD.HorizontalAlign = HorizontalAlign.Right;
objTR.Cells.Add(objTD);
}

tblCart.Rows.AddAt(intItem, objTR); // add the row to the table
}
intItem++;
}
}

lblShipping.Text = curShippingTotal.ToString("#,##0.00");
curTotal = curSubTotal + curShippingTotal;
lblTotal.Text = curTotal.ToString("#,##0.00");
strPayPalForm += "<input type=\"button\" value=\"Continue shopping\"
onclick=\"location.href='default.aspx';\" />\r\n";
strPayPalForm += "&nbsp;\r\n";
strPayPalForm += "<input type=\"submit\" value=\"Proceed to checkout\"
onclick=\"return submitPayPal();\" />";

strPayPalForm += "</form>";
((Literal)Master.FindControl("litAdditional")).Text =
strPayPalForm.Replace("\r\n", String.Empty);
}
}
catch (Exception ex)
{
CApplication.GlobalExceptionHandler(ex);
}
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,992
Messages
2,570,220
Members
46,807
Latest member
ryef

Latest Threads

Top