Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Can you hide Payment modules other than PayPal for Downloads


Predatron

Recommended Posts

Posted

Hi,

I have both downloads and shippable products, but I only want my downloads to be purchased using PayPal. If, as I have now, I have both Check/Money order and PayPal defined the downloads can be purchased using both. This isn't good, because the download link is showing straight away in the account section and the customer hasn't even paid for it yet.

Is there a Module for this or does this require a statement in the code to only offer PayPal if the product is known to be a download? I'm no good at PHP programming and I really need some help here, thanks.

Steve

Posted

You could probably hack the payments modules so that they only show when weight of order is above 1, leave paypal to show on all. Then if everything is downloadable, only PayPal will show. If any item ordered isnt a download, then more payment methods show..

Posted
You could probably hack the payments modules so that they only show when weight of order is above 1, leave paypal to show on all. Then if everything is downloadable, only PayPal will show. If any item ordered isnt a download, then more payment methods show..

Thanks Tony for your suggestion and it sound very feasible to do. Although I don't think I'm competent enough to start hacking my way through this kind of code. If you could suggest a way to do it then I'd really appreciate it.

Steve

Posted
you can get around by changing the downloads script

http://www.oscommerce.com/forums/index.php?showtopic=195731

as its more complicated to change every gateway.

Thanks for replying, but I changed the code and nothing happens. When I buy a download product I'm still getting the options for payment as both Check/Money order and PayPal. I'm needing just PayPal to show for downloads and all the shippable products to show both options. The account screen then still shows the Download link if I select Money Order for the Download.

Also both the MoneyOrder and PayPal have been changed to Delivered in Admin, but where would you change Download to the same. Although I suspect the Check/Money Order should be set to Pending.

Then the download should be available only if the administrator sets the order status to delivered.

If this is relevant I have installed the Download Manager contrib, which has been working fine.

I hope you can help out here, many thanks.

Steve

 

Below is the changed code as per the instructions in the other topic Download Problem

<?php
/*
 $Id: download.php,v 1.9 2003/02/13 03:01:48 hpdl Exp $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 include('includes/application_top.php');

 if (!tep_session_is_registered('customer_id')) die;

// Check download.php was called with proper GET parameters
 if ((isset($HTTP_GET_VARS['order']) && !is_numeric($HTTP_GET_VARS['order'])) || (isset($HTTP_GET_VARS['id']) && !is_numeric($HTTP_GET_VARS['id'])) ) {
die;
 }

// Check that order_id, customer_id and filename match
$downloads_query = tep_db_query("select date_format(o.date_purchased, '%Y-%m-%d') as date_purchased_day, opd.download_maxdays, opd.download_count, opd.download_maxdays, opd.orders_products_filename from " . TABLE_ORDERS . " o, " . TABLE_ORDERS_PRODUCTS . " op, " . TABLE_ORDERS_PRODUCTS_DOWNLOAD . " opd where o.customers_id = '" . $customer_id . "' and o.orders_id = '" . (int)$HTTP_GET_VARS['order'] . "' and o.orders_status = '3' and o.orders_id = op.orders_id and op.orders_products_id = opd.orders_products_id and opd.orders_products_download_id = '" . (int)$HTTP_GET_VARS['id'] . "' and opd.orders_products_filename != ''");  $downloads = tep_db_fetch_array($downloads_query);
// MySQL 3.22 does not have INTERVAL
 list($dt_year, $dt_month, $dt_day) = explode('-', $downloads['date_purchased_day']);
 $download_timestamp = mktime(23, 59, 59, $dt_month, $dt_day + $downloads['download_maxdays'], $dt_year);

// Die if time expired (maxdays = 0 means no time limit)
 if (($downloads['download_maxdays'] != 0) && ($download_timestamp <= time())) die;
// Die if remaining count is <=0
 if ($downloads['download_count'] <= 0) die;
// Die if file is not there
 if (!file_exists(DIR_FS_DOWNLOAD . $downloads['orders_products_filename'])) die;

// Now decrement counter
 tep_db_query("update " . TABLE_ORDERS_PRODUCTS_DOWNLOAD . " set download_count = download_count-1 where orders_products_download_id = '" . (int)$HTTP_GET_VARS['id'] . "'");

// Returns a random name, 16 to 20 characters long
// There are more than 10^28 combinations
// The directory is "hidden", i.e. starts with '.'
function tep_random_name()
{
 $letters = 'abcdefghijklmnopqrstuvwxyz';
 $dirname = '.';
 $length = floor(tep_rand(16,20));
 for ($i = 1; $i <= $length; $i++) {
  $q = floor(tep_rand(1,26));
  $dirname .= $letters[$q];
 }
 return $dirname;
}

// Unlinks all subdirectories and files in $dir
// Works only on one subdir level, will not recurse
function tep_unlink_temp_dir($dir)
{
 $h1 = opendir($dir);
 while ($subdir = readdir($h1)) {
// Ignore non directories
if (!is_dir($dir . $subdir)) continue;
// Ignore . and .. and CVS
if ($subdir == '.' || $subdir == '..' || $subdir == 'CVS') continue;
// Loop and unlink files in subdirectory
$h2 = opendir($dir . $subdir);
while ($file = readdir($h2)) {
  if ($file == '.' || $file == '..') continue;
  @unlink($dir . $subdir . '/' . $file);
}
closedir($h2); 
@rmdir($dir . $subdir);
 }
 closedir($h1);
}


// Now send the file with header() magic
 header("Expires: Mon, 26 Nov 1962 00:00:00 GMT");
 header("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT");
 header("Cache-Control: no-cache, must-revalidate");
 header("Pragma: no-cache");
 header("Content-Type: Application/octet-stream");
 header("Content-disposition: attachment; filename=" . $downloads['orders_products_filename']);

 if (DOWNLOAD_BY_REDIRECT == 'true') {
// This will work only on Unix/Linux hosts
tep_unlink_temp_dir(DIR_FS_DOWNLOAD_PUBLIC);
$tempdir = tep_random_name();
umask(0000);
mkdir(DIR_FS_DOWNLOAD_PUBLIC . $tempdir, 0777);
symlink(DIR_FS_DOWNLOAD . $downloads['orders_products_filename'], DIR_FS_DOWNLOAD_PUBLIC . $tempdir . '/' . $downloads['orders_products_filename']);
tep_redirect(DIR_WS_DOWNLOAD_PUBLIC . $tempdir . '/' . $downloads['orders_products_filename']);
 } else {
// This will work on all systems, but will need considerable resources
// We could also loop with fread($fp, 4096) to save memory
readfile(DIR_FS_DOWNLOAD . $downloads['orders_products_filename']);
 }
?>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...