[ic] Using Paypal for Pyment method?

Duane Hinkley duane at dhwd.com
Thu Dec 23 09:50:52 EST 2004


Rick Hanzlik wrote:

>I know this is probably an insult to everyone else that uses interchange
>but because my on-line sales are such that I cannot justify the expense
>of a merchant account I have choosen to use Paypal as my method of
>online payment.Has anyone used this before and is the a gateway or
>module that I can add to my interchange in order to use this method of
>payment? 
>
>
>
>
>Rick Hanzlik
>Comp-U-Sell
>cvc505 at compusell.biz
>http://www.compusell.biz
>http://www.specialty-art.com
>_______________________________________________
>interchange-users mailing list
>interchange-users at icdevgroup.org
>http://www.icdevgroup.org/mailman/listinfo/interchange-users
>
>  
>
Rick,

Here's how I got PayPal to work:


This PayPal modification adds PayPal to the payment options of the 
checkout page.  On checkout the customer fills out the Interchange 
checkout form and selects PayPal.  After they click Place Order, the 
confirmation receipt page has a note to them that to complete the 
purchase, they must follow the link to PayPal.

The link feeds the customer information, the order total and order 
number to PayPal.  Once the customer completes the PayPal payment, 
you'll recieve a confirmation from PayPal and you can ship the items.

The files to change to enable PayPal are checkout.html, proviles.order, 
receipt.html and variable.txt.

My versions of the pages are listed below. 

The checkout.html page below has some additional mods including a mod 
that removes the login option at the top of the page.  It also includes 
a mod to only allow ordering a item that has options only if that item 
is on hand.  So this page may not work in your instance.  I'll let you 
know the lines that were changed for the PayPal part so you can change 
your own checkout.html if you prefer.

pages/ord/checkout.html
===============================================================================
[comment]
ui_template: yes
ui_template_name: noleft
[/comment]

[tmp page_title]__COMPANY__ -- Check Out[/tmp]
[tmp members_only][/tmp]

[control reset=1]

  [control-set]
    [component]none[/component]
  [/control-set]

[control reset=1]

@_NOLEFT_TOP_@

<!-- BEGIN CONTENT -->
[perl tables="country products"]
    my $db = $Db{country} or return;
 
    my $domestic = $Variable->{DOMESTIC_SHIPPING} || 'US CA';
    $domestic =~ s/\W+/ /g;
    my @dom = grep /\S/, split /\s+/, $domestic;
    my %dom;
    @dom{@dom} = @dom;
    my $modes;
    if($Values->{country}) {
    $modes = tag_data('country', 'shipmodes', $Values->{country});
    @modes = grep /\S/, split /[\s,\0]+/, $modes;
    }
   
    delete $Scratch->{only_download};
    my $hardgoods;
    for(@$Items) {
    next if tag_data('__ProductFiles_0__', 'download', $_->{code});
    $hardgoods = 1;
    }

    ! $hardgoods and $Scratch->{only_download} = 1;

    return unless @modes;
    my %modes;
    @modes{@modes} = @modes;

    if(! $modes{$Values->{mv_shipmode}}) {
        $Values->{mv_shipmode} = shift @modes;
    }
    return;
[/perl]

<table width="95%">
<tr>
  <td align="left" width="100%">


    <SCRIPT>    // JavaScript Form Validation Demo    // by Paul Colton
    function check_tax(form) {
        // Make sure the email field is not blank
        var foundState = false;
        var ch = form.state.value;
        ch = ch.toUpperCase();
        [loop list="__TAXAREA__"]
        if(ch == "[loop-code]") {
            alert("You will be charged [currency][fly-tax 
[loop-code]][/currency] sales tax\nsince you are shipping to 
[loop-code]. Click Recalculate to see the amount in your total.");
            foundState = true;
        }
        [/loop]
        return foundState;
    }
    </SCRIPT>

    <FORM ACTION="[process secure=1]" METHOD="POST" name=checkout>
    <INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">

    [if type=explicit compare="[error all=1 show_var=1 keep=1]"]
    <P>
    <B>There were errors in your last submission:<br>
    <blockquote>
    <FONT color="__CONTRAST__">
        [error all=1 keep=1 show_error=1 show_label=1 joiner="<br>"]
    </font>
    </blockquote>
    </p>
    <p>
    The areas you need to correct are shown in
    <FONT color="__CONTRAST__">this color</FONT> below.</B>
    </p>
    [/if]

    <INPUT TYPE=hidden NAME=mv_doit VALUE=refresh>
    <INPUT TYPE=hidden NAME=mv_nextpage VALUE="ord/checkout">

    [comment] Order routes in catalog.cfg [/comment]

    <INPUT TYPE=hidden NAME=mv_order_route   
VALUE="[either]__ORDER_ROUTES__[or]log main copy_user[/either]">
    <INPUT TYPE=HIDDEN NAME=mv_check    VALUE="Save_database">

    [if session logged_in]
      [set Save_database]
      [if cgi mv_todo ne submit]
      [calc] Log("Saving userdb in mv_check.")[/calc]
      [userdb save]
      [/if]
      [/set]
    [/if]
   
    <table align="center">
    <tr>
      <td align="center">
    Please verify the information below and click the <b>"Place
        Order"</b> button to process your order.
      </td>
    </tr>
    <tr>
      <td align="center" width="100%">
        <br>
        <table cellspacing="0" cellpadding="5" border="0" width="100%">
        <TR class="contentbar2">
          <td class="contentbar2">&nbsp;<b>Remove</b></td>
          <td class="contentbar2" align="center"><b>SKU</b></td>
          <td class="contentbar2"><b>Description</b></td>
          <td class="contentbar2"><b>Quantity</b></td>
          <td class="contentbar2" align="center"><b>Price</b></td>
          <td class="contentbar2"><b>Extension&nbsp;</b></td>
        </TR>
        <TBODY>

        [if items]
        [then]
        [item-list modular=1]

    <TR class="[item-alternate 
