One button for multiple things to buy

NMBob1
Contributor
Contributor

Hi! I'm working on the website for a club that has a yearly membership. Click one of two PayPal buttons on our webpage and it goes to a PayPal page for "new" or "renew" registration where the person can select a quantity for how many years membership or renewal they want and then pay through their PayPal account or with a credit card through PayPal. That works well.

 

This club puts on a party every year where the registration is per person for either the whole week, or just the weekend. How can I have one "Register" button take them to a PayPal page that shows both registration options with the quantities set to 0 where they can set the quantity of how many people will be signing up for either the whole week or the weekend, and then pay through PayPay or with a credit card (same as above).

 

I didn't notice a way to do it when I was selecting options and getting the copy/paste HTML code for the membership buttons. I don't know any of the terminology...but is this a 'next level up' in PayPal support thing, like to be able to create and save forms on PayPal, instead of just create and save buttons? We don't really need a shopping cart (do we?) and we really don't want them to have to go back and forth if they want to register '2 people for the week and 1 for the weekend', for example.

 

Thanks a bunch! Bob

Login to Me Too
3 REPLIES 3

Anonymous_User
Not applicable

What you have in mind is possible however, I believe you cannot create the code you need using the online button creator.  The online button creator is a great tool for most people but, when your need is outside the box, then you need a custom coded item button.   This usually involves using the "upload" method and a script to manage the logic and pass the end results to the PayPal Checkout Screens.   Using this method the code is not stored on the PayPal servers like it would be if you were creating a basic item button.   Think of this a mini cart application and the first checkout screen you'll see is similar to a Buy Now item button.   Your members will be able to pay with a credit card as a guest or with their PayPal Account so that part should not change.   For learning purposes, check out the example below as it demonstrates the use of the "upload" method and how a script can manage the logic.   Note, this only just way of doing things as there can be many others.

 

<!DOCTYPE html>
<html lang="en">

<head>

<title>Button Upload Example With Script</title>

<!-- START META TAG SECTION -->
<meta charset="utf-8">
<meta name="description" content="">
<meta name="keywords" content="">
<!-- END META TAG SECTION -->


<!-- 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   = "your email address or Merchant ID";  //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 = ""; // place for other PayPal commands - for example: &cpp_header_image=https://www.yourwebsite.com/logo.jpg

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.

// This line controls the pop-up window size and location

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;
}
  }

// To open PayPal Screen on same page use:  if (j > 0) window.open (strn, "_self");  
// Original line:   if (j > 0) window.open (strn, "paypal", winpar);

   if (j > 0) window.open (strn, "_self");
}


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 SAMPLE CODE SECTION -->


<!-- PARAGRAPH 1 -->
Script Examples

<br><br><br>

Sell Tickets Online - High School Alumni Reunion.<br>Uses the Upload Method - Behaves like Buy Now.

<br><br>

<!-- 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><b>Widget High School Class Reunion</b>
</caption>
  <tr>

    <th align="left">Description</th>
    <th>Each</th>
    <th>Quantity</th>
    <th>Total</th>

  </tr>

  <tr>

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

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

  <tr>

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

  <tr>
 
    <td>Book of Memories</td>
    <td align="right">15.00</td>
    <td>
      <input type="text" name="qty20" size="2" />
&nbsp;
      <a href="javascript&colon;
      GetOrder ('id20',
                'Book of Memories',
                15.00);">add</a>
    </td>
    <td>
      <input class="nbor" type="text" name="prc20" 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 -->


<!-- END BUTTON EXAMPLES -->



<!-- END SAMPLE CODE SECTION -->

<br><br><br><br>
<hr align="left" width="50%" noshade>
<br><br>
NOTES:
<br>
Look for this line in the Script:
<br><br>
root.xx_id   = "your email address or Merchant ID";  //live
<br><br>
There you can enter your account email address or Merchant ID

</body>
</html>
Login to Me Too

NMBob1
Contributor
Contributor

Javascript. I know nothing about it, but I'm a programmer. I'll figure it out. How hard can it be? 🙂 Thanks a bunch! Bob

Login to Me Too

NMBob1
Contributor
Contributor

Let's call your solution a browser-side solution. What I'm looking for is a PayPal-side solution. I think I want a shopping cart, but really have no idea. I guess I'll just have to get on the phone, but this is all a GUI thing, should be fun over the phone. Thanks!

 

 

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.