Upgrading

For this release, you must update the FoxyCart include files you use on your site. View the Sample Code section of the admin for new includes. See the full changelog for more details.

This is a major release which includes a full redesign of the front-end user experience for the cart, checkout and receipt. When you upgrade, your existing templates will be completely overwritten with the new 2.0 fully responsive templates. This includes any category specific emails you are sending. As always, you can customize them to exactly match your design. There have been so many changes in this release, it’s better to start with the new templates than migrating existing ones.

We’re in the process of updating the documentation, but you can see our initial working docs here: https://wiki.foxycart.com/v/2.0/start.

Please view the upgrade notes in the wiki. If you have any issues with v2.0 please let us know.

Features

System Wide

  • All templates have been completely redesigned.
  • We’re now using a single loader.js file for loading required FoxyCart resources to your site. You can get this include code via the sample code section of the FoxyCart admin. This loader is smart in that it checks for jQuery and will include it only if necessary. Important: if you previously relied on the FoxyCart included jQuery for your site, you should add jQuery directly because the loader will only load jQuery after the loader request is complete. Simply add this line to your site if needed:

Improvements, Notes, & Bug Fixes

Cart / Checkout System

  • The default cart, checkout, and receipt templates are now fully responsive and work very well on desktop and mobile devices.
  • A new parent_code product option allows you to bundle products together. Simply set this to the product code of the parent product already in the cart or that is being added with the same add to cart action as the child product. To ensure the child product can’t be removed and to specify how many child products should exist for each parent product, specify a quantity_min as well.
  • The HMAC Cart Validation script has been updated to use the product code and parent_code appended together when validating bundled products. Be sure to update your HMAC Cart Validation library if using bundled products.
  • A new expires product option was added to ensure stale products are not purchases by your customers. You can pass in a number of minutes or a timestamp in the future at which point the product will be removed from the cart. An informational message will be displayed when the order contains a product which will expire within 15 minutes.
  • All ^^ references have been removed. If you’ve customized any language strings which use the ^^ syntax, you will need to update those customizations.
  • For some countries, we now do automatic city and region lookups by postal code.
  • You can now estimate taxes and shipping directly on the cart for non-multiship transactions.
  • When using multiship and there is only one shipment, the cart and checkout experience will function like a normal single shipment transaction.
  • You can now dynamically control the from address and subject of your emails using the following twig syntax: {% set email_subject = 'custom email subject' %} {{ email_subject|fc_output_data('email_subject') }} and {% set email_from = 'someone@example.com' %} {{ email_from|fc_output_data('email_from') }}
  • PayPal is now hidden as a payment option if the order total is 0.
  • You can send h:fc_show_info, h:fc_show_warning, or h:fc_show_error to the cart to display example messages in the cart and checkout. Displaying these messages should help you while styling your templates.
  • The custom_fields node of the fc_json object will now also include visible checkout custom form fields on the receipt page or if the checkout page was posted with an error.
  • Custom fields on the checkout can now be pre populated by setting a corresponding session value in the cart or checkout using a “h:” prefix. Also, upon checkout error, custom field values will be pre-filled via JavaScript values stored in fc_json.custom_fields.
  • Fix for custom fields persisting to the next transaction.
  • Products with the same product code but different product options will be evaluated together when determining if a line item discount should be applied.
  • When listing or retriving customers via the API, the password hashing method used for that customer is now shown instead of the currently configured method for the store.
  • When processing a subscription using a customer with an updated shipping address, the new shipping address will now be used for that subscription (patched back 1.1).

API & XML Datafeed

  • The status field is now included in all transaction XML bodies, not just those utilzing hosted gateways.
  • The store_includes_get call returns html_code_block (formerly just code_block) and javascript_code_block. For legacy purposes, the code_block node remains, but is deprecated.

XML Datafeed: New Fields

  • transactions
    • status
  • transaction_details
    • transaction_detail
      • expires

Admin

  • Template Configuration page added with various settings for your FoxyCart templates.
  • The checkout type previously on the checkout template has been moved to the template configuration page.
  • Added an option to enable/disable TOS on default responsive checkout theme. This option will include a checkbox on your checkout to ask your customers to agree to your Terms of Service.
  • Added an option to show a checkbox to allow users to sign up for your newsletter (note: integration with your mailing list software is still required, we’re just adding the checkbox which is commonly requested).
  • Added option to configure a primary, secondary and tertiary color scheme to match your store templates into your websites design.
  • Added an option to customize your cart display. You can now choose which product options you want to display in cart.
  • Added an option to limit supported Credit Card types. You can now choose what card types should be available to customers on your checkout.
  • Added an option to customize the payment card security code (CSC) usage. By default, the CSC will be required for all new and saved cards. Enable this option to customize how the CSC is required for your store.
  • Added an option to enable/disable FoxyComplete location autocompleter right from the admin.
  • You can now customize which checkout fields are shown and required.
  • Added an option to add custom header and footer JavaScript and/or CSS snippet to the default responsive template. You can also add custom checkout fields directly through the admin and still use the default templates.
  • Added feature to log debug messages to the browser’s console. Enable this option to trigger console.log() calls for the FoxyCart javascript, which can assist with troubleshooting your store.
  • By default, the receipt is now on https but you can configure it to load over http if you have remote conversion scripts which are loaded via http.
  • You can now filter, via whitelist or blacklist, the countries and regions your store does business with and can ship to without needing any custom scripts.
  • The new region lookup via postal code functionality can be disabled in the template configuration screen.
  • Added an option to set your own custom values which you can access via twig and twig.js.
  • Added a feature to the advanced settings page for requiring all products contain an expires product option.
  • Added the expires, quantity_min, and quantity_max fields to the subscription transaction template XML xsd file.

