Sending a product with a Text Modifier option to Checkout for the Recharge Checkout on BigCommerce

On BigCommerce, text modifiers let customers enter information as a way to customize the product. The main use for this is product personalization, i.e., adding a name or initials to the product. See Text/Number Fields to learn more. This guide explains how to pass this product data from the product display page to a Recharge Checkout.

🚧

Note: To streamline and enhance the platform, Recharge will no longer support BigCommerce after December 31, 2025. Merchants may continue using BigCommerce until the feature reaches end of life in October 2026, however, Support will be limited after December 31, 2025. Merchants using BigCommerce are encouraged to begin migrating to Shopify, which Recharge will continue to support. Learn more in Shopify’s guide on Migrating to Shopify.

📘

Platform

  • Recharge Checkout on BigCommerce

Adding script with Page Builder

The code below is meant to be added via Page Builder to a specific subscription product page that has a text modifier.

  1. Navigate to Products and click the three dots
  2. Select View in Page Builder
  3. Select Layers > Product Below Content > Layout > Column 1 > HTML

Passing modifiers to checkout

The script below shows passing text modifiers to checkout along with other product data. Use the example as a blueprint for your own store.

  • Make use of BigCommerce helpers for populating product data in the script. See Handlebars Helpers Reference to see all available product objects.
  • A modifier can be passed to checkout using the Recharge Checkout API line_items.properties. Any key-value pair can be passed to this attribute, allowing for flexibility when passing product data.

Full example code

<div class="modal-body quickView">
    {{> components/custom/product-view/product-view schema=false}}
</div>

<script type="text/javascript"> 
var _learnq = _learnq || []; 

 var item = {
   Name: "{{product.title}}", 
   ProductID: "{{product.id}}",
   ImageURL: "{{getImage product.main_image 'product_size' (cdn theme_settings.default_image_product)}}", 
   URL: "{{product.url}}",
   Brand: "{{product.brand.name}}", 
   Price: "{{product.price.without_tax.value}}",
   CompareAtPrice: "{{product.price.rrp_without_tax.value}}"
  };

_learnq.push(['track', 'Viewed Product', item]); 

_learnq.push(['trackViewedItem', {
   Title: item.Name, 
   ItemId: item.ProductID,
   ImageUrl: item.ImageURL, 
   Url: item.URL,

   Metadata: { 
     Brand: item.Brand,
     Price: item.Price, 
     CompareAtPrice: item.CompareAtPrice
 } 
 }]);
</script>

<script text="text/javascript">
    /**
     * @param {string} htmlString - A string of html.
     * @returns {ChildNode} - The Node created from html string provided.
     */
     function createElementFromHTML(htmlString) {
        const div = document.createElement("div");
        div.innerHTML = htmlString.trim();
        return div.firstChild;
    }
    
    /**
     * Takes in a single BigCommerce product and sends it to ReCharge Checkout. This does not affect
     * the current BigCommerce cart.
     * @param {object} root - The root object passed into the function.
     * @param {number} root.productId - The BigCommerce Product ID for the product.
     * @param {number} root.variantId - The BigCommerce Variant ID for the product.
     * @param {number} root.quantity - The quantity of the product to purchase.
     * @param {number} root.price - The price of a single product in Cents (ie $1.00 => 100).
     * @param {number} root.weight - The weight of the product in grams.
     * @param {string} root.title - The name of the product.
     * @param {string} root.subtitle - A subtitle that will be displayed below the product name on
     * the ReCharge checkout page.
     * @param {'days' | 'weeks' | 'months' | 'years'} root.deliveryUnit - The unit of time used when
     * determining how often to deliver a subscription.
     * @param {number} root.deliveryFrequency - The number used in combination with deliveryUnit to
     * determine how often to deliver a subscription.
     * @param {boolean} root.requiresShipping - Indicator if the product requires physically shipped.
     * @param {string} root.note - An order note to add to the ReCharge order.
     * @param {object} root.extras - An object containing key/value pairs of extra information to
     * attach to the ReCharge order. This object is converted into a
     * [{key: "key1", value: "value1"}, {key: "key2", value: "value2"}] format.
     */
     function singleItemSubscriptionCheckout({
                                                productId,
                                                variantId,
                                                quantity,
                                                price,
                                                weight,
                                                title,
                                                subtitle,
                                                deliveryUnit,
                                                deliveryFrequency,
                                                requiresShipping,
                                                modifier,
                                                note,
                                                extras,
                                            }) {
        const config = {storeDomain: "store-vn0shauajx.mybigcommerce.com"};
        var product = {
            properties: {
              shipping_interval_unit_type: "Months",
              shipping_interval_frequency: "1",
              modifiers:{}
            },
            product_id: productId,
            variant_id: variantId,
            quantity: quantity,
            price: price,
            grams: weight,
            title: title,
            variant_title: subtitle,
            order_interval_unit: deliveryUnit,
            order_interval_frequency: deliveryFrequency,
            requires_shipping: requiresShipping,
        };
        if (modifier!=""){
          product.properties["modifiers"] = modifier;
          product["variant_title"]= "Custom Mssg: "+modifiers[1964];
        console.info(product);
        }
        const cart = {note, note_attributes: [], items: [product]};
        Object.entries(extras || {}).forEach(([name, value]) =>
            cart.note_attributes.push({name, value})
        );
        const checkoutUrl = `https://checkout.rechargeapps.com/r/checkout?domain=${config.storeDomain}`;
        const payload = JSON.stringify(cart);
        const formTemplate = `<form method="post" action="${checkoutUrl}" style="display: none;"><input name="cart_json" type="hidden" value='${payload}'></form>`;
        const $form = createElementFromHTML(formTemplate);
        document.body.appendChild($form);
        $form.submit();
    }
    
    var _learnq = _learnq || [];
    
    if (item.ProductID=="73060") {
        var element= document.querySelector("#form-action-addToCart");
        console.log(element);
        element.value="Join SPREE club";
        element.removeAttribute("data-reveal-id");
        element.addEventListener("click", (e) => {
            e.preventDefault();
            var product_modifier = {"1964": $("input[name='attribute[1964]']").val()};
            singleItemSubscriptionCheckout({
                productId: 73060,
                variantId: 74364,
                quantity: 1,
                price: 4999,
                weight: 0,
                title: "SPREE Club Monthly Subscription Digital",
                subtitle: "Delivery Every 1 Month",
                deliveryUnit: "month",
                deliveryFrequency: 1,
                requiresShipping: false,
                modifier: product_modifier,
            });
        });
    }      
    else if (item.ProductID=="72440"){
        var element= document.querySelector("#form-action-addToCart");
       console.log(element);
       element.value="Join SPREE club";
        element.removeAttribute("data-reveal-id");
        element.addEventListener("click", (e) => {
        e.preventDefault();
        var product_modifier = {"1964": $("input[name='attribute[1964]']").val()};
        singleItemSubscriptionCheckout({
            productId: 72440,
            variantId: 73603,
            quantity: 1,
            price: 7499,
            weight: 0,
            title: "SPREE Club Monthly Subscription",
            subtitle: "Delivery Every 1 Month",
            deliveryUnit: "month",
            deliveryFrequency: 1,
            requiresShipping: false,
            modifier: product_modifier,
        });
    });
    }
    else {
     document.getElementById("form-action-addToCart").addEventListener('click',function (){
       _learnq.push(['track', 'Added to Cart', item]);
     });
    }
</script>