[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"> <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 </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]
</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"> </td></tr>
<tr class="contentbar2">
<td class="contentbar2">
<b> Shipping Address<b>
</td>
<td class="contentbar2"><i>(primary)</i></td>
<td class="contentbar2"> </td>
<td class="contentbar2"> </td>
</tr>
<tr><td colspan="4" class="contentbar1"> </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"> </td>
<td class="contentbar1"> </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"> </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"> </td>
<td class="contentbar1"> </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"> </td>
<td class="contentbar1"> </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"> </td>
<td class="contentbar1"> </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"> </td>
<td class="contentbar1"> </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"> </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">
<b>Yes:</b><INPUT TYPE="radio"
onclick="this.form.submit();" name="mv_handling" VALUE="USPSInsurance"
[checked name="mv_handling" value="USPSInsurance"]>
<b>No:</b><INPUT TYPE="radio"
onclick="this.form.submit();" name="mv_handling" VALUE="handling"
[checked name="mv_handling" value="handling" default=1]>
</td>
</tr>
<tr>
<td class="contentbar1"> </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"> </td>
<td class="contentbar1"> </td>
<td class="contentbar1"> </td>
<td class="contentbar1"> </td>
</tr>
<tr class="contentbar2">
<td class="contentbar2">Mailing Status</td>
<td colspan=3 class="contentbar2"> </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"> </td>
<td class="contentbar1"> </td>
</tr>
<tr>
<td align="center" valign="middle" class="contentbar1">
[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"> </td>
<td class="contentbar1"> </td>
</tr>
</table>
</td>
</tr>
</table>
<p> </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> Billing Address</b>
- <i>If different than above</i></td>
<td class="contentbar2"> </td>
<td class="contentbar2"> </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"> </td>
<td class="contentbar1"> </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"> </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"> </td>
<td class="contentbar1"> </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"> </td>
<td class="contentbar1"> </td>
</tr>
<tr>
<td class="contentbar1"> </td>
<td class="contentbar1"> </td>
<td class="contentbar1"> </td>
<td class="contentbar1"> </td>
</tr>
<tr class="contentbar2">
<td class="contentbar2">Payment Method</td>
<td colspan=3 class="contentbar2"> </td>
</tr>
<tr>
<td colspan=4 class="contentbar1"> </td>
</tr>
<tr>
<td class="contentbar1"> </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"> </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> </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 ' ', @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> </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"> </td>
<td class="contentbar2"> </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> </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"> </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>
</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>
</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>
</td>
<td>
SUBTOTAL
</td>
<td align=right>
[subtotal]
</td>
</tr>
<tr>
<td colspan=3>
</td>
<td>
SALES TAX
</td>
<td align=right>
[salestax]
</td>
</tr>
[if value mv_shipmode]
<tr>
<td colspan=3>
</td>
<td>
SHIPPING
</td>
<td align=right>
[shipping]
</td>
</tr>
[/if]
[if value mv_handling]
<tr>
<td colspan=3>
</td>
<td>
HANDLING
</td>
<td align=right>
[handling]
</td>
</tr>
[/if]
<tr>
<td colspan=3>
</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