Troubleshooting

Table of Contents

Cart

Downloads

Checkout & other Forms

Backend

Email Problems

PHP and Performance

Subscriptions

Topics

Memory Errors

  • Make sure you have at least 32-64 mb of memory allocated to your webserver. This can usually be adjusted using an .htaccess file, or by contacting your server administrator

PHP NOTICE Errors

By default PHP does not show "NOTICE" errors. They're usually minor items that generally don't affect performance. By all means, please report them in our forums, but don't be alarmed about them. I generally suggest that you disable NOTICE errors in your PHP settings, after which point you won't see them again, and generally the system will perform fine even with NOTICES being reported.

PHP WARNINGS Errors

If you receive a PHP error that ways WARNING and that error is tied to a CartThrob action, please report this in our forums. It is generally due to a bug, and something we will need to fix.

Checkout Errors

Most problems with completing checkout are related to establishing a connection with the gateway provider, and using proper testing information

  • IF you are using an off-site payment gateway that requires the use of "Extload.php (will be noted in the payment gateway settings)" and it's throwing an error like "gateway not specified" make sure you don't have $config['uri_protocol'] = "QUERY_STRING"; set up in your config file. If you do, normal segments will be ignored, and the gateway that's being passed to Extload in the URL may not be able to be recognized.

  • If checkout immediately redirects to the home page (and that wasn't intended), more than likely there was an error processing the cart and it was deleted. See related topic below

  • If you receive an internal server error (500 error) when checking out, try changing EE's redirect method: Go to EE settings > admin > system administration > output and debugging preferences > redirection method and change it from the default "location" to "refresh".

  • Even in test mode, most direct payment gateways require secure connections. See the "secure action" form parameter for more information about making secure connections, and this article on securing checkout pages

  • Use proper test credit card data. Most of the time we use Visa number 4111 1111 1111 1111 for testing. Your merchant account provider may require specific card numbers however. Check with them to make sure you're using correct testing credit card numbers

  • Use proper testing amounts. Sometimes merchant account providers require specific values during testing. For instance, 10.00 might always be a successful request where 11.00 might always be a failure. This varies by merchant account provider, so be sure to consult with their documentation.

  • If multiple orders are being logged for one order, this is generally normal. CartThrob creates an order for each attempted order. It updates statuses of completed orders to the status you've set in cartthrob settings » orders. If you want to be able to distinguish between completed and failed orders, make sure to configure statuses for orders.

  • If you are using an "offsite" gateway (like PayPal Standard) and your checkout is not completing, but you end up at the homepage for your site, make sure that you do not have a page at the root of your site called index.html that you are using to hide your site until your site launches. What's probably happening is that you've removed index.php as the site's index.php page so that it's obscured, and unfortunately when ExpressionEngine is trying to complete a form submission, it's trying to submit it to your index.html (the default) page, rather than your index.php page. If you get stuck with a URL that looks something like this on the index page: yoursite.com?ACT=123&G=asdf&M=jkl EE's probably trying to submit data to your index.html page. Which won't work. Get rid of the index.html page. You can put a coming soon page in your EE's index template, and it'll do the same job.

  • If you receive an error that looks something like this: "Recv failure: Connection reset by peer (56)" make sure you have OpenSSL installed on your server (you may need to speak with your host.)

Creating Member at Checkout

The most common problem with new members not being created is that the user is already logged in. If you're testing the member creation while currently logged into the EE backend, a new member will not be created.

Orders Channel Issues

If you are capturing customer data, but it's not being added to the orders channel double check the following items. The following list assumes you originally used CartThrob's auto-install templates to get started, and that you have an orders channel.

  • Check the orders channel settings. For instance, if you are capturing shipping_state but the customer's shipping state isn't being added to the orders channel make sure that you have "mapped" or selected a field for that data to be stored in. Look in the list of fields in cartthrob settings » orders and make sure "Shipping State" has been selected

  • Make sure you don't have another field mapped to the same field already. If you map two things to one field, only one of them will be used.

  • If you are capturing a custom field, make sure you have a matching field set up in the orders channel. If you are capturing "gift_note" during checkout, make sure you have a field with the short name of "gift_note" in the orders channel

Download Problems

  • Always use debug="yes" parameter when starting to troubleshoot download problems. That parameter when used with download_file_form and get_download_link tags will output a variety of information about your attempted download. Generally path parsing issues, are the key problem with downloads, and debug parameter will help you sort those issues out.
  • If your download file is something uncommon (something rather than .gif, .jpg, .mov, .zip, etc.) like an .epub file or other file format that's not often found on a website, EE may not have a "mime" type configured for this file. You can edit EE's mime types by editing the file at the following location: "system > expressionengine > config > mimes.php". You will need to add a line to handle your specific mime type. When using the debug parameter (noted above) the mime type should be output if it's already set in EE's mime types. If it's not listed in the debug output, you'll need to add it to the mimes.php file.

Add to cart problems

If you're trying to click the "add to cart button" and nothing happens, or items are added to the cart with no price, try this:

  • If you receive an internal server error (500 error) or a blank page when adding to or updating the cart, try changing EE's redirect method: Go to EE settings > admin > system administration > output and debugging preferences > redirection method and change it from the default "location" to "refresh".

  • If you are trying to add products from a product channel, make sure that channel has been mapped; make sure your product channel is set up here: CartThrob Settings » products » product channels.

  • Make sure your server's time isn't really far off of real time. It's possible that the user's session is expiring as soon as it's generated if your server time is far off.

  • Make sure your computer's time isn't really far off of real time. It's possible that when you use a browser on a computer with a bad date, that a cookie can't be written, or expires as soon as it's written due to bad computer time.

  • Make sure you have cookies enabled on your browser.

  • Double check your cookie settings in EE. You most likely want to set a wildcard domain as your cookie domain, ie. .yourdomain.com.

  • If you're using Internet Explorer, and you've attempted to secure your pages with an HTTPS connection, make sure you can see the lock icon on your page. If you can't see the lock icon, then you haven't secured your page. IE won't allow forms to submit securely on an insecure page.

  • If items are being added to the cart, but the price is always zero, make sure you don't have a global price of ZERO set in cartthrob's product settings.

  • If items in the cart are being shared and are viewable by more than one user across different browsers, disable "Twomile Login Redirect" extension

Carts are being deleted and other cart loss issues

If you are experiencing intermittent cart loss, or cart loss on a specific browser, or crashing in Internet Explorer try one of the following:

  • Make sure you've upgraded CartThrob to 2.0436+ or greater. Previous builds had issues with session loss on some browsers and hosting platforms

  • Change the fingerprinting method used for session generation. Change the value in CartThrob settings > general > "Use Fingerprinting For Sessions" to "no" or try a different "Fingerprinting Method"". None of the methods will hurt so if you find one that works better for you, then use that setting. Each server is set up slightly different, so some sessions generation methods work better than others

  • Try turning off fingerprinting for sessions altogether if changing the method doesn't work.

  • If you are gathering lots of item_options and your customer's cart is being deleted after adding a roughly consistent number of items to the cart, it's possible you have a data overload. You may need to change your cart mysql table format from "text" to "mediumtext"

  • In EE's settings go to Admin > System Administration > Database Settings and turn off SQL Query Caching. Your database calls will go up, but dynamic data will be more accurate. read more...

  • Make sure the server time is not far off of real time.

  • Make sure cookies are enabled on your machine

  • Make sure that you aren't switching domains from one page to the next (www.yoursite.com and yoursite.com are seen as 2 different sites. )

  • Make sure that pages set with an HTTPS:// connection are secure. Internet explorer especially dislikes insecure content being displayed on secure pages.

Internet Explorer is crashing

If you are using CartThrob and you find that Internet Explorer crashes, or times out, try one of the following:

  • If you are using jQuery, upgrade to the latest version.

  • If you are using HTTPS requests, make sure that all files being loaded (css, javascript, objects) are also being loaded using HTTPS. Explorer will not allow an insecure page to finish loading by default.

  • If you are using Google analytics on an HTTPS connection, make sure that Google Analytics scripts are also being loaded securely through HTTPS.

Form submissions do not work correctly

When customer submits a form, only part of their data is captured, or the wrong data is captured, or no data seems to be captured.

  • If you are running Suhosin Security Software on your Apache host installation, you may need to modify your Suhosin configuration. You can either modify this in your PHP.INI file (if available... if not contact your host admin)

    suhosin.get.max_name_length = 256
    suhosin.get.max_totalname_length = 256
    suhosin.post.max_name_length = 256
    suhosin.post.max_totalname_length = 256
    suhosin.request.max_varname_length = 256
    suhosin.request.max_totalname_length = 256

Or modify your .htaccess file with the following:

    php_value suhosin.get.max_name_length = 256
    php_value suhosin.get.max_totalname_length = 256
    php_value suhosin.post.max_name_length = 256
    php_value suhosin.post.max_totalname_length = 256
    php_value suhosin.request.max_varname_length = 256
    php_value suhosin.request.max_totalname_length = 256

In either case, if your server throws an error when making those changes, just undo them, and go talk to your server admin about adjusting the settings in some other way.

  • Check to make sure that you don't have form tags within form tags CartThrob form tags (checkout_form, add_coupon_form, add_to_cart_form) generate HTML forms. If you try nesting a form tag within a form tag the last form tag will be the only form recognized. HTML does not allow nested forms, so trying to nest them will cause problems.

  • If using the add_coupon_form make sure it isn't nested inside the checkout_form You can add a field to the checkout called coupon_code instead

  • Check EE's secure forms. If submitting data via an AJAX submission, you may need to disable the following EE setting: Admin » security and privacy » security and sessions » Process form data in Secure Mode. Set this setting to "no". By default, all CartThrob forms process data in "secure mode" using EE's built in systems. Each form includes a random hash that is used to reduce form spamming. Generally this is a low necessity security system, mostly reducing the annoyance of form spamming. If you send the same form many times via ajax, you will need to turn off this setting, or reload the form each time it's sent via ajax to generate a new secure hash.

Very slow performance on high traffic websites

  • In CartThrob's settings » global turn on Do session garbage collection in a cron job? When CartThrob carts are created, they're stored in the database. Normally the database is cleaned out when a customer visits. If the number of customers is very high, and a large number of carts are being generated, CartThrob can slow down while it checks for abandoned and expired carts to delete. Use a "cron job" to clean carts from the database instead on a timed basis.

Unable to delete or add settings line items

  • Update CartThrob. There may be a conflict with jQuery that can be fixed with an upgrade

  • If you are using FireFox 7, try a different browser.

Email notification problems

If you are not receiving email notifications when an order is placed, try the following:

  • Make sure you are capturing the customer's email address

  • Make sure you have notifications turned on in CartThrob's settings. Go to the email settings tab and turn them on for the admin and customer

  • Make sure your email address is correct so that emails sent are going to the right place.

  • Create your email template in a standard EE template, and test there. Use the following code as a basis to create your template. The following code will know which order is being referenced automatically. See submitted_order_info tag for more details

    <strong>This is a test email</strong>
    {exp:cartthrob:submitted_order_info}
        {if authorized}
            Your payment is a success!
            Transaction ID: {transaction_id}
            Your total: {cart_total}
            Your order ID: {order_id}
            {exp:cartthrob:order_items order_id="{order_id}" variable_prefix="item_"}
                {item_entry_id}
                {item_title}
            {/exp:cartthrob:order_items}
        {if:elseif declined}
            Your credit card was declined: {error_message}
        {if:elseif processing}
            Your payment is currently being processed. We will contact you when the processing has completed: {error_message}
        {if:elseif failed}
            Your payment failed: {error_message}
        {/if}
    {/exp:cartthrob:submitted_order_info}
  • Try a simple template in the email notification. Instead of a huge template, try something like: "TEST" and see if that sends correctly.

  • If you are using Rackspace Cloud servers add the following line to an .htaccess file

    php_value mail.force_extra_parameters -fmail@ADD_YOUR_DOMAIN_HERE.com
  • Try changing ExpressionEngine's email configuration to an alternate method. Try "sendmail", or "smtp" if possible. You may have to consult your host for more information about using SMTP.

  • If you are processing more than 100 emails an hour, you may be maxing out your host's email sending limits. Please contact your server host to find out what your sending limits are.

Shipping is not updating

If shipping costs are not changing,

  • Make sure that you have shipping set up in CartThrob's shipping settings

  • In any price related shipping setting, make sure you're not using anything but numbers. Adding items like currency symbols or plus symbols or other text to a field that expects a number (eg. use 10.05 rather than $10.05) may cause problems calculating shipping amounts.

  • If you are using a location based shipping plugin, make sure that you are capturing your customer's location information. For instance, if your shipping is based on country code, make sure you are capturing the customer's country_code. Use the following sample code in a new template to test:

    <div>
    {exp:cartthrob:customer_info}
        {exp:cartthrob:save_customer_info_form return=""}
            Select a country: {exp:cartthrob:country_select name="country_code" selected="{customer_country_code}"}
            <br />current selected country code: {customer_country_code}
            <input type="submit" name="Submit" /> 
        {/exp:cartthrob:save_customer_info_form}
    {/exp:cartthrob:customer_info}
    </div>  
    Shipping cost: {exp:cartthrob:cart_shipping}
    {exp:cartthrob:debug_info} 
    {!-- this will output all saved customer data. 
         If the customer's country code is in there, and correct, 
         and you still have a problem, post in the forum--}

Problems when using with Structure add-on

It's possible that when used together Structure URLs will be rewritten incorrectly. CartThrob and Structure are compatible, however, if you used ExpressionEngine's Pages module in the past before using the Structure Add-on you may have issues using CartThrob and Structure together. Check to see if EE's config.php file has the following item in it:

$config['site_pages'] = "Array";

If your config.php file has that line item in it, make a backup of your config.php file, then comment out, or delete that line item from your config.php file. The Pages module may have erroneously written that in the past, and it will cause a problem with CartThrob and Structure when used together.

Errors while updating CartThrob to the latest version

Control Panel shows "A Database Error Occurred"

This is most likely due to CartThrob's control panel menu. If you encounter this kind of error, you should run this SQL query on your database to manually disable the CartThrob menu.

UPDATE exp_cartthrob_settings SET `value` = 0 WHERE `key` = 'cp_menu';

CRON

  • If you are using CRON jobs that use the extload.php file, make sure to update the system folder location in the extload.php file.

  • If you are using Media Temple servers, and trying to set up a CRON job, make sure to prefix the cron job string with "perl"