2]maincontent[else]contentbar1[/else][/item-alternate]" valign="top">
      <TD align=center valign=top>
        <INPUT TYPE=checkbox NAME="[quantity-name]" 
onClick="this.form.action='[process-target]', this.form.submit()" VALUE=0>
       </TD>
      <TD><b>[item-sku]</b></TD>
      <TD>[page [item-sku]]<b>[item-data products description]</b></a>

        [if scratch dealer]
        [if-item-data pricing sku]
          <BR>[page quantity [item-code]]
          QUANTITY PRICING</A>
         [/if-item-data]
        [/if]

        [if-item-data options o_enable]
            [if-item-data !options o_modular]


            [query sql="select o_group from options where sku = 
'[item-sku]' AND o_matrix IS NULL" list=1]
            <br><b>[sql-pos 0]: </b>
            [/query]

            [set item_on_hand]N[/set]
            [query sql="
                 
                 SELECT code,description
                 FROM options, inventory
                 WHERE options.sku        = '[item-sku]'
                   AND inventory.sku      = options.code
                   AND inventory.quantity > 0
                   AND price > 0 "
                 type=list
            ]
              <select name="mv_sku[item-modifier mv_ip]">
              [list]
                [set item_on_hand]Y[/set]
                        [set saved_item_code][item-code][/set]
                            [if scratch saved_item_code eq '[sql-code]']
                    <option  VALUE="[sql-code]" selected >
                [else]
                    <option VALUE="[sql-code]"  >
                [/else]
                [/if]
                [sql-param description]</option>
                [set option_label] [/set]
              [/list]
              </select>
            [/query]



            [/if-item-data]
        [/if-item-data]

        [if-item-field weight]
        [seti weight][summary amount=`[item-quantity] * [item-field 
weight]`][/seti]
        [/if-item-field]
      </TD>
      <TD ALIGN=CENTER valign=top>

        [seti max_qty][data inventory quantity [item-code]][/seti]
       
        [if scratch max_qty < [item-quantity]]
           [set qty_adjusted]Y[/set]
           <INPUT  TYPE=text NAME='[quantity-name]' VALUE='[scratch 
max_qty]'  onchange='submit();' SIZE=3>
           <br><font face=verdana size=-2 color=red><b>Only [scratch 
max_qty]<br>on hand.<br>Qty Changed.</b></font>
        [else]
           [set qty_adjusted]N[/set]
           <INPUT  TYPE=text NAME='[quantity-name]' 
VALUE='[item-quantity]' onchange='submit();' SIZE=3>
        [/else]
        [/if]

       </TD>
      <TD ALIGN=RIGHT>
        [discount-price]
        [if discount [item-code]]<BR>Item is discounted [item-discount][/if]
      </TD>
      <TD ALIGN=RIGHT>[item-subtotal]</TD>
        </TR>

    [if session logged_in]
        <TR class="[item-alternate 
