Multiple Items, Multiple Quantities using paypal buttons.

MedatsWebMin
Contributor
Contributor

I hope I have found the correct place to ask this question, and from the suggested topics it may not be possible.   The topics are kinda' old, so I am verifying that it CAN'T be done with buttons.  I am trying to make a paypal button to sell multiple quantities of different priced tickets.  Is this possible or do I need a third party cart?

 

Login to Me Too
5 REPLIES 5

Anonymous_User
Not applicable

You can do what you have in mind however, it will take some custom scripting as the online button creator can only generate the easy stuff.   Below is an example of what can be done outside the box using the "upload" method.   If you're into coding your own stuff, you'll find this stuff kind of fun, if not, there are 3rd services that may be able to meet your needs.  For example, see this one.   There are also specific 3rd party ticket sales services, just Google "selling tickets online".

 

If you want to tinker with the code below - go for it.  In order to test it, you'll need to use your account email address, look for this line of code:

root.xx_id   = "youremail_youremail.com";  //live

Replace yourmail_yourmail.com with your PayPal email address and save, then you can try it.  No need to change anything else at this point. 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Ticket Sales</title>

<!-- Start of Script -->

<script type = "text/javascript" >
var order = new Object();  // object to store order items in
var root  = new Object();  // selection criteria
var on    = true;
var off   = false;
var cntr  = 0;             // items in object
var opts  = 5;             // number of options to allow
var shpr  = function (wt) {return 0;} // what to charge for shipping;
var stxt  = "";            // shipping text
var spos  = -1;            // shipping position selector
var ttax  = 0;             // percent for taxes
var ttxt  = "0";           // tax text
var tpos  = -1;            // tax position selector
var tamt=0,tqty=0,twgt=0,wgt=0,thnd=0;  // totals

root.hamt = 0;     // amount, below which, handling charge applies
root.hand = 0;     // handling charge for orders less than hamt
root.shp  = off;    // shipping selection line
root.tax  = off;    // tax selection line
// place for user-specific options
root.xx_can  = "";   // place for PayPal cancel return path
root.xx_cur  = "USD";// enter default currency code (or null)
root.xx_id   = "youremail_youremail.com";  //live

root.xx_img  = ""; // image URL
root.xx_lc   = "US"; // enter default country code (or null)
root.xx_ret  = ""; // place for PayPal return path
root.xx_sty  = ""; // place for PayPal page style
root.xx_xtra = "&rm=2"; // place for other PayPal commands

function CalcRoot () {  // calc root stuff
  if (root.shp) spos=0; 
  if (root.tax) tpos=0;
}

function DispTots () {  // display totals on the page
var tmp,d;
tmp = 0;
  d = document.orderf;
  d.sub.value = Dollar (tamt);
  d.tot.value = Dollar (tamt  + tmp);
}

function Dollar (val) {     // force to valid dollar amount
var str,pos,rnd=0;
  if (val < .995) rnd = 1;  // for old Netscape browsers
  str = escape (val*1.0 + 0.005001 + rnd);  // float, round, escape
  pos = str.indexOf (".");  // should be one, but OK if not
  if (pos > 0) str = str.substring (rnd, pos + 3);
  return str;               // return valid string
}

