Added Tell-A-Friend
v2.2
-> Added version list.
-> Added ability to only allow purchasing customers to be affiliates.
-> Added giveaway product functionality.
-> Added affiliate emailing.
-> Added a few bug fixes.
v2.3
-> Added code for parsing PHP in templates.
-> Updated code that decides who gets OTO sale.
-> Major Security update tracks purchases by IP and only allows
Completed payments to be redirected to the download page.
-> Added ability to only allow OTO customers to get commissions on the OTO.
-> Added ability to disable download emails from automatically being sent.
-> Added support for all PayPal currencies.
-> BUG FIX: Corrected 48 hour extension of download link to add 48 hours to THIS moment.
-> Added script configure util (config.php)
v2.4
-> BUG FIX: When OTO commission is set to zero, affiliate always gets the commission.
-> BUG FIX: Affiliate cookie now cleared if only customers are allowed to be affiliates.
-> BUG FIX: Removed case-sensitive referrer domain comparison for TAF.
-> IPN script now prevents people from paying less than stated price for products.
-> IPN script now prevents people from purchasing using different emails from the same domains.
-> Added admin section for viewing fraudulent transactions.
-> Added version number to ipn.php, config.php and settings.php
-> Added back-end search features for sales records.
-> Added download security.
v2.5
-> BUG FIX: Sometimes you could still purchase through your own link even if you weren't a customer and $sys_purchasers_only was true.
-> BUG FIX: If customer clicked OTO purchase link but did not purchase, their download link would be to the OTO.
-> BUG FIX: config.php file wasn't writing out the currency value to settings.php
-> BUG FIX: to prevent warning messages, a blank ipn.txt file is created automatically if it doesn't exist.
-> SECURITY: to prevent directory listing of templates folder (should someone discover its name), an index.html file is created there automatically.
-> Removed need for cookies throughout purchase/download process to prevent expired download issues.
v2.6
-> Added ability to alternate commissions on primary product as well.
-> Added version info and item/oto commission info on "Please Wait" order screen.
-> SECURITY: Added additional security for admin back-end to prevent cookie spoofing.
-> BUG FIX: Added folder location into cookie path for multiple products running on the same domain.
*/
$sys_version = 2.6;
include("settings.php");
function searchKeywords($url){
$parts = parse_url($url);
$host = str_replace("www.", "", $parts["host"]);
$keywords = "";
parse_str($parts["query"], $vars);
if(strpos(" $host", "google")){
$keywords = urldecode($vars["q"]);
}
elseif(strpos(" $host", "yahoo")){
$keywords = urldecode($vars["p"]);
}
elseif(strpos(" $host", "live")){
$keywords = urldecode($vars["q"]);
}
elseif($vars["keywords"]){
$keywords = urldecode($vars["keywords"]);
}
elseif($vars["query"]){
$keywords = urldecode($vars["query"]);
}
else{
$keywords = urldecode($vars["q"]);
}
return $keywords;
}
function evalPHP($template){
# Make all settings.php variables accessible to template PHP code.
global $sys_admin_username, $sys_admin_password, $sys_domain, $sys_support_address,
$sys_script_folder, $sys_template_folder, $sys_default_email, $sys_item_name,
$sys_item_number, $sys_item_cost, $sys_oto, $sys_oto_name, $sys_oto_number,
$sys_oto_cost, $sys_oto_percent, $sys_item_cancel_url, $sys_expire_hours,
$sys_blocked, $sys_secure_dl, $sys_tell_subject, $sys_tell_body,
$sys_purchasers_only, $sys_purchasers_override, $sys_giveaway_product,
$sys_oto_purchasers_only, $sys_oto_purchasers_override;
# Eval all php code in a template and plug result into output.
$output = "";
$last = 0;
$i = strpos($template, "", $i);
$phpcode = trim(str_replace(array(""), "", substr($template, $i, $i2 - $i)));
$val = eval($phpcode);
$output .= $val;
$last = $i2 + 3;
$i = strpos($template, "", $i);
$phpcode = trim(str_replace(array("=", "?>"), "", substr($output, $i, $i2 - $i)));
$val = eval("return $phpcode;");
$output2 .= $val;
$last = $i2 + 3;
$i = strpos($output, "=", $i2);
}
$output2 .= substr($output, $last, strlen($output) - $last);
return $output2;
}
function showTemplate($filename){
include($filename);
return;
$output = "";
$fh = @fopen($filename, "r");
while($s = fgets($fh)){
$output .= $s;
}
@fclose($fh);
echo evalPHP($output);
}
function getIPSalesRecord($oto = false){
global $sys_template_folder, $sys_oto_number;
$ip = $_SERVER["REMOTE_ADDR"];
$sales = @file($sys_template_folder . "ipn.txt");
$output = "";
foreach($sales as $sale){
$sale = explode("|", str_replace(array("\r", "\n"), "", $sale));
if($sale[14]==$ip){
$valid = true;
if($oto && $sale[2]!=$sys_oto_number){
$output = "";
$valid = false;
}
if($valid){
# Make sure sale is within valid timeframe.
if(time()<$sale[9]){
$output = $sale;
break;
}
else{
# Download has expired.
$output = "";
}
}
}
}
return $output;
}
function getOTOSalesRecord($affemail){
global $sys_template_folder, $sys_oto_number;
$sales = @file($sys_template_folder . "ipn.txt");
$output = "";
foreach($sales as $sale){
$sale = explode("|", str_replace(array("\r", "\n"), "", $sale));
if($sale[4]==$affemail){
$valid = true;
if($sale[2]!=$sys_oto_number){
$output = "";
$valid = false;
}
if($valid){
$output = $sale;
break;
}
}
}
return $output;
}
function sys_download_url($oto){
$md5 = uniqid("");
return "index.php?action=dlid&oto=$oto&pid=$md5";
}
function getPaymentEmail($itemnumber, $percent){
global $sys_template_folder, $sys_default_email;
# Use sales data to figure out who should get next OTO sale.
$sales = @file($sys_template_folder . "ipn.txt");
$afftotal = 0;
$affsales = 0;
foreach($sales as $sale){
$sale = explode("|", $sale);
if($sale[2] == $itemnumber && strtolower($sale[13]) == strtolower(urldecode($_COOKIE["aff"]))){
# Sale referred by affiliate.
$afftotal++;
if(strtolower($sale[3]) == strtolower(urldecode($_COOKIE["aff"]))){
# Affiliate got the sale.
$affsales++;
}
}
}
if($afftotal > 0){
$affper = ($affsales / $afftotal)*100;
}
else{
$affper = 0;
}
if($percent > 0 && $affper<=$percent){
# Give OTO to affiliate.
$email = urldecode($_COOKIE["aff"]);
}
else{
# Give OTO to vendor.
$email = $sys_default_email;
}
return $email;
}
$action = $_REQUEST["action"];
# Set privacy policy for IE6/WinXP users.
# If you don't do this, a lot of IE browsers wont accept the cookie.
header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
if(!file_exists($sys_template_folder . "ipn.txt")){
# IPN file doesn't exist. Create a blank one.
$fh = fopen($sys_template_folder . "ipn.txt", "w+");
fwrite($fh, "");
fclose($fh);
}
if(!file_exists($sys_template_folder . "index.html")){
# index.html file doesn't exist in templates folder. Create a blank one.
$fh = fopen($sys_template_folder . "index.html", "w+");
fwrite($fh, "");
fclose($fh);
}
if(substr($action, 0, 5)=="admin" && $action != "admin" && $action != "adminlogin" && !$_COOKIE["admin"]){
# Not logged in. Redirect to login.
header("Location: $_SERVER[PHP_SELF]?action=admin");
exit;
}
# Redirectin case PayPal goofs and fails to do so.
if(!isset($_COOKIE["giveaway"]) && !isset($_GET["fdl"]) && ($action == "squeeze"| $action == "downloadoto") && !isset($_GET["e"])){
# Check for customer IP address in IPN file.
if($action=="downloadoto"){
$oto = true;
}
else{
$oto = false;
}
$sale = getIPSalesRecord($oto);
if(is_array($sale)){
# Purchase record found.
if($action=="downloadoto"){
$url = "index.php?action=download&id=$sale[0]&fdl=1";
}
elseif($action=="squeeze"|$action=="download"){
$url = "index.php?action=squeeze&id=$sale[0]&fdl=1";
}
else{
# Not sure what's up. Send to sales letter.
$url = "index.php";
}
# Send to appropriate page.
header("Location: $url");
}
elseif($_GET["tries"]<11){
# Give one minute for PayPal to post IPN record before giving up and showing an error.
if(!isset($_GET["tries"])){
$tries = 1;
}
else{
$tries = $_GET["tries"] + 1;
}
$seconds = 60 - ($tries * 5);
echo "
Waiting for PayPal confirmation of purchase, please wait...
$seconds seconds left...
(This page will refresh every 5 seconds until PayPal provides confirmation.)
";
}
else{
# IP not found in records. Show error message.
if(substr($sys_support_address, 0, 7)=="http://"){
$eaddress = $sys_support_address;
}
else{
$eaddress = "mailto:$sys_support_address";
}
echo "
Purchase record not found.
We apologize for the inconvenience, but there was a problem confirming your purchase. Please contact our technical
support staff for your download link at:
";
}
exit;
}
if(isset($_GET["e"])){
# Make sure this account hasn't been blocked.
if(!strpos(" $sys_blocked", $_GET["e"])){
# Set cookie and redirect visitor if it's through an affiliate link.
if($sys_purchasers_only){
if(strpos(strtolower(" $sys_purchasers_override"), strtolower($_GET["e"]))){
# Affiliate is in over-ride list. Let them sell.
$sellit = true;
}
else{
# Verify that this paypal email address is in our ipn.txt
$sellit = false;
$sales = @file($sys_template_folder . "ipn.txt");
foreach($sales as $sale){
$sale = explode("|", $sale);
if(strtolower($sale[4])==strtolower($_GET["e"])){
# They're a customer.
$sellit = true;
break;
}
}
}
}
else{
# Anybody can sell the product.
$sellit = true;
}
if($sellit){
setcookie("aff", $_GET["e"], time()+31536000, $sys_script_folder, "." . $sys_domain);
if($_GET["taf"]){
# This was a tell-a-friend referral.
header("Location: $sys_script_folder?taf=1");
}
else{
header("Location: $sys_script_folder");
}
}
else{
# Clear affiliate cookie.
setcookie("aff", $sys_default_email, time()+31536000, $sys_script_folder, "." . $sys_domain);
# Show a message indicating that only people who bought can sell.
showTemplate($sys_template_folder . "customersonly.html");
}
exit;
}
else{
# Clear affiliate cookie.
setcookie("aff", $sys_default_email, time()+31536000, $sys_script_folder, "." . $sys_domain);
# Inform visitor that this customers link has been blocked
# for fradulent activity.
$filename = $sys_template_folder . "fraud.html";
showTemplate($filename);
exit;
}
}
# Keep paypal email on hand at all times.
if(isset($_COOKIE["aff"])){
$email = $_COOKIE["aff"];
}
else{
$email = $sys_default_email;
}
# =============================================================================
# NO ACTION = SHOW SALES LETTER
# =============================================================================
if($action==""){
# Save referrer.
if(isset($_GET["taf"])){
setcookie("ref", "TELL-A-FRIEND", time()+31536000, $sys_script_folder, "." . $sys_domain);
}
else{
setcookie("ref", $_SERVER["HTTP_REFERER"], time()+31536000, $sys_script_folder, "." . $sys_domain);
}
# Show sales letter.
$filename = $sys_template_folder . "salesletter.html";
}
# =============================================================================
# GIVEAWAY = HANDLE GIVE-AWAY PRODUCT
# =============================================================================
elseif($action=="giveaway"){
if($sys_giveaway_product){
# Set giveaway cookie.
setcookie("giveaway", true, time()+31536000, $sys_script_folder, "." . $sys_domain);
# Send them on.
header("Location: index.php?action=squeeze&giveaway=1");
exit;
}
}
# =============================================================================
# ORDER = HANDLE ORDER VIA PAYPAL
# =============================================================================
elseif($action=="order"){
# An order. Great! :)
if(!$sys_currency){
# Default to USD.
$sys_currency = "USD";
}
# Send them through the order process.
if(isset($_GET["oto"])){
# Buying OTO.
if(!isset($_COOKIE["aff"])){
# No affiliate. Use primary email address.
$email = $sys_default_email;
}
else{
$checksale = true;
if($sys_oto_purchasers_only){
$checksale = false;
# Restrict OTO commissions to OTO purchasers only.
$sale = getOTOSalesRecord(urldecode($_COOKIE["aff"]));
if(is_array($sale)){
# They are an OTO customer.
$checksale = true;
}
}
if($checksale){
$email = getPaymentEmail($sys_oto_number, $sys_oto_percent);
}
else{
# Send payment to vendor.
$email = $sys_default_email;
}
}
$item_name = $sys_oto_name;
$item_number = $sys_oto_number;
$item_cost = $sys_oto_cost;
$item_download_url = "http://$sys_domain" . $sys_script_folder . "?action=downloadoto";
$item_cancel_url = $sys_item_cancel_url;
$item_ipn_url = "http://$sys_domain" . $sys_script_folder . "ipn.php";
}
else{
# Regular purchase.
if(!isset($sys_item_percent)){
# 100% commission is the default.
$sys_item_percent = 100;
}
if($sys_item_percent < 100){
$email = getPaymentEmail($sys_item_number, $sys_item_percent);
}
$item_name = $sys_item_name;
$item_number = $sys_item_number;
$item_cost = $sys_item_cost;
$item_download_url = "http://$sys_domain" . $sys_script_folder . "?action=squeeze";
$item_cancel_url = $sys_item_cancel_url;
$item_ipn_url = "http://$sys_domain" . $sys_script_folder . "ipn.php";
}
# Get customer IP address.
$ip = $_SERVER["REMOTE_ADDR"];
# Set affiliate email for display.
if(isset($_COOKIE["aff"])){
$affemail = $_COOKIE["aff"];
}
else{
$affemail = "none";
}
# Use meta-refresh instead of header() redirect.
# header() seems to cause session issues with PayPal.
echo "
Please wait...
You will be redirected to the PayPal checkout in 5 seconds.
Remember to click RETURN TO MERCHANT after checkout or you will not receive your download.
[affiliate = $affemail]
";
exit;
}
# =============================================================================
# SQUEEZE/DOWNLOAD WITH ID = HANDLE SQUEEZE/DOWNLOAD PAGE
# =============================================================================
elseif(($action == "squeeze" | $action=="download") && isset($_REQUEST["id"])){
# Check that: 1) ID is valid and 2) download has not timed out.
$id = $_REQUEST["id"];
$fh = @fopen($sys_template_folder . "ipn.txt", "r");
$invalid = true;
$records = array();
$changes = false;
while($rec = @fgets($fh)){
$rec = str_replace("\n", "", $rec);
if(trim($rec)){
$record = explode("|", $rec);
if($record[0]==$id){
$invalid = false;
# Valid ID. Check timeout.
if(time()<=$record[9]){
# Still active. Show download.
if($record[2]==$sys_oto_number){
# One-time offer download. Set cookie and show download.
$filename = $sys_template_folder . "downloadoto.html";
}
else{
# Already squeezed, show download page.
if($action=="squeeze"){
$filename = $sys_template_folder . "squeeze.html";
}
else{
$filename = $sys_template_folder . "download.html";
}
}
}
else{
# Expired.
$filename = $sys_template_folder . "downloadexpired.html";
}
$rec = "";
for($i=0;$i0){
# Replace message vars.
$subject = str_replace("[SENDER]", $sendername, $sys_tell_subject);
$subject = str_replace("[PAYPAL]", $senderpaypal, $subject);
$body = str_replace("[SENDER]", $sendername, $sys_tell_body);
$body = str_replace("[PAYPAL]", $senderpaypal, $body);
$headers = "From: $sendername<$senderpaypal>
X-Sender: $sendername<$senderpaypal>
X-Mailer: PHP " . phpversion() . "
X-Priority: 3
Return-Path: $sendername<$senderpaypal>
Reply-To: $sendername<$senderpaypal>";
# Read number of tell-a-friend mails sent to date.
$tafcount = @file_get_contents($sys_template_folder . "tellafriend.txt");
if(!$tafcount){
$tafcount = 0;
}
# Send the message.
foreach($emails as $email){
if($email){
@mail($email, $subject, $body, $headers);
$tafcount++;
}
}
# Write new count.
$fh = @fopen($sys_template_folder . "tellafriend.txt", "w+");
@fwrite($fh, $tafcount);
@fclose($fh);
# Thanks!
echo "Thanks! A message has been sent to the people you entered into the form.";
exit;
}
else{
# Mail can only be sent from this domain.
echo "Mail can only be sent from $sys_domain.";
exit;
}
}
else{
echo "Your name and PayPal email address are required.";
exit;
}
}
# =============================================================================
# REMOVE = REMOVE AFFILIATE FROM EMAIL LIST
# =============================================================================
elseif($action=="remove"){
# Remove affiliate from email list.
if($_REQUEST["email"]){
$fh = @fopen($sys_template_folder . "unsubs.txt", "a+");
@fwrite($fh, $_REQUEST["email"] . "\n");
@fclose($fh);
echo "
You will no longer receive email from $sys_item_name.
";
exit;
}
}
# =============================================================================
# ALL OTHER PURCHASE-REQUIRED ACTIONS
# =============================================================================
else{
# All other actions require a purchase (unless it was a giveaway).
# First verify that person actually purchased.
if($action=="downloadoto"){
$sale = getIPSalesRecord(true);
}
else{
if($sys_giveaway_product && isset($_COOKIE["giveaway"])){
$sale = array();
}
else{
$sale = getIPSalesRecord(false);
}
}
if(is_array($sale)){
if($action=="oto"){
# Show oto page.
$filename = $sys_template_folder . "oto.html";
}
elseif($action=="squeeze"){
# Show name squeeze page.
$filename = $sys_template_folder . "squeeze.html";
}
elseif($action=="download"){
if($sys_oto && !isset($_GET["dl"])){
# Show OTO page.
$filename = $sys_template_folder . "oto.html";
}
else{
# Show download page.
$filename = $sys_template_folder . "download.html";
}
}
elseif($action=="downloadoto"){
# Show OTO download page.
$filename = $sys_template_folder . "downloadoto.html";
}
else{
# Invalid action. Show expired page.
$filename = $sys_template_folder . "downloadexpired.html";
}
}
else{
# User not found in sales records. Show expired page.
$filename = $sys_template_folder . "downloadexpired.html";
}
}
# =============================================================================
# ADMIN BACK-END FUNCTIONS
# =============================================================================
if($action=="admin"){
# Get username/password for admin area.
echo "
";
exit;
}
elseif($action=="adminlogin"){
# Verify admin username/password.
if($_POST["username"] == $sys_admin_username && $_POST["password"] == $sys_admin_password){
# Valid. Cookie and redirect.
$uniq = uniqid("");
setcookie("admin", true);
setcookie("uniq", $uniq);
$fh = fopen($sys_template_folder . "uniq.txt", "w+");
fwrite($fh, $uniq);
fclose($fh);
header("Location: $_SERVER[PHP_SELF]?action=adminmenu");
exit;
}
else{
echo "Invalid username or password.";
exit;
}
}
if($_COOKIE["admin"]){
$uniq = file_get_contents($sys_template_folder . "uniq.txt");
if($_COOKIE["uniq"] != $uniq){
# Somebody's trying to hack.
setcookie("admin", "", time() - 3600);
header("Location: $_SERVER[PHP_SELF]?action=admin");
exit;
}
$adminheader = "Admin Panel
$7 Secrets Scripts v$sys_version
";
$adminfooter = "Export your travel map to any Web page travel map.Find and buy used Dodge srt 4 dealers.2008 Chevrolet TrailBlazer Video chevy truck.Ford F150 need to replace ring & pinion 98 4x4 4.6 xlt.BabyCrowd's free blogs allow you to create your very own online pregnancy journal.Mom and son makeout for Tickets to Nascar race mom son.Office Gadgets on Coolest Gadgets a href=http://gadgettoolls.com/hardware-round-up-hottest-gadgets-of-2008.html rel=dofollow>office gadgets.Offer inbound travel tour.Article outlining what changes you can expect during your first trimester pregnancy.Suzuki's website for ATVs, dealers and newssuzuki.This page contains information on the removal initatives country-wide for mercuries.Used 2005 Dodge Neon srt 4 dealership.Ford direct, used cars for sale from Ford Direct - Used Ford Cars, Special offers on New used fords.The official site of the Harley-Davidson Motor Company. View Harley-Davidson motorcyclesshawn michaels playgirl
";
foreach($affs as $aff){
# Send the mailer.
$sendbody = str_replace("[EMAIL]", $aff, $ebody);
@mail($aff, $esubject, $sendbody, $headers);
echo "
$aff .. ";
flush();
}
echo "
$adminfooter
Back to Menu
";
exit;
}
elseif($action=="adminfraud"){
# Show all fraudulent transactions.
$records = @file($sys_template_folder . "fraud.txt");
if($records){
$rcount = count($records);
}
else{
$rcount = 0;
$records = array();
}
echo "
$adminheader
Back to Menu
$rcount total fraudulent transactions. Fraudulent buyers do not receive the download.
It is recommended that you report fraudulent buyers to PayPal at 888-215-5506.
$adminfooter";
exit;
}
elseif($action=="adminapprove"){
# Add record into ipn.txt, since it wasn't actually fraud.
$records = @file($sys_template_folder . "fraud.txt");
foreach($records as $record){
$rec = explode("|", $record);
if($rec[0]==$_REQUEST["id"]){
# Add this record to ipn.txt file.
$fh = fopen($sys_template_folder . "ipn.txt", "a+");
fwrite($fh, $record);
fclose($fh);
if(substr($sys_support_address, 0, 7)=="http://"){
$eaddress = "noreply@$sys_domain";
$support = "For support, visit our web site at:\n\n$sys_support_address";
}
else{
$eaddress = $sys_support_address;
$support = "Reply to this email with any questions or support needs you may have.";
}
$subject = "Your download link.";
$expires = time() + (3600 * $sys_expire_hours);
$time = time();
$body = "$rec[5],\n\nThank you for your purchase.\nTo download your copy, click here:\n\nhttp://$sys_domain" . $sys_script_folder . "?action=download&id=$rec[0]\n\nYou have $sys_expire_hours hours to download before the link expires.\nWe appreciate your business.\n$support\n\nThanks again.\n";
# Send download notification to purchaser.
@mail($rec[4], $subject, $body, "From: $sys_item_name <$eaddress>\r\nReply-To: $eaddress\r\nX-Mailer: PHP" . phpversion());
}
}
echo "$adminheader
Back to Menu
The customer has been emailed their download link.