Predatron Posted March 17, 2006 Posted March 17, 2006 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
Guest Posted March 17, 2006 Posted March 17, 2006 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..
Predatron Posted March 18, 2006 Author Posted March 18, 2006 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
Guest Posted March 18, 2006 Posted March 18, 2006 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.
Predatron Posted March 18, 2006 Author Posted March 18, 2006 you can get around by changing the downloads scripthttp://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']); } ?>
Recommended Posts
Archived
This topic is now archived and is closed to further replies.