function GetOrder (id, des, amt) {  // get all ordered items
var i,nr,val,qty,pos;
var op = new Array ();    // accumulate options here
  tamt=0,tqty=0;   // zero totals
  nr = id.substring (2);  // get number part of ID
  qty = document.orderf["qty" + nr].value;  // get qty

 
  if (isNaN (qty)) {      // test entry
    alert ("That is not a valid number!  Try again.");
    return;
  }
  for (i=1; i<=opts; i++) {     // see if any options
    if (document.orderf["op" + i + nr]) {
      val = document.orderf["op" + i + nr].value;  // get option
      op[i] = val;
      pos  = val.indexOf ("+"); // price increment?
      if (pos > 0) amt = amt + val.substring (pos + 1)*1.0;
      pos  = val.indexOf ("%"); // percent change?
      if (pos > 0) amt = amt + (amt * val.substring (pos + 1)/100.0);
    }
    else op[i] = "";
  }
  document.orderf["prc" + nr].value = Dollar (qty * amt);
  if (cntr == 0) order = new Object (); // zap object
  cntr = cntr + 1;               // bump counter so no zap next time
  order[id] = new Object ();     // create new entry
  for (i=1; i<=opts; i++)        // load options
    if (op[i] != "") des = des + ", OP" + i + "=" + op[i];
  order[id].des = des;           // load up values
  order[id].amt = Dollar (amt);
  order[id].qty = qty;
  for (i in order) {             // calc totals we might use
    qty = order[i].qty*1.0;
    tamt = tamt + order[i].amt * qty;  // total amount
    tqty = tqty + qty;                 // total quantity
  }
  DispTots ();                         // calc totals
}


function SendCart () {  // send the cart to PayPal
var frst = true;  // 1st pass thru items.
var winpar = "width=710,height=390,scrollbars," +
             "location,resizable,status";
//Change the lines for either testing mode (sandbox) or live mode

//var strn   = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_cart" + "&upload=1" + "&business=" + root.xx_id + root.xx_xtra;            
 var strn   = "https://www.paypal.com/cgi-bin/webscr?cmd=_cart" + "&upload=1" + "&business=" + root.xx_id + root.xx_xtra;
 
var i,j=0,des;
  if (root.xx_cur.length > 0)
    strn = strn + "&currency_code=" + root.xx_cur;
  if (root.xx_lc.length > 0)
    strn = strn + "&lc=" + root.xx_lc;
  if (root.xx_can.length > 0)
    strn = strn + "&cancel_return=" + root.xx_can;
  if (root.xx_ret.length > 0)
    strn = strn + "&return=" + root.xx_ret;
  if (root.xx_sty.length > 0)
    strn = strn + "&page_style=" + root.xx_sty;
  if (root.xx_img.length > 0)
    strn = strn + "&image_url=" + root.xx_img;
  if (tpos > 0) strn = strn + "&tax_cart=" + Dollar (tamt*ttax/100);
  for (i in order) {  // send all valid data
    if (order[i].qty > 0) {
      j = j + 1;
      des = order[i].des;
      strn = strn + "&item_name_"    + j + "=" + escape (des) +
                    "&item_number_"  + j + "=" + i +
                    "&quantity_"     + j + "=" + order[i].qty +
                    "&amount_"       + j + "=" + order[i].amt;
}
  }
  if (j > 0) window.open (strn, "paypal", winpar);
}


function SetShp (obj) {  // set shipping on user selection
  shpr = function (wt) {return 0;}  // zap it
  spos = obj.selectedIndex;  // which option selected
  stxt = obj.options[spos].text;
  // set various shipping functions.
  if (spos == 1) shpr = function (wt) {return 0;}
  if (spos == 2) shpr = function (wt) {return 4.95;}
  if (spos == 3) shpr = function (wt) {return 10;}
  if (spos == 4) shpr = function (wt) {return wt * 2.50;}
  DispTots ();
}

function SetTax (obj) {
  tpos = obj.selectedIndex;  // which option selected
  ttxt = obj.options[tpos].text;
  ttax = obj.options[tpos].value*1.0;
  DispTots ();
}
</script>

<!-- End of Script -->

</head>

<body>

<!-- Start of Form -->

<form name="orderf" id="orderf" 
  method="post" action="javascript&colon;void 0;">
<table cellspacing = "0"
       cellpadding = "4"
       border  = "3"
       frame   = "box"
       rules   = "all"
       summary = "Ticket Reservations">
<caption>Ticket Sales
</caption>
  <tr>

    <th align="left">Description</th>
    <th>each</th>
    <th>Quantity</th>
    <th>Tot</th>

  </tr>

  <tr>

    <td>Adults</td>
    <td align="right">$15.00</td>
    <td>
      <input type="text" name="qty10" size="2" />
