Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

creepo

Pioneers
  • Posts

    41
  • Joined

  • Last visited

Profile Information

  • Real Name
    Jim
  • Gender
    Male
  • Location
    IN, USA
  • Interests
    OSCommerce & CRE Loaded Consultant Specializing in OSCommerce & CRE Loaded stores, customer-updateable websites, revamps, facelifts, upgrades, moves, conversions and web consulting.
  • Website

creepo's Achievements

  1. Had an order come through that had only the shipping and handling fee, but no fee for the chosen method (Ground). Anyone else had such a thing happen? I'd like to suggest that we add some logic wherein if the shipping fee = 0 (or null etc), that it throws an error rather than completing. Surprised that wouldn't be in there. Perhaps FedEx servers had a glitch and were functioning, but spitting out blank quotes? odd. I'm digging in further, but thought I'd throw this out there in case I'm not alone. J
  2. OK, not sure if this will cause other issues, but in /includes/modules/shipping/fedexwebservices.php, I was able to stop the special character SOAP encoding error by applying utf8 encoding to the street address and city (that's where we were getting the errors). Tested ok. In case it is useful, here's what I changed around line 160 in mine (which is slightly edited now): $request['RequestedShipment']['Recipient'] = array('Address' => array ( 'StreetLines' => array(utf8_encode($street_address), utf8_encode($street_address2)), // customer street address 'City' => (utf8_encode($city)), //customer city
  3. Hi all - thanks for the contribution and support. I just wanted to raise a couple of remaining issues that we are having. 1) We did experience a $0.00 shipping incident to Canada. We were using List rates. I found someone else's solution was basically to NOT use List Rates or to shut off all ground options to Canada. I'm not sure if that denial of Canada ground options has been incorporated into the newest version, but I am hoping someone can figure out why List rates occasionally fail for Canada - basically defaulting to free shipping. It's a big issue for my client, but we have no options at this point. What we have done is to use Account rates, but I programmed in the ability to adjust % increase cost per service. The % increases in handling fees are applied to groups of services - not a fine enough control for my client - and we were trying to emulate the same rates as the previous module, so I found it much easier to make calculated increased per service hardcoded in the code. 2) Additionally, we had a customer with a SOAP error regarding the handling / use of special characters. Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: string 'M\xe9...' is not a valid utf-8 string in /includes/modules/shipping/fedexwebservices.php:268 I guess I will try to strip / convert special characters that are offensive in the module, class etc. Has anyone else slayed this one? Thanks! Jim
  4. Same here. production.shippingapis.com is down. Since about 1:40 CST. Haven't been able to find anyone else talking about it. Anyone? Echo? I'm turning off USPS for now. Argh. J
  5. OK, I have domestic working well, and international 'tamed' a bit - finally got the descriptions cleaned up thanks to tips here, but in the version of usps.php that we are using, the services are not controlled in the admin, but rather they are/were controlled by commenting out elements in an array. Example, if I didn't want customers to see Priority Mail for domestic, I'd comment it out: // 'PRIORITY' => 'Priority Mail'), That also used to work for international types via the array "intl_types". But even if i comment that out, ALL options are displaying for international now... so, well, i hacked this to limit the options. (basically it uses the $skip_array elements to identify keywords in services you don't want to show up to the customer). $size = sizeof($services); for ($i=0, $n=$size; $i<$n; $i++) { $skipit = 0; if (strpos($services[$i], '<Postage>')) { $service = ereg('<SvcDescription>(.*)</SvcDescription>', $services[$i], $regs); $service = $regs[1]; $skip_array = array('Rectangular','Envelope','Flat Rate','Legal','GXG'); foreach ($skip_array as $value) { if (strstr($service, $value)) { $skipit=1; } } $service = str_replace('&lt;sup&gt;&amp;reg;&lt;/sup&gt;', '', $service); $service = str_replace('&lt;sup&gt;&amp;trade;&lt;/sup&gt;', '', $service); $postage = ereg('<Postage>(.*)</Postage>', $services[$i], $regs); $postage = $regs[1]; if (isset($this->service) && ($service != $this->service) ) { continue; } if ($skipit !== 1) { $rates[] = array($service => $postage); } } } It's still a band-aid until someone revamps the contribution, but it got us up and running... Thanks all! Jim
  6. Thanks so much for posting these files - i have applied and now domestic is back in business - international is still crunked as you stated - but that is less critical for most of my clients. THANKS for sharing!!! You are the man! (no offense if you are wo-man, it's a saying). J
  7. Thank you so much for sharing this. I have taken it and reworked it a bit to work as a standalone script that can be run by cron. I think this would have worked fine in older OSCommerce with htaccess only on the admin area, but in the newer versions and CRE Loaded, there is an additional admin login, so I was trying to use lynx to pass both htaccess credentials and then also get it to login to the admin area. I gave up on that and stripped all the oscommerce functions out of it so it has no includes, placed it in an admin subdirectory with htaccess only on it and was able to set up a cron job using lynx to get this to run daily (which syncs up nicely with the daily xml quantity updates from the warehouse). Anyways - i wanted to try to share this, but haven't submitted such things before, so I am just going to drop it here and hope someone finds it useful. I did include some help at the top of the file regarding the variables to fill out and the cron command. Hope someone finds this useful! I have it running on a CRE Loaded 6.4.0 B2B site - Remember, your server must support the lynx text browser... <?php /* $Id: cron_product_customer_notifications.php osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2010 osCommerce Released under the GNU General Public License /////////////////////////////////////////////////// 2010-07-20 - jeemdesign.com - stripped out all the oscommerce functions and includes to make this standalone and easier to set with a cron job. I put mine in my admin dir (which has an additional .htaccess password on it, so it is not open to public). Here are the lines to edit below: $dbhost_osc='localhost'; // your db host $dbuser_osc='user_name'; // your db username $dbpass_osc='aBc1234#'; // your db password $dbase_osc='my_cre_db1'; // your db name define('NOTIFICATION_HTTP_SERVER', 'http://www.1234-website-abc.com'); // your http website URL define('DIR_WS_CATALOG', '/'); // your catalog subdirectory if any define('HTTPS_SERVER', 'https://www.1234-website-abc.com'); // your https website URL define('STORE_NAME', 'My Store Name'); // Your Store Name $from = "From: Customer Service<[email protected]>\r\n"; // Change to your store's preferred FROM email address Place this (cron_product_customer_notifications.php) in an .htaccess password protected directory, then you can schedule the following command in cron (provided your server has lynx available to you). Command: lynx -auth=adminusername:PaSsw0rd123 -dump http://www.1234-website-abc.com/admin/protectedcron/cron_product_customer_notifications.php * In the command above: * the htaccess credentials are passed via "-auth=" followed by adminusername:PaSsw0rd123 * -dump sends the results to standard output, which, if you have the results of the cron job emailed to you, you will get a daily report of product notifications. * The last part is the URL to the file. "protectedcron" is a subfolder in the admin directory. The admin directory has the .htaccess username and password on it. This is working for me - let me know if you have any trouble with it. Hope it makes sense and is helpful. I've taken a lot of stuff from the community and want to give back a bit when possible. Thanks! Viva la Open Source! */ $max_mails = 50; // throttle the # of emails to avoid looking like a spammer // make db connection $dbhost_osc='localhost'; // your db host $dbuser_osc='user_name'; // your db username $dbpass_osc='aBc1234#'; // your db password $dbase_osc='my_cre_db1'; // your db name $link = mysql_connect($dbhost_osc,$dbuser_osc,$dbpass_osc); if (!$link) { die('Not Connected to Server: ' . mysql_error()); } //select db if(!mysql_select_db($dbase_osc,$link)) { print "no such dbname"; } // Automatic Stock Notification define('NOTIFICATION_HTTP_SERVER', 'http://www.1234-website-abc.com'); // your http website URL define('DIR_WS_CATALOG', '/'); // your catalog subdirectory if any define('HTTPS_SERVER', 'https://www.1234-website-abc.com'); // your https website URL define('TEXT_NOTIFICATION1', 'Dear '); define('TEXT_NOTIFICATION2', ',' . "\n\n" . 'According to your '); define('TEXT_NOTIFICATION3', ' Product Notifications request, we wish to inform you that '); define('TEXT_NOTIFICATION4', ' is now in stock: ' . NOTIFICATION_HTTP_SERVER . DIR_WS_CATALOG . 'product_info.php?products_id='); define('TEXT_NOTIFICATION4b', "\n\n" . 'Please visit ' . NOTIFICATION_HTTP_SERVER . ' if you would like to make a purchase.' . "\n\n" . 'Your product notification for '); define('TEXT_NOTIFICATION5', ' has been removed. If you would like to receive future stock notifications for '); define('TEXT_NOTIFICATION6', ', you must login to your '); define('TEXT_NOTIFICATION7', ' account, navigate to the '); define('TEXT_NOTIFICATION8', ' page, and click the notifications button.' . "\n\n" . 'Warm greetings from your friends at '); define('EMAIL_SUBJECT', 'Now In Stock: '); define('HEADING_TITLE','Generating customer emails for products back in stock'); define('TABLE_HEADING_STATUS','Status'); define('TABLE_HEADING_FIRSTNAME','First Name'); define('TABLE_HEADING_LASTNAME','Last Name'); define('TABLE_HEADING_CUSTOMERS_ID','Customer Id'); define('TABLE_HEADING_PRODUCTS_NAME','Products Name'); define('TABLE_HEADING_PRODUCTS_ID','Products Id'); define('TABLE_HEADING_EMAIL_ADDRESS','Email Address'); define('TEXT_NUMBER_OF_EMAILS',' %s out of %s emails sent'); define('TABLE_PRODUCTS_NOTIFICATIONS', 'products_notifications'); define('TABLE_CUSTOMERS', 'customers'); define('TABLE_PRODUCTS', 'products'); define('TABLE_PRODUCTS_DESCRIPTION', 'products_description'); define('STORE_NAME', 'My Store Name'); // Your Store Name ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Automated Stock Notifications</title> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"> <!-- body //--> <table border="0" width="100%" cellspacing="2" cellpadding="2" align="center"> <tr> <!-- body_text //--> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td><h3>Automated Stock Notifications</h3><br></td> <td align="right"></td> </tr> </table></td> </tr> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td><?php echo TABLE_HEADING_STATUS; ?></td> <td><?php echo TABLE_HEADING_FIRSTNAME; ?></td> <td><?php echo TABLE_HEADING_LASTNAME; ?></td> <td align="center"><?php echo TABLE_HEADING_CUSTOMERS_ID; ?></td> <td align="center"><?php echo TABLE_HEADING_PRODUCTS_NAME; ?></td> <td><?php echo TABLE_HEADING_PRODUCTS_ID; ?></td> <td align="center"><?php echo TABLE_HEADING_EMAIL_ADDRESS; ?></td> </tr> <?php // BEGIN Automatic Stock Notification // jeemdesign.com - remove all product notifications for product_id = 0 if they exist $products_zero_ct="select * from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = 0;"; $resultset_zeroct = mysql_query($products_zero_ct,$link); $num77 = mysql_num_rows($resultset_zeroct); if ($num77 !== 0) { $products_zero_qry="delete from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '0' "; $resultset_pz = mysql_query($products_zero_qry,$link); print "CLEANUP: Blanked " . $num77 . " records where Product_ID = 0<br><br>"; } else { print "CLEANUP: No records with Product ID = 0 to clean up<br><br>"; } //look for notifications to process $audience = array(); $prod_notify_qry="select distinct pd.products_name, p.products_id, pn.customers_id, c.customers_firstname, c.customers_lastname, c.customers_email_address from " . TABLE_CUSTOMERS . " c, " . TABLE_PRODUCTS_NOTIFICATIONS . " pn , " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where c.customers_id = pn.customers_id and pn.products_id = p.products_id and p.products_quantity > 0 and p.products_id = pd.products_id and pn.products_id != '0'"; $resultset_notify = mysql_query($prod_notify_qry,$link); $num1 = mysql_num_rows($resultset_notify); if ($num1 !== 0) { print $num1 . " Product Notifications to Process<br><br>"; } else { print "No Product Notifications to Process<br><br>"; } // process each notification, create message, send email, remove notification while ($products = mysql_fetch_array($resultset_notify)) { $audience[$products['customers_id']] = array( 'firstname' => $products['customers_firstname'], 'lastname' => $products['customers_lastname'], 'customers_id' => $products['customers_id'], 'products_name' => $products['products_name'], 'products_id' => $products['products_id'], 'email_address' => $products['customers_email_address']); } reset($audience); $mailed = 0; while (list($key, $value) = each ($audience)) { if ($mailed < $max_mails) { $message2 = TEXT_NOTIFICATION1 . $value['firstname'] . ' ' . $value['lastname'] . TEXT_NOTIFICATION2 . STORE_NAME . TEXT_NOTIFICATION3 . $value['products_name'] . TEXT_NOTIFICATION4 . $value['products_id'] . TEXT_NOTIFICATION4b . $value['products_name'] . TEXT_NOTIFICATION5 . $value['products_name'] . TEXT_NOTIFICATION6 . STORE_NAME . TEXT_NOTIFICATION7 . $value['products_name'] . TEXT_NOTIFICATION8 . STORE_NAME; $to = $value['firstname'] . ' ' . $value['lastname'] . '<' . $value['email_address'] . '>'; $subject = EMAIL_SUBJECT . $value['products_name']; $from = "From: Customer Service<[email protected]>\r\n"; // Change to your store's preferred FROM address mail($to, $subject, $message2, $from); // increase counter of # mailed $mailed++; // delete the notification now that mail is sent $delete_notification_qry="delete from " . TABLE_PRODUCTS_NOTIFICATIONS . " where products_id = '" . $value['products_id'] . "' and customers_id = '" . $value['customers_id'] . "' "; $resultset_del = mysql_query($delete_notification_qry,$link); //echo $delete_notification_qry . "<br>"; if ($resultset_del) { print "Removed Product Notifications from table that have been emailed.<br><br>"; } else { print "None Removed from Product Notification Table<br><br>"; } ?> <td>DONE: </td> <?php } else { ?> <td>TODO: </td> <?php } ?> <td><?php echo $value['firstname']; ?></td> <td><?php echo $value['lastname']; ?></td> <td><?php echo $value['customers_id']; ?></td> <td><?php echo $value['products_name']; ?></td> <td><?php echo $value['products_id']; ?></td> <td><?php echo $value['email_address']; ?></td> </tr> <?php } // END Automatic Stock Notification ?> <tr> <td colspan=7><br><?php echo sprintf(TEXT_NUMBER_OF_EMAILS, $mailed, mysql_num_rows($resultset_notify)); ?></td> </tr> </table></td> </tr> </table></td> </tr> </table></td> <!-- body_text_eof //--> </tr> </table> <!-- body_eof //--> </body> <?php mysql_close($link); ?> </html>
  8. tweaking the world

  9. I realize this is a couple years late, but I have a client that occasionally uses animated gifs - everything else is jpg - and yes, even though it's not fashionable or hip, it works for his business and he knows how to make them - so, i edited the "On the Fly" Auto Thumbnailer using GD Library to simply ignore any gifs from processing. I searched for code for this for a long time and didn't find it for this particular contribution. I hope this helps someone. Basically in the function tep_image in catalog/includes/functions/html_output.php - I added one if statement: This: if(stristr($src, '.gif')) { $dont_calculate = 1; } Here's the whole function so you can see where to slam it: // "On the Fly" Auto Thumbnailer using GD Library, servercaching and browsercaching // Scales product images dynamically, resulting in smaller file sizes, and keeps // proper image ratio. Used in conjunction with product_thumb.php t/n generator. function tep_image($src, $alt = '', $width = '', $height = '', $params = '') { // if no file exists display the 'no image' file if (!is_file($src)) { $src = "images/no_image.jpg"; } // Set default image variable and code $image = '<img src="' . $src . '"'; // Don't calculate if the image is set to a "%" width if (strstr($width,'%') == false || strstr($height,'%') == false) { $dont_calculate = 0; } else { $dont_calculate = 1; } // Dont calculate if a pixel image is being passed (hope you dont have pixels for sale) if (!strstr($image, 'pixel')) { $dont_calculate = 0; } else { $dont_calculate = 1; } // DO NOT PROCESS GIFS - jeemdesign.com if(stristr($src, '.gif')) { $dont_calculate = 1; } // END - DO NOT PROCESS GIFS -jeemdesign.com // Do we calculate the image size? if (CONFIG_CALCULATE_IMAGE_SIZE && !$dont_calculate) { // Get the image's information if ($image_size = @getimagesize($src)) { $ratio = $image_size[1] / $image_size[0]; // Set the width and height to the proper ratio if (!$width && $height) { $ratio = $height / $image_size[1]; $width = intval($image_size[0] * $ratio); } elseif ($width && !$height) { $ratio = $width / $image_size[0]; $height = intval($image_size[1] * $ratio); } elseif (!$width && !$height) { $width = $image_size[0]; $height = $image_size[1]; } // Scale the image if not the original size if ($image_size[0] != $width || $image_size[1] != $height) { $rx = $image_size[0] / $width; $ry = $image_size[1] / $height; if ($rx < $ry) { $width = intval($height / $ratio); } else { $height = intval($width * $ratio); } $image = '<img src="product_thumb.php?img=' . $src . '&w=' . tep_output_string($width) . '&h=' . tep_output_string($height) . '"'; } } elseif (IMAGE_REQUIRED == 'false') { return ''; } } // Add remaining image parameters if they exist if ($width) { $image .= ' width="' . tep_output_string($width) . '"'; } if ($height) { $image .= ' height="' . tep_output_string($height) . '"'; } if (tep_not_null($params)) $image .= ' ' . $params; $image .= ' border="0" alt="' . tep_output_string($alt) . '"'; if (tep_not_null($alt)) { $image .= ' title="' . tep_output_string($alt) . '"'; } $image .= '>'; return $image; }
  10. OK, looks like an instruction is missing... ** Create a directory: /catalog/admin/quickbooks (i assumed permissions 777) This is set up in the configure.php: define ('DIR_FS_CATALOG_QUICKBOOKS', DIR_FS_ADMIN . 'quickbooks/'); This is where the IIF files get uploaded. It simply didn't exist. Maybe the error reporting only goes to the non-existent qb_logs.php which then processes the errors? Looks like a couple missing pieces are making this a bit of a puzzle. It would be nice to see it a bit more organized if they are trying to entice us to buy the pro version :) hope this helps someone! J
  11. Hi all, Looking forward to trying your contribution. I have it installed, but when I go to import INVIMPORT.iif, QBACCT.iif and QBMISC.iif per your instructions, I hit "update", it thinks for a bit, then returns me to the same screen with nothing imported, no error message, no errors in the error log... Just silent error :(. Is there a way to import these iif files into the db manually? Or is there perhaps permission issues to a temp directory etc? Another thing I noticed (besides the missing Event logs which i haven't fixed yet - do you have a link to that file?) is that in the install instructions, it says to add: includes/javascript/spiffCal folder (may already exist depending on your other contributions) This was not included with the contribution, but I looked in my install (MS2) and there is a folder in /includes/javascript called "spiffyCal" - Is that the same thing? Is there a problem with the slight difference in naming? For the record, in the getting started guide, I think adding a little instruction regarding the production of iif files from QB would have saved me a lot of time -(for instance just adding the navigation in Quickbooks 2009: File / Utilities / Export / Lists as IIF files... I was hacking around with Lists... Item List... Export... csv... got lost there hehe. Please let me know if you have a clue why my QB iif files will not import? I am stuck until I can get that initial data in correct? Thanks, Jim
  12. Hi all, Looking forward to trying your contribution. I have it installed, but when I go to import INVIMPORT.iif, QBACCT.iif and QBMISC.iif per your instructions, I hit "update", it thinks for a bit, then returns me to the same screen with nothing imported, no error message, no errors in the error log... Just silent error :(. Is there a way to import these iif files into the db manually? Or is there perhaps permission issues to a temp directory etc? Another thing I noticed (besides the missing Event logs which i haven't fixed yet - do you have a link to that file?) is that in the install instructions, it says to add: includes/javascript/spiffCal folder (may already exist depending on your other contributions) This was not included with the contribution, but I looked in my install (MS2) and there is a folder in /includes/javascript called "spiffyCal" - Is that the same thing? Is there a problem with the slight difference in naming? For the record, in the getting started guide, I think adding a little instruction regarding the production of iif files from QB would have saved me a lot of time -(for instance just adding the navigation in Quickbooks 2009: File / Utilities / Export / Lists as IIF files... I was hacking around with Lists... Item List... Export... csv... got lost there hehe. Please let me know if you have a clue why my QB iif files will not import? I am stuck until I can get that initial data in correct? Thanks, Jim
  13. I am also trying to figure out if this change to the Transaction ID is going to effect this module before I wake up some morning to failing transactions.. Anybody? Thanks, J
  14. I am surprised nobody is chattering about this yet (except us). I got the email too and was a bit impressed that USPS was being slightly proactive. I suppose we won't hear anything until they implement this on Monday morning. Then people will be freaking out if it breaks stuff... I am watching this thread! Cross your fingers - maybe everything will be fine.
  15. Unfortunately, I don't think our problem is going to help you... our problem turned out to be security related between two machines (one was blocking the other). After much hair pulling, it turned out to be unrelated to USPS. Still, in my research, I see evidence of a couple times that USPS did have troubles - and I know they once changed the API all of the sudden and crippled my stores. I wish you luck. I was able to correspond directly to usps regarding the API at: USPS Internet Customer Care Center [email protected] They responded fairly quickly, although they basically said they weren't having any trouble. And I am sure that if they really were having server trouble with rate calculations, there would be a huge outcry from ecommerce stores everywhere. As you see, i didn't have one reply on this until... you did :( Sorry. PS - there's a debugging email you can have the xml response sent to you (if you are using USPS methods contrib). It's a commented bit of code in usps.php. That's when I figured that USPS was actually sending the response fairly quickly... the email arrived almost immediately... Good luck! J
×
×
  • Create New...