2]maincontent[else]contentbar1[/else][/item-alternate]">
          <TD ALIGN=CENTER COLSPAN=2 VALIGN=TOP>
        [if value separate_addresses]
        [page href="@@MV_PAGE@@" form="
            separate_addresses=0
        mv_action=return
        "]Same shipping address</A><br>
        [page href="ord/basket" form="edit_addresses=1"]Edit address</A><br>
        [page href="ship_addresses" form="ui_return_to=@@MV_PAGE@@"]Add 
address</A>
        [else]
        [page href="@@MV_PAGE@@" form="
        separate_addresses=1
        mv_action=return
        "]Separate shipping</A>
        [/else]
        [/if]
          </td>
          <TD COLSPAN=4 VALIGN=TOP>
        [if value separate_addresses]
        <PRE>[item-modifier mv_ad]</pre>
        [/if]&nbsp;
          </td>
        </TR>
        [/if]

        [/item-list]
        [/then]
        [else]
        <TR>
      <TD ALIGN=CENTER COLSPAN=6 class="contentbar2">
            No items at the moment.
          </TD>
        </TR>

    [/else]
    [/if]
        </table>

        <br>

        <table border="0" cellspacing="0" cellpadding="0" width="50%">
        <TR>
          <td align="left">
            [if items]

               [if scratch qty_adjusted eq 'Y']
                  <font face=verdana size=-2 color=red>
                  <b>Quantity adjusted<br>
                  to match number<br>
                  on hand. Click<br>
                  recalculate for<br>
                  correct total.</b>
                  </font><p>
               [/if]

            <INPUT TYPE=image VALUE="Refresh" 
src="__THEME_IMG_DIR__recalculate_button.gif" border=0>
            [/if]
          </td>
          <td align="right">
            <table align="center" cellspacing="0" border="0">
            <tr>
              <TD ALIGN=left class="contentbar1">Subtotal: </TD>
              <TD ALIGN=RIGHT class="contentbar1">[subtotal]</TD>
            </TR>
            <TR>
              <TD ALIGN=left class="contentbar1">Sales Tax:</TD>
              <TD ALIGN=RIGHT class="contentbar1">[salestax]</TD>
            </TR>
            <TR>
              <TD ALIGN=left class="contentbar1">Shipping:</TD>
              <TD ALIGN=RIGHT class="contentbar1">[shipping]</TD>
            </TR>
            [if value mv_handling]
            <TR>
              <TD ALIGN=left class="contentbar1">Handling:</TD>
              <TD ALIGN=RIGHT class="contentbar1">[handling]</TD>
            </TR>
            [/if]
            <TR>
              <TD ALIGN=left class="contentbar2">TOTAL:</TD>
              <TD ALIGN=RIGHT class="contentbar2">[total-cost]</TD>
            </tr>
            </table>
          </td>
        </tr>
        </table>

      </td>
    </tr>

    <tr>
      <td>
    <br>
        <table cellspacing="0" cellpadding="0">
    <tr>
      <td>
        <table border="0" align="center" cellspacing="0">
        <tr><td colspan="4">&nbsp;</td></tr>
        <tr class="contentbar2">
          <td class="contentbar2">
            <b>&nbsp;Shipping Address<b>
          </td>
          <td class="contentbar2"><i>(primary)</i></td>
          <td class="contentbar2">&nbsp;</td>
          <td class="contentbar2">&nbsp;</td>
        </tr>
        <tr><td colspan="4" class="contentbar1">&nbsp;</td></tr>
        <tr>
          <td align=right class="contentbar1">
        [error name=fname std_label="First Name" required=1]
          </td>
          <td align=left class="contentbar1">
        <INPUT TYPE=text NAME=fname VALUE="[value fname]" size="20" 
maxlength="20">
          </td>
          <td align="right" class="contentbar1">[error name=lname 
std_label="Last Name" required=1]</td>
          <td align="left" class="contentbar1"><INPUT TYPE=text 
NAME=lname VALUE="[value lname]" size="20"></td>
        </tr>
        <tr>
          [if scratch dealer]
          <td align="right" class="contentbar1">[error name=company 
std_label=Company required=1]
          [else]
          <td align="right" class="contentbar1">Company
          [/else]
          [/if]
          </td>
          <td align="left" class="contentbar1">
        <INPUT TYPE=text NAME=company VALUE="[value company]" size="20" 
maxlength="40">
          </td>
          <td class="contentbar1">&nbsp;</td>
          <td class="contentbar1">&nbsp;</td>
        </tr>
        <tr>
          <td align="right" class="contentbar1">[error name=address1 
std_label=Address required=1]
        </td>
        <td align="left" colspan=3 class="contentbar1">
          <INPUT TYPE=text NAME=address1 VALUE="[value address1]" 
size="40" maxlength="64">
           </td>
      </tr>
      <tr>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1" align="left" colspan=3>
          <INPUT TYPE=text NAME=address2 VALUE="[value address2]" 
size="40" maxlength="64">
        </td>
      </tr>
      <tr class="contentbar1">
        <td align="right" class="contentbar1">
          [error name=city std_label="City" required=1]
        </td>
        <td class="contentbar1">
          <INPUT TYPE=text NAME=city VALUE="[value city]" size="20" 
maxlength="20">
        </td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      <tr>
        <td class="contentbar1" align=right>[error name=state 
std_label="State/Province" required=1]</td>
        <td align="left" class="contentbar1">
          [loop search="
        fi=state.txt
        sf=country
        se=[default country US]
        rf=state,name,country
        tf=sorder,name
        ml=100
          "
          option=state]
          [on-match]<SELECT onChange="check_tax(this.form)" 
NAME=state>[/on-match]
          [list]
          [loop-change 1][condition][loop-param country][/condition]
          <OPTGROUP LABEL="[data table=country col=name key='[loop-param 
country]']">
          [/loop-change 1]
          <OPTION VALUE="[loop-code]">[loop-pos 1]
          [/list]
          [on-match]</SELECT>[/on-match]
          [no-match]<INPUT NAME=state VALUE="[value state]" 
SIZE=20>[/no-match]
          [/loop]
        </td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          [error name=zip std_label="Zip/Postal Code" required=1]
        </td>
        <td class="contentbar1">
          <INPUT TYPE=text NAME=zip VALUE="[value zip]" size="10" 
maxlength="10" onChange="this.form.submit()">
        </td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          [error name=email std_label="Email Address" required=1]
        </td>
        <td class="contentbar1">
          <INPUT TYPE=text NAME=email VALUE="[value email]" size="30">
        </td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          Country
        </td>
        <td colspan="3" class="contentbar1">
          [if value country =~ /(^$|US|CA)/]
          <SELECT NAME=country onChange="this.form.submit()">
          <OPTION VALUE="US"> United States
          <OPTION [selected country CA] VALUE="CA"> Canada
          <OPTION VALUE="JP"> Other
          </SELECT>
          [else]
          <SELECT onChange="this.form.submit()" NAME=country>
          [loop option=country search="
        ra=yes
        fi=country
        st=db
        rf=code,name
        ml=1000
        tf=name
          "]
          <OPTION VALUE="[loop-code]"> [loop-data country name]
          [/loop]
          </SELECT>
          [/else]
          [/if]
          <small>(will update display)</small>
        </td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          [error name=phone_day std_label="Daytime Phone" required=1]
        </td>
        <td class="contentbar1">
          <INPUT TYPE=text NAME=phone_day VALUE="[value phone_day]" 
size="12" maxlength="20">
        </td>
        <td align="right" class="contentbar1">
          [error name=phone_night std_label="Evening Phone"]
        </td>
        <td align="left" class="contentbar1">
          <INPUT TYPE=text NAME=phone_night VALUE="[value phone_night]" 
size="12" maxlength="20">
        </td>
      </tr>
      [if session ship_message]                             
      <tr>
        <td class="contentbar1">&nbsp;</td>
        <td colspan="3" class="contentbar1">
          <B>Note:</B> [data session ship_message]
        </td>
      </tr>
      [/if]                             
      <tr>
        <td align="right" class="contentbar1">
          <b>Shipping method</b>
        </td>
        <td colspan="3" class="contentbar1">
          <SELECT NAME=mv_shipmode onChange="this.form.submit()">
          [shipping
            label=1
            mode="[data table=country key='[default country US]' 
col=shipmodes]"
              ]
          </SELECT>
        </td>
      <tr>
      </tr>
        <td align="right" class="contentbar1">
            <b>Insurance:</b>
        </td>
        <td colspan="3" class="contentbar1">
        &nbsp;<b>Yes:</b><INPUT TYPE="radio" 
onclick="this.form.submit();" name="mv_handling" VALUE="USPSInsurance" 
[checked name="mv_handling" value="USPSInsurance"]>
        &nbsp;<b>No:</b><INPUT TYPE="radio" 
onclick="this.form.submit();" name="mv_handling" VALUE="handling" 
[checked name="mv_handling" value="handling" default=1]>&nbsp;&nbsp;
        </td>
      </tr>
      <tr>
        <td class="contentbar1">&nbsp;</td>
        <td colspan="3" class="contentbar1">
          <i>We need the <b>bold fields</b> to process your order</i>
        </td>
      </tr>
      <tr>
          <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
        <tr class="contentbar2">
        <td class="contentbar2">Mailing Status</td>
        <td colspan=3 class="contentbar2">&nbsp;</td>
        </tr>
        <tr>
        <td align="center" valign="middle" class="contentbar1">
          <SELECT NAME=email_copy>
          <OPTION VALUE="1">Yes
          <OPTION [selected name=email_copy value=0] VALUE="0">No
          </SELECT>
        </td>
        <td class="contentbar1"><B>Send an email copy of my receipt</B></td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
          </tr>
          <tr>
        <td align="center" valign="middle" class="contentbar1">
          &nbsp;
          [perl tables="__UI_META_TABLE__ mv_metadata"]
          return;
              [/perl]
          [input-filter name=mail_list op=null_to_space][/input-filter]
          [display table=userdb type=multiple column=mail_list 
key="[data session username]"]
        </td>
        <td class="contentbar1"><B>Mail lists (if any)</B></td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      </table>
    </td>
      </tr>
      </table>

      <p>&nbsp;</p>

      <table cellspacing="0" cellpadding="0">
      <tr>
        <td>
        <table border="0" cellspacing="0" cellpadding="0" align="center">
      <tr class="contentbar2">
        <td colspan="2" class="contentbar2"><b>&nbsp;Billing Address</b> 
- <i>If different than above</i></td>
        <td class="contentbar2">&nbsp;</td>
        <td class="contentbar2">&nbsp;</td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          <b>First Name</b>
        </td>
        <td align="left" class="contentbar1">
          <INPUT TYPE=text NAME=b_fname VALUE="[value b_fname]" 
size="20" maxlength="20">
        </td>
        <td class="contentbar1"><b>Last Name</b></td>
        <td align="left" class="contentbar1">
          <INPUT TYPE=text NAME=b_lname VALUE="[value b_lname]" size="20">
        </td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          <b>Company</b>
        </td>
        <td align="left" class="contentbar1">
          <INPUT TYPE=text NAME=b_company VALUE="[value b_company]" 
size="20" maxlength="44">
        </td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          <b>Address</b>
        </td>
        <td align="left" colspan=3 class="contentbar1">
          <b>
          <INPUT TYPE=text NAME=b_address1 VALUE="[value b_address1]" 
size="64" maxlength="64">
          </b>
        </td>
      </tr>
      <tr>
        <td class="contentbar1">&nbsp;</td>
        <td align="left" colspan=3 class="contentbar1">
          <b>
          <INPUT TYPE=text NAME=b_address2 VALUE="[value b_address2]" 
size="64" maxlength="64">
          </b>
        </td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          <b>City</b>
        </td>
        <td class="contentbar1">
          <b>
          <INPUT TYPE=text NAME=b_city VALUE="[value b_city]" size="20">
          </b>
        </td>
        <td align="right" class="contentbar1"><b>State/Province</b></td>
        <td class="contentbar1">
          <b>
          <INPUT TYPE=text NAME=b_state VALUE="[value b_state]" size="5" 
maxlength="5">
          </b>
        </td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          <b>Zip/Postal Code </b>
        </td>
        <td class="contentbar1">
          <b>
          <INPUT TYPE=text NAME=b_zip VALUE="[value b_zip]" size="10" 
maxlength="10">
          </b>
        </td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      <tr>
        <td align="right" class="contentbar1">
          <b>Country</b>
        </td>
        <td class="contentbar1">
          <INPUT TYPE=text NAME=b_country VALUE="[value b_country]" 
size="10" maxlength="10">
        </td>
        <td class="contentbar1">&nbsp; </td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      <tr>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">&nbsp;</td>
      </tr>
      <tr class="contentbar2">
        <td class="contentbar2">Payment Method</td>
        <td colspan=3 class="contentbar2">&nbsp;</td>
      </tr>
      <tr>
        <td colspan=4 class="contentbar1">&nbsp;</td>
      </tr>                             
      <tr>
        <td class="contentbar1">&nbsp;</td>
        <td class="contentbar1">
          <SELECT NAME="payment_method" onChange="this.form.submit()">
          [if variable CREDIT_CARDS_ACCEPTED]
          <option [selected payment_method credit] value="credit">Credit 
Card
          [/if]
          [if variable CHECK_ACCEPTED]
          <option [selected payment_method check] value="check">Online Check
          [/if]
          [if variable PO_ACCEPTED]
          <option [selected payment_method po] value="po">Company P.O.
          [/if]
          [if variable POSTAL_ACCEPTED]
          <option [selected payment_method postal] value="postal">Postal 
Billing
          [/if]
          [if variable COD_ACCEPTED]
          <option [selected payment_method cod] value="cod">C.O.D.
          [/if]
          [if variable PAYPAL_ACCEPTED]
          <option [selected payment_method paypal] value="paypal">PayPal
          [/if]
          </SELECT>
            </td>
        <td colspan="2" class="contentbar1">
          (will update display)
        </td>                             
          </tr>
          <tr>
            <td class="contentbar1" colspan="4">&nbsp;</td>
          </tr>
          </table>
                           
        </td>
      </tr>
      </table>                       

      [if !value payment_method]
      [or value payment_method eq credit]
      [then]

      <input type=hidden name=mv_order_profile value=credit_card>
                           
      <p>&nbsp;</p>

      <!--- credit card information --->
      <table cellspacing=0 cellpadding="0">
      <tr>
        <td>
      <table border=0 cellspacing=0 cellpadding=4 align=center>
      <tr>
        <td colspan="2" class="contentbar2">
          <b>
              [error std_label="Credit Card Information" 
name=mv_credit_card_valid]
          [if variable MV_DEMO_MODE]
          <BR>
          (test number <A HREF="javascript:void 0" 
onclick="checkout.mv_credit_card_number.value='4111 1111 1111 1111'; 
return false;">4111 1111 1111 1111</A>)[/if]
          </b>
        </td>
        <td class="contentbar2">
          [calc]
        my $accepted = $Variable->{CREDIT_CARDS_ACCEPTED};
        my (@out);
        my (@cc);
        my $out;
        push @cc, 'visa' if $accepted =~ /visa/;
        push @cc, 'mc' if $accepted =~ /mc/;
        push @cc, 'disc' if $accepted =~ /discover/;
        push @cc, 'amex' if $accepted =~ /amex/;
        for (@cc) {
          push @out, qq{<IMG SRC="small$_.png">};
        }
        return join '&nbsp;&nbsp;', @out;
          [/calc] <img src="/preppy/images/paypal.gif" border=0 >
        </td>
          </tr>
          <tr>
            <td align=right class="contentbar1">
              <b>Card Number: </b>
            </td>
            <td align=right colspan=2 class="contentbar1">
              <b><INPUT TYPE=text NAME=mv_credit_card_number SIZE=22></b>
            </td>
      </tr>
      <tr>
            <td align=right class="contentbar1">
          <b>Expiration: </b>
        </td>
            <td align="right" colspan=2 class="contentbar1">

        <SELECT NAME=mv_credit_card_exp_month>
        [loop
            lr=1
              option=mv_credit_card_exp_month
            list="
1    01 - January
2    02 - February
3    03 - March
4    04 - April
5    05 - May
6    06 - June
7    07 - July
8    08 - August
9    09 - September
10    10 - October
11    11 - November
12    12 - December"]
        <OPTION VALUE="[loop-code]"> [loop-pos 1]
        [/loop]
        </SELECT>
   
        <SELECT NAME=mv_credit_card_exp_year>
        [comment]
        This should always return the current year as the first, then
        7 more years.
        [/comment]
        [loop option=mv_credit_card_exp_year lr=1 list=`
        my $year = $Tag->time( '', { format => '%Y' }, '%Y' );
        my $out = '';
        for ($year .. $year + 7) {
            /\d\d(\d\d)/;
            $last_two = $1;
            $out .= "$last_two\t$_\n";
        }
        return $out;
        `]

        <OPTION VALUE="[loop-code]"> [loop-pos 1]
        [/loop]
        </SELECT>
          </td>
            </tr>
            </table>
                       
      </td>
    </tr>
    </table>

    [/then]
    [elsif value payment_method eq postal]
   
      <input type=hidden name=mv_order_profile value=mail_order>

    [/elsif]
    [elsif value payment_method eq cod]
   
      <input type=hidden name=mv_order_profile value=cod>

    [/elsif]
    [elsif value payment_method eq paypal]
   
      <input type=hidden name=mv_order_profile value=paypal>

    [/elsif]
    [elsif value payment_method eq check]
                     
    <input type=hidden name=mv_order_profile value=mail_order>
                     
    <p>&nbsp;</p>
      
    <table border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td>
            <table border="0" cellspacing="0" cellpadding="0" 
align="center">
            <tr>
              <td class="contentbar2" colspan="2">
        <b>Check Information</b>
          </td>
              <td class="contentbar2">&nbsp;</td>
              <td class="contentbar2">&nbsp;</td>
            </tr>
            <tr>
              <td align="right" class="contentbar1">
         <b> Account Number </b>
              </td>
              <td colspan="3 align="left" class="contentbar1">
        <b>
                <INPUT TYPE=text NAME=check_acct SIZE=22>
                </b>
              </td>
        </tr>
        <tr>
              <td align="right" class="contentbar1">
        <b>Routing Number</b>
          </td>
              <td align="left" colspan="3" class="contentbar1">
                <b><INPUT TYPE=text NAME=check_route SIZE=22></b>
              </td>
            </tr>
        <tr>
              <td align="right" class="contentbar1">
        <b>
        Check Number
        </b>
          </td>
              <td align="left" colspan="3" class="contentbar1">
                <b>
                <INPUT TYPE=text NAME=check_num SIZE=22>
                </b>
              </td>
            </tr>
            </table>
      </td>
    </tr>
    </table>
   
    [/elsif]
    [elsif value payment_method eq po]
                     
    <input type=hidden name=mv_order_profile value=purchase_order>
        <p>&nbsp;</p>
       
        <table cellspacing="0" cellpadding="0">
        <tr>
          <td>
            <table border="0" cellspacing="0" cellpadding="0" 
align="center">
            <tr class="contentbar2">
              <td class="contentbar2" colspan="2">
        <b> P.O. Information </b>
          </td>
              <td colspan=2 class="contentbar2">&nbsp;</td>
            </tr>
        <tr>
              <td align=right class="contentbar1">
            <b>
            [error name=credit_limit_ok std_label="PO Number" required=1]
            </b>
          </td>
              <td align=left colspan=3 class="contentbar1">
                <b>
        <INPUT NAME=project_id VALUE="[value project_id]" SIZE=14>
                </b>
              </td>
            </tr>
   
          [if type=data
        term="userdb::credit_limit::[data session username]"
        op=">"
        compare=0.01]
   
          <tr>
          <td align=right valign=top>
            <b> Available credit </b>
          </td>
          <td align=left colspan=3>
        <b>
        [currency]
        [data table=userdb col=credit_limit key="[data session username]"]
        [/currency]
       
        [if type=data
            term="userdb::credit_limit::[data session username]"
            op=<
            compare="[total-cost noformat=1]"
        ]
        <BR>
        Order total [total-cost] exceeds credit limit, please call.
        [/if]
        <BR>
        </b>
          </td>
        </tr>
   
          [/if]
            </table>
                       
      </td>
    </tr>
    </table>

    [/elsif]
    [else]
    [/else]
    [/if]
           
      </td>
    </tr>
    <tr><td>
      <br>
      <table align="center" cellpadding="10" cellspacing="10"><tr>
    [if items]
      <td>

    [if scratch qty_adjusted eq 'Y']
            <font face=verdana size=-2 color=red>
            <b>Quantity adjusted<br>
            to match number<br>
            on hand. Click<br>
            recalculate for<br>
            correct total<br>
            before Checkout</b>
            </font><p>
    [else]

    [button
        name="mv_click"
        src="__THEME__/placeorder.gif"
        text="Place Order"
        hidetext=1
        form=checkout
    ]
        mv_todo=submit
    [/button]

    [/else]
    [/if]
    [set qty_adjusted]X[/set]
      </td>
      <td>
        [button
            name="mv_click"
            src="__THEME_IMG_DIR__recalculate_button.gif"
            text="Recalculate"
            hidetext=1
            form=checkout
        ]
            mv_todo=refresh
        [/button]
      </td>
    [else]
        <td><b>No items in your shopping cart!</b></td>
    [/else]
    [/if]
      </tr></table>
       
      </form>
      [seti clear_errors][error all=1 hide=1 comment="Clear errors"][/seti]

    </td></tr>
    </table>

    <p>           
           
    [include templates/components/specials]

  </td>
</tr>
</table>

<!-- END CONTENT -->

@_NOLEFT_BOTTOM_@
===============================================================================


PayPal changes to checkout.html

Around line 655 added:

             [if variable PAYPAL_ACCEPTED]
             <option [selected payment_method paypal] value="paypal">PayPal
             [/if]


Around line 707 changed:

             [/calc]

to:

             [/calc] <img src="/preppy/images/paypal.gif" border=0 >

        
Around line 782 added:

       [elsif value payment_method eq paypal]
      
       <input type=hidden name=mv_order_profile value=paypal>
 
       [/elsif]

 
           
etc/profiles.order (add these lines you your existing file) 
===============================================================================
__NAME__                            paypal
fname=required
lname=required
address1=required
city=required
country=required
[if value country =~ /^(US|CA)$/i]
    state=state_province
    zip=postcode
[/if]
&or phone_night=phone, phone_day=phone Must have day or evening phone number


&fatal = yes
email=required
email=email

&set = mv_payment PayPal (complete payment in pop-up PayPal window)
&final = yes
&setcheck=mv_email [value email]

__END__
===============================================================================

etc/receipt.html (you should be able to copy and use this page)
===============================================================================
[comment]
ui_template: Yes
ui_template_name: noleft
[/comment]

[tmp page_title]__COMPANY__ -- Receipt[/tmp]

@_NOLEFT_TOP_@

<!-- BEGIN CONTENT -->
[if value payment_method eq paypal]

   <!--
   Portions of the code below are copyrighted 2002 by Scott Kennedy.  
All rights reserved.
   Code may be freely used and redistributed as long as this message is 
left intact.
   Contact information:
       Custom Web Promotions
       1210 E. Main
       Tishomingo, OK 73460
       (580) 371-2528
       http://custweb.com
       scott at custweb.com
   -->
  
  
  
   [seti paypal_button]
   [perl]
  
       $phone_night = $Values->{phone_night};
       $phone_day = $Values->{phone_day};
  
       # Strip unwanted characters
       # PayPal only allows digits
  
       $phone_night = $Tag->filter('digits', $phone_night);
       $phone_day = $Tag->filter('digits', $phone_day);
  
       # Group digits of each phone number into three parts
       # Phone number format PayPal uses is AREA CODE / PREFIX / NUMBER
  
       $phone_day =~ /(\d\d\d)(\d\d\d)(\d\d\d\d)/;
  
       $Tag->set('day_phone_a', $1);
       $Tag->set('day_phone_b', $2);
       $Tag->set('day_phone_c', $3);
  
       $phone_night =~ /(\d\d\d)(\d\d\d)(\d\d\d\d)/;
  
       $Tag->set('night_phone_a', $1);
       $Tag->set('night_phone_b', $2);
       $Tag->set('night_phone_c', $3);
  
   [/perl]
  
  
  
   <FORM NAME="PayPal" METHOD="post"  
ACTION="https://www.paypal.com/cgi-bin/webscr">
   <INPUT TYPE=hidden NAME="cmd" value="_ext-enter">
   <INPUT TYPE=hidden NAME="redirect_cmd" value="_xclick">
   <INPUT TYPE=hidden NAME="business" value="__PAYPAL_ACCT_EMAIL__">
   <INPUT TYPE=hidden NAME="undefined_quantity" value="">
   <INPUT TYPE=hidden NAME="item_name" value="__COMPANY__ - Order # 
[value mv_order_number]">
   <INPUT TYPE=hidden NAME="item_number" value="-----">
   <INPUT TYPE=hidden NAME="amount" value="[total-cost noformat=1]">
   <INPUT TYPE=hidden NAME="shipping" value="">
   <INPUT TYPE=hidden NAME="shipping2" value="">
   [if ! value fname]
     <INPUT TYPE=hidden NAME="first_name" value="[value b_fname]">
   [else]
     <INPUT TYPE=hidden NAME="first_name" value="[value fname]">
   [/else]
   [/if]
  
   [if ! value lname]
     <INPUT TYPE=hidden NAME="last_name" value="[value b_lname]">
   [else]
     <INPUT TYPE=hidden NAME="last_name" value="[value lname]">
   [/else]
   [/if]
  
   [if ! value address1]
     <INPUT TYPE=hidden NAME="address1" value="[value b_address1]">
   [else]
     <INPUT TYPE=hidden NAME="address1" value="[value address1]">
   [/else]
   [/if]
  
   [if ! value address2]
     <INPUT TYPE=hidden NAME="address2" value="[value b_address2]">
   [else]
     <INPUT TYPE=hidden NAME="address2" value="[value address2]">
   [/else]
   [/if]
  
   [if ! value city]
     <INPUT TYPE=hidden NAME="city" value="[value b_city]">
   [else]
     <INPUT TYPE=hidden NAME="city" value="[value city]">
   [/else]
   [/if]
  
   [if ! value state]
     <INPUT TYPE=hidden NAME="state" value="[value b_state]">
   [else]
     <INPUT TYPE=hidden NAME="state" value="[value state]">
   [/else]
   [/if]
  
   [if ! value zip]
     <INPUT TYPE=hidden NAME="zip" value="[value b_zip]">
   [else]
     <INPUT TYPE=hidden NAME="zip" value="[value zip]">
   [/else]
   [/if]
  
   <INPUT TYPE=hidden NAME="night_phone_a" value="[scratch night_phone_a]">
   <INPUT TYPE=hidden NAME="night_phone_b" value="[scratch night_phone_b]">
   <INPUT TYPE=hidden NAME="night_phone_c" value="[scratch night_phone_c]">
   <INPUT TYPE=hidden NAME="day_phone_a" value="[scratch day_phone_a]">
   <INPUT TYPE=hidden NAME="day_phone_b" value="[scratch day_phone_b]">
   <INPUT TYPE=hidden NAME="day_phone_c" value="[scratch day_phone_c]">
   <INPUT TYPE=hidden NAME="email" value="[value email]">
   <input type="image" 
src="/preppy/images/foundation/click_here_to_pay.gif" border="0" 
name="submit"  alt="Make payments with PayPal - it's fast, free and 
secure!">

   </FORM>
   [/seti]
  

[/if]
<br>
<center>
<TABLE>
[if value payment_method eq paypal]
<tr valign=top>
    <th align=right>
    <font color=red>NOTICE:</font>
    </th>
    <td>
    <font color=red>Your purchase is not yet complete and will be<br>
                    shipped after only after you complete your PayPal<br>
                    payment and it's approved.  Click the button below<br>
                    to continue with your PayPal payment<br>
                    </font><p>
                    [scratch paypal_button]
    </td>
</tr>
[/if]
<tr>
    <th align=right>
    ORDER NUMBER
    </th>
    <td>
    [value mv_order_number]
    </td>
</tr>
<tr>
    <th align=right>
        Name
    </th>
    <td>
    [value fname] [value lname]
    </td>
</tr>
[if value company]
<tr>
    <th align=right>
        Company
    </th>
    <td>
    [value company]
    </td>
</tr>
[/if]
<tr>
    <th align=right>
        Email Address
    </th>
    <td>
    [value email]
    </td>
</tr>
<tr>
    <th align=right>
        Address
    </th>
    <td>
    [value address1]
    </td>
</tr>
[if value address2]
<tr>
    <th align=right>
        &nbsp;
    </th>
    <td>
    [value address2]
    </td>
</tr>
[/if]
<tr>
    <th align=right>
        City, State, Zip
    </th>
    <td>
    [value city], [value state]  [value zip]
    </td>
</tr>
<tr>
    <th align=right>
        Country
    </th>
    <td>
    [value country]
    </td>
</tr>
<tr>
    <th align=right>
        Payment Method
    </th>
    <td>
    [value mv_payment]
    </td>
</tr>
<tr>
    <th align=right>
        Shipping Method
    </th>
    <td>
    [shipping_desc]
    </td>
</tr>
[if value mv_handling]
<tr>
    <th align=right>
        Handling Charge
    </th>
    <td>
    [loop list="[value mv_handling]"]
    [loop-change 1]
        [condition]1[/condition]
        [else]<BR>[/else]
    [/loop-change 1]
    [either][shipping_desc mode="[loop-code]"][or]CHARGED[/either]
    [/loop]
    </td>
</tr>
[/if]
[if value phone_day]
<tr>
    <th align=right>
        Daytime Phone
    </th>
    <td>
    [value phone_day]
    </td>
</tr>
[/if]
[if value phone_night]
<tr>
    <th align=right>
        Evening Phone
    </th>
    <td>
    [value phone_night]
    </td>
</tr>
[/if]
[if value b_fname]
<tr>
    <th align=right>
        Billing Name
    </th>
    <td>
    [value b_fname] [value b_lname]
    </td>
</tr>
[/if]
[if value b_address1]
<tr>
    <th align=right>
        Billing Address
    </th>
    <td>
    [value b_address1]
    </td>
</tr>
[if value b_address2]
<tr>
    <th align=right>
        &nbsp;
    </th>
    <td>
    [value b_address2]
    </td>
</tr>
[/if]
<tr>
    <th align=right>
        City, State, Zip
    </th>
    <td>
    [value b_city], [value b_state]  [value b_zip]
    </td>
</tr>
[/if]
[if value b_country]
<tr>
    <th align=right>
        Billing Country
    </th>
    <td>
    [value b_country]
    </td>
</tr>
[/if]

</TABLE>

<p>

[comment] Handle downloadables [/comment]
[perl products]
    sub get_download {
        if (! $Scratch->{download_present}) {
            return '(<B>Must pay by credit card to download now.)</B>';
        }
        my $sku = shift;
        return '' unless tag_data('products', 'download', $sku);
        my $loc =  tag_data('products', 'dl_location', $sku);
        my $save = delete $Scratch->{mv_add_dot_html};
        my $url = $Tag->area( {
                        href => "deliver/$loc",
                        arg => $sku,
                        form => $Scratch->{mv_autocreate},
                    } );
        $Scratch->{mv_add_dot_html} = $save if $save;
        return qq{<BR><A HREF="$url"><IMG border=0 SRC="download.png"></A>};
    }
    return;
[/perl]
<p>
<TABLE>
<TH align=right>[L]Quan[/L]</TH>
<TH>[L]Item No.[/L]</TH>
<TH>[L]Description[/L]</TH>   
<TH align=right>[L]Price[/L]</TH>   
<TH align=right>[L]Extension[/L]</TH>   
[item-list modular=1]
<tr>
    <td align=right valign=top>
    [item-quantity]
    </td>
    <td valign=top>
        [item-sku]
    </td>
    <td>
    [item-data products description]
    [if-modifier size]<BR>SIZE-->[item-modifier 
size][/if-modifier][if-modifier color] COLOR-->[item-modifier 
color][/if-modifier]
    [if-item-data options o_enable]
        [if-item-data !options o_modular]
            [table-organize cols=4 table=' ' font="size=1" pretty=1]
                [item-options td=1 label=1 bold=1 price=1 type=display]
            [/table-organize]
        [/if-item-data]
    [/if-item-data]

    [if-item-field download]
        <br>[calc]get_download('[item-code]')[/calc]
    [/if-item-field]
    [if-item-modifier mv_ad]
    <BR>
    <tt><b>SHIP TO:</B></tt>
    <PRE>[item-modifier mv_ad]</pre>
    [/if-item-modifier]
    </td>
    <td align=right valign=top>
        [item-price]
    </td>
    <td align=right valign=top>
        [item-subtotal]
    </td>
[/item-list]
<tr>
    <td colspan=3>
        &nbsp;
    </td>
    <td>
        SUBTOTAL
    </td>
    <td align=right>
        [subtotal]
    </td>
</tr>
<tr>
    <td colspan=3>
        &nbsp;
    </td>
    <td>
        SALES TAX
    </td>
    <td align=right>
        [salestax]
    </td>
</tr>
[if value mv_shipmode]
<tr>
    <td colspan=3>
        &nbsp;
    </td>
    <td>
        SHIPPING
    </td>
    <td align=right>
        [shipping]
    </td>
</tr>
[/if]
[if value mv_handling]
<tr>
    <td colspan=3>
        &nbsp;
    </td>
    <td>
        HANDLING
    </td>
    <td align=right>
        [handling]
    </td>
</tr>
[/if]
<tr>
    <td colspan=3>
        &nbsp;
    </td>
    <td>
        ORDER TOTAL
    </td>
    <td align=right>
        [total-cost]
    </td>
</tr>
[if value gift_note]
<tr>
    <td colspan=2>
    <B>Comments/Note for Gift:</B>
    </td>
    <td colspan=3>
    <PRE>
    [value gift_note]
    </PRE>
    </td>
</tr>
[/if]
</table>
<P>
<font face="Verdana, Arial, Helvetica, sans-serif" size="1">
<I>(Please print this receipt for your records. Thank you for your 
order!)</I>
</font>
<P>

[include templates/components/specials]
</CENTER>

<!-- END CONTENT -->

@_NOLEFT_BOTTOM_@
===============================================================================


products/variable.txt  (add these two lines.  Make sure the spaces are tabs)
===============================================================================
PAYPAL_ACCEPTED    1       Payment
PAYPAL_ACCT_EMAIL  your at paypal.email        Payment
===============================================================================


-- 

Sincerely,

Duane Hinkley
Down Home Web Design, Inc.
(208) 424-0572 Fax(208) 587-0738

duane at downhomewebdesign.com
www.downhomewebdesign.com



More information about the interchange-users mailing list