&nbsp;
      <a href="javascript&colon;
      GetOrder ('id10',
                'Adults',
                15.00);">add</a>
    </td>

    <td>
      <input class="nbor" type="text" name="prc10" size="6" value="0.00" />
    </td>
  </tr>

  <tr>

    <td>Children</td>
     <td align="right">$10.00</td>
    <td>
      <input type="text" name="qty15" size="2" />
&nbsp;
      <a href="javascript&colon;
      GetOrder ('id15',
                'Children',
                 10.00);">add</a>
    </td>
    <td>
      <input class="nbor" type="text" name="prc15" size="6" value="0.00" />
    </td>
  </tr>

  <tr>
    <td align="right" colspan="6">
Subtotal = 
      <input class="nbor" type="text" name="sub" size="10" value="0.00" />
    </td>
  </tr>





  <tr>
    <td align="right" colspan="6">
      <input type    = "button" 
             value   = "Reset"
             onclick = "cntr = 0;  // zap cart
                        shpr = function (wt) {return 0;}
                        if (root.shp) spos = 0;
                        if (root.tax) tpos = 0;
                        this.form.reset();" />
      &nbsp; &nbsp; 
      <input type    = "button"
             value   = "Checkout"
             onclick = "SendCart ();" />
      &nbsp; &nbsp;
Total 
<script type="text/javascript">
  if (root.xx_cur.length > 0)
    document.writeln (" (", root.xx_cur, ")");
</script>
 =  
      <input class="nbor" type="text" name="tot" size="10" value="0.00" />
    </td>
  </tr>
</table>
</form>

<!-- End of Form -->

</body>
</html>

 Post edited by Moderator to comply with Community guidelines.

Login to Me Too

ChrisJC
Contributor
Contributor

Thanks for posting this. I think this will help achieve the results we are trying to accomplish. One quick question; is there a way to have the transaction not require a PayPal account to complete? 

 

Thank you.

Login to Me Too

ChrisJC
Contributor
Contributor

Is there a way to not have the checkout process open a new window? It seems like when this happens the return path doesn't work.

 

Thank You.

Login to Me Too

MedatsWebMin
Contributor
Contributor

Dear GreenGear, thank you for your suggestion.  My Java skills are poor at best, but I will attempt to muddle through. 

1.)  I would like to know the 3rd party service you wanted to recommend (I think you forgot to provide the link).  

If you're into coding your own stuff, you'll find this stuff kind of fun, if not, there are 3rd services that may be able to meet your needs.  For example, see this one."

2.)  Is it appropriate in this forum to ask for help tweaking java code? If it is, here is my attempt:  http://medats.org.uk/events/paypalquantitytest/ Password is: Quantity

2.a.)  If not can you give me a pointer to a good Java forum?

3.)  Correct me if I am wrong but  there is a lot more to tweaking the java code you provided right?  I couldn't get it to work "as is."

Thanks Saragrace

 

 

Login to Me Too

Anonymous_User
Not applicable

Sorry you're having issue ... the example I provided will work as is.   All you need to do is copy the code as is, open Notepad and paste the code into a blank page.  Then save the file with the extension of .htm or .html , i.e., "tests.html".   Suggest simply saving the file to an empty directory on your hard drive.  I usually work with a directory called Test on my system.   Once you have the file saved, just use Notepad to edit the one line where the email address is needed, then save.  From there you can open or run the example via your web browser.  No other changes are needed to try the example.

 

Unfortunately learning to tweak scripts is mostly trial and error unless you have developer help or some training.  I've done a lot of crash and burn learning but, sometimes that's not a bad thing.   Scripts are a bit out of the scope of this community, if you can find someone local to help, that's an option.  And there are online ways to learn too - for example, here's one.

 

As for a 3rd party service, this site may be able provide some options. 

Login to Me Too

Haven't Found your Answer?

It happens. Hit the "Login to Ask the community" button to create a question for the PayPal community.