Language Additions

  • cart_add_coupon
  • cart_apply
  • cart_calculate
  • cart_calculate_shipping
  • cart_calculate_taxes
  • cart_cancel_and_continue
  • cart_change
  • cart_details
  • cart_error_parent_code_invalid
  • cart_error_parent_code_not_found
  • cart_error_postal_code
  • cart_error_postal_code_lookup
  • cart_error_subscription_paypal_can_not_modify
  • cart_error_title
  • cart_expired_product_warning
  • cart_future_charge
  • cart_future_charges
  • cart_hide_coupon_input
  • cart_in_your_order
  • cart_items
  • cart_keep_shopping
  • cart_or
  • cart_order_summary
  • cart_payment_method_paypal_express
  • cart_qty
  • cart_shipping_to
  • cart_soon_to_expire_products
  • cart_tax
  • cart_tbd
  • cart_todays_charge
  • cart_total
  • checkout_address
  • checkout_almost_done
  • checkout_card_verification_code
  • checkout_change_password_instructions
  • checkout_confirm_your_purchase
  • checkout_csc
  • checkout_error_expired_products_removed
  • checkout_error_title
  • checkout_found_customer_force_password_reset
  • checkout_location_other
  • checkout_location_pincode
  • checkout_location_postalcode
  • checkout_location_zipcode
  • checkout_name
  • checkout_newsletter_subscribe
  • checkout_no_javascript_message
  • checkout_optional
  • checkout_payment_confirmation
  • checkout_required_piece_missing
  • checkout_required_pieces_missing
  • checkout_shipping_methods_for
  • checkout_sign_in
  • checkout_submit_postal_code
  • checkout_subscription_cancel_helper_text
  • email_html_message_order
  • email_message_updateinfo
  • email_message_subscription_modification
  • email_message_subscription_cancel
  • email_reference_number
  • email_subject_updateinfo
  • email_subject_subscription_cancelled
  • email_subject_subscription_updated
  • email_text_message_order
  • email_view_in_your_browser
  • receipt_items_purchased
  • receipt_message_order
  • validation_error_company

Language Changes

  • cart_checkout
  • cart_empty
  • cart_error_store_not_found
  • cart_shipto
  • cart_warning
  • checkout_as_guest
  • checkout_as_returning_customer
  • checkout_billing_address
  • checkout_card_number
  • checkout_complete_your_purchase
  • checkout_create_an_account
  • checkout_email
  • checkout_email_my_password
  • checkout_error_card_number
  • checkout_error_incorrect_password
  • checkout_instructions_email
  • checkout_no_account_enter_password
  • checkout_pay_with_amazon_fps
  • checkout_pay_with_bitpay
  • checkout_pay_with_dibs
  • checkout_pay_with_dwolla
  • checkout_pay_with_hosted
  • checkout_pay_with_ogone
  • checkout_pay_with_paypal
  • checkout_pay_with_purchase_order
  • checkout_pay_with_twocheckout
  • checkout_purchase_order_number
  • checkout_update_my_information

Language Removals

  • cart_continue_shopping
  • cart_coupon_invalid
  • cart_error_invalid_action
  • cart_please_update
  • cart_tax
  • cart_update_cart
  • checkout_address1
  • checkout_address2
  • checkout_ajax_check_login
  • checkout_ajax_error_check_email
  • checkout_as_guest
  • checkout_cart_subtotal
  • checkout_click_here
  • checkout_confirm_address
  • checkout_confirm_password
  • checkout_copy_billing_address_to_shipping
  • checkout_customer_id
  • checkout_delivery_and_subtotal
  • checkout_discount
  • checkout_downloadables_message
  • checkout_enter_password
  • checkout_error_address1
  • checkout_error_city
  • checkout_error_company
  • checkout_error_country
  • checkout_error_first_name
  • checkout_error_invalid_address
  • checkout_error_invalid_postal_code
  • checkout_error_issue_number
  • checkout_error_last_name
  • checkout_error_phone
  • checkout_error_postal_code
  • checkout_error_retype_password
  • checkout_error_session
  • checkout_error_start_date
  • checkout_error_state
  • checkout_error_subscription_permission
  • checkout_found_customer_info_account_only
  • checkout_handling
  • checkout_issue_number
  • checkout_login_or_register
  • checkout_multiship_use_billing_address
  • checkout_no_account_enter_password_account_only
  • checkout_order_information
  • checkout_order_total
  • checkout_pay_with_credit_card
  • checkout_processing_your_payment
  • checkout_redirecting_to_paypal
  • checkout_retype_password
  • checkout_sending_login_info
  • checkout_shipping_and_handling
  • checkout_shipping_methods
  • checkout_shipping_rate_error_retry
  • checkout_shipto
  • checkout_start_date
  • checkout_state
  • checkout_subscription_permission
  • checkout_tax
  • checkout_tbd
  • checkout_update_shipping_post_message
  • checkout_update_shipping_pre_message
  • checkout_updateinfo_logged_in
  • checkout_updating_customer_information
  • checkout_updating_shipping_options
  • checkout_verification_code_help
  • email_html_post_field
  • email_html_pre_field
  • email_order_total
  • email_subscription
  • email_subtotal
  • email_text_post_field
  • email_text_pre_field
  • email_text_string_pad
  • validation_error_csrf
  • validation_error_passwords_do_not_match