eCommerce Platform (ECP)

Connect with your mobile customers using Shopgate.

Zen Cart

Please note that the Shopgate module for Zen Cart will no longer receive updates.

With Zen Cart and Shopgate, you are able to create your app and mobile website with the following features:

Support Import to Zen Cart
Version 1.3.5 + Orders
Sync Export to Shopgate Mobile Shop
Delivery Status "Shipped"
Order Status "Canceled"
Stock Quantity on Product Detail Page


Customer Account Validate, upon Cart Changes
Login with Desktop Shop Account
Login to Desktop Shop with Mobile Account
Customer Groups/Tier Pricing
Show Desktop Orders on Mobile

Shipping Method
Payment Method
Product Availability

Supported Payments Notes
Direct Debit
Cash on Delivery



Install the Shopgate plugin

Download the plugin

Download the latest plugin via this link and extract the contents of the zip file.

Upload the plugin

You need an FTP client tool, such as FileZilla, to copy the plugin into your Zen Cart shop's root directory.

  1. Connect your FTP program to your server.
  2. Navigate to the Shopgate plugin you just extracted from the previous step. Select the files and drag them to your shop's main directory. When asked, choose to overwrite files and folders.

Set file permissions

Set permissions for the folders config and temp that are located in ext/modules/shopgate/shopgate_library to readable and writeable (774*). Check all checkboxes in the pop-up, and choose Apply to all files and directories. Click OK.

* If you cannot save your changes or configurations, set file permissions to 777.

Modify the codes

In order for the Shopgate plugin to work in your Zen Cart system, a few lines of codes and one file need to be added in your Zen Cart backend. Copy the highlighted codes and paste them at the corresponding lines in your file.

Please keep in mind:

  • Line numbers shown below can be different from those in your file.
  • The paths are relative to your shop’s base folder. E.g. if your osCommerce has been installed at /public_html/catalog/, then the path of includes/filenames.php refers to /public_html/catalog/includes/filename.php.
  • The default folder name admin is used below. If you have renamed your admin folder, please locate the files in that directory.

For more detailed descriptions on how to modify codes in your shop's backend folders, click here.

File 1: includes/filenames.php
define('FILENAME_PRODUCT_LISTING', 'product_listing.php');
define('FILENAME_SPECIALS_INDEX', 'specials_index.php');
define('FILENAME_UPCOMING_PRODUCTS', 'upcoming_products.php');

/******** SHOPGATE **********/
define('FILENAME_SHOPGATE', 'shopgate.php');
/******** SHOPGATE **********/

define('FILENAME_BB_INDEX', 'index.php'); // phpBB main index filename
File 2: admin/includes/header_navigation.php

NOTE: You do NOT need to modify this code if your Zen Cart version is V1.5.0 or later


require(DIR_WS_BOXES . 'configuration_dhtml.php');
require(DIR_WS_BOXES . 'catalog_dhtml.php');
require(DIR_WS_BOXES . 'modules_dhtml.php');
require(DIR_WS_BOXES . 'customers_dhtml.php');
require(DIR_WS_BOXES . 'taxes_dhtml.php');
require(DIR_WS_BOXES . 'localization_dhtml.php');
require(DIR_WS_BOXES . 'reports_dhtml.php');
require(DIR_WS_BOXES . 'tools_dhtml.php');
require(DIR_WS_BOXES . 'gv_admin_dhtml.php');
require(DIR_WS_BOXES . 'extras_dhtml.php');
/******** SHOPGATE **********/
require(DIR_WS_BOXES . 'shopgate_dhtml.php');
/******** SHOPGATE **********/

File 3: admin/includes/languages/english.php
define('ENTRY_NEWSLETTER', 'Newsletter:');
define('ENTRY_NEWSLETTER_YES', 'Subscribed');
define('ENTRY_NEWSLETTER_NO', 'Unsubscribed');

/******** SHOPGATE **********/
include(DIR_FS_CATALOG . "ext/modules/shopgate/base/admin/includes/languages/english.php");
/******** SHOPGATE **********/
File 4: admin/includes/languages/german.php (if exists)
define('ERROR_DESTINATION_DOES_NOT_EXIST', 'Error: Destination existiert nicht.');
define('ERROR_DESTINATION_NOT_WRITEABLE', 'Error: Destination nicht beschreibbar.');
define('ERROR_FILE_NOT_SAVED', 'Error: File upload nicht gespeichert.');
define('ERROR_FILETYPE_NOT_ALLOWED', 'Error: File upload typ nicht erlaubt.');
define('SUCCESS_FILE_SAVED_SUCCESSFULLY', 'Success: File upload erfolgreich gespeichert.');
define('WARNING_NO_FILE_UPLOADED', 'Warning: kein File uploaded.');
define('WARNING_FILE_UPLOADS_DISABLED', 'Warning: File uploads sind deaktiviert in dem php.ini konfigurations file.');

/******** SHOPGATE **********/
include(DIR_FS_CATALOG . "ext/modules/shopgate/base/admin/includes/languages/german.php");
/******** SHOPGATE **********/
File 5: admin/includes/languages/polish.php (if exists)
define('ERROR_DESTINATION_DOES_NOT_EXIST', 'Błąd: Obiekt docelowy nie istnieje %s');
define('ERROR_DESTINATION_NOT_WRITEABLE', 'Błąd: Do obiektu docelowego nie można zapisywać %s');
define('ERROR_FILE_NOT_SAVED', 'Błąd: Wgrywany plik nie został zapisany.');
define('ERROR_FILETYPE_NOT_ALLOWED', 'Błąd: Wgrywanie tego rodzaju plików jest zabronione %s');
define('SUCCESS_FILE_SAVED_SUCCESSFULLY', 'Powiodło się: Wgrywany plik został zapisany. %s');
define('WARNING_NO_FILE_UPLOADED', 'Uwaga: Nie wgrano pliku.');

/******** SHOPGATE **********/
include(DIR_FS_CATALOG . "ext/modules/shopgate/base/admin/includes/languages/polish.php");
/******** SHOPGATE **********/
File 6: admin/orders.php
  $customer_notified = '-1';

$db->Execute("insert into " . TABLE_ORDERS_STATUS_HISTORY . "
(orders_id, orders_status_id, date_added, customer_notified, comments)
values ('" . (int)$oID . "',
'" . zen_db_input($status) . "',
'" . zen_db_input($customer_notified) . "',
'" . zen_db_input($comments) . "')");

/******** SHOPGATE **********/
include(DIR_FS_CATALOG . "ext/modules/shopgate/base/admin/orders.php");
onUpdateOrdersStatus($oID, $status);
/******** SHOPGATE **********/

$order_updated = true;
File 7: admin/includes/functions/general.php
 function zen_remove_order($order_id, $restock = false) {
global $db;
if ($restock == 'on') {
$order = $db->Execute("select products_id, products_quantity
where orders_id = '" . (int)$order_id . "'");

while (!$order->EOF) {
$db->Execute("update " . TABLE_PRODUCTS . "
set products_quantity = products_quantity + " . $order->fields['products_quantity'] . ", products_ordered = products_ordered - " . $order->fields['products_quantity'] . " where products_id = '" . (int)$order->fields['products_id'] . "'");

$db->Execute("delete from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");
$db->Execute("delete from " . TABLE_ORDERS_PRODUCTS . "
where orders_id = '" . (int)$order_id . "'");

$db->Execute("delete from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . "
where orders_id = '" . (int)$order_id . "'");

$db->Execute("delete from " . TABLE_ORDERS_PRODUCTS_DOWNLOAD . "
where orders_id = '" . (int)$order_id . "'");

$db->Execute("delete from " . TABLE_ORDERS_STATUS_HISTORY . "
where orders_id = '" . (int)$order_id . "'");

$db->Execute("delete from " . TABLE_ORDERS_TOTAL . "
where orders_id = '" . (int)$order_id . "'");

$db->Execute("delete from " . TABLE_COUPON_GV_QUEUE . "
where order_id = '" . (int)$order_id . "' and release_flag = 'N'");

/******** SHOPGATE **********/
include(DIR_FS_CATALOG . "ext/modules/shopgate/plugin.php");
$db->Execute("delete from " . TABLE_ORDERS_SHOPGATE_ORDER . " where orders_id = '" . (int)$order_id . "'");
/******** SHOPGATE **********/
File 8: includes/application_top.php
// get customers unique IP that paypal does not touch
$customers_ip_address = $_SERVER['REMOTE_ADDR'];
if (!isset($_SESSION['customers_ip_address'])) {
$_SESSION['customers_ip_address'] = $customers_ip_address;

/******* SHOPGATE **********/
include_once DIR_FS_CATALOG.'ext/modules/shopgate/base/includes/application_top.php';
/******* SHOPGATE **********/
File 9: includes/languages/english.php
define('FORM_REQUIRED_INFORMATION', '* Required information');

/******* SHOPGATE **********/
include_once DIR_FS_CATALOG.'ext/modules/shopgate/base/includes/languages/english.php';
/******* SHOPGATE **********/

// constants for use in zen_prev_next_display function
define('TEXT_RESULT_PAGE', '');
File 10: includes/languages/german.php
 define('FORM_REQUIRED_INFORMATION', '* Pflichtelder');

/******* SHOPGATE **********/
include_once DIR_FS_CATALOG.'ext/modules/shopgate/base/includes/languages/german.php';
/******* SHOPGATE **********/

// constants for use in zen_prev_next_display function
define('TEXT_RESULT_PAGE', '');
Create file: includes/templates/<name of your template>/jscript/jscript_shopgate.php

Please replace <name of your template> with the folder name of the template you’re using in your store. After adding the code, upload the file manually using your FTP program.

/******** SHOPGATE **********/
echo $shopgateJsHeader."\n";
/******** SHOPGATE **********/


Install the plugin

  1. Log in to your shop’s backend and navigate to Modules → Payment in the left menu bar. Click the + Install Module button on the right.

  2. If installed correctly, the Shopgate plugin should now be listed on the menu bar on top. If you don't see it right away, reload the page. Your plugin is now installed successfully on your Zen Cart backend.
  3. Click Shopgate → Settings on the menu bar to open the configuration page (shown below) for the Shopgate plugin. Leave this page open - we will explain how to find the required info in the next chapters.

Establish connections

Find API credentials

  1. Log in to your Shopgate Admin and navigate to Integration → Install Interface.
  2. In the drop-down labeled "Select system," type "Zen Cart", and select it.
  3. A pop-up will open. Look for Customer number, Shop number, API key, and Alias under 2. Configure. These are the API credentials the plugin needs to be authenticated at the Shopgate backend. Leave this page open - we will come back to enter the URL.

  4. Copy Customer number, Shop number, API key, and Alias, and paste them individually onto the plugin configuration page you left open from the last chapter. The rest of the options can be configured later, as explained in Configure the Plugin. Click Save.


Connect your shop to Shopgate

  1. Go back to the pop-up window at your Shopgate merchant page. Enter your shop's URL to the text field under 3. Enter URL. Click Connect to establish the interface.

  2. If a connection is made successfully, the pop-up shown below will open. Here you will be able to assign jobs to your first connection. We recommend leaving all assignments to ON at this time. Click Save.

Congratulations! Now you should see the progress bar running, and the Shopgate backend automatically filling your mobile shop with your products. Depending on how many products you have, the import process can take anywhere from a few minutes to a few hours. Welcome to the mobile world!


Update an existing plugin

  1. Deactivate the plugin. Log in to your shop’s backend. Navigate to Modules → Payment in the left menu bar. Find Shopgate in the list of modules, and click the - Remove Module button on the right.

  2. Backup the plugin. Use an FTP tool like FileZilla to back up your installation of the plugin. Back up the folder ext/modules/shopgate by downloading it.

  3. Delete the plugin. Use your FTP tool to delete the folder ext/modules/shopgate: Right click on Shopgate folder, then click Delete and Yes.

  4. Install the new version. Refer to Chapter 1 to install the latest version of the plugin.

Configure the plugin

A list of important configurations is below, with explanations and instructions beneath each option. Click here to locate the configuration page.

Connection Settings
  1. Module type:
    Choose Non US if you’re on a market with fixed tax rates, as most countries in Europe. Choose US if you’re on a market with tax rates depending on where your shop is located and where customers are located.
  2. Customer number:
    Your customer number at Shopgate.
  3. Shop number:
    Your shop’s number at Shopgate.
  4. API key:
    Your API key assigned by Shopgate.
Mobile Redirect
  1. Shop alias:
    The alias is the subdomain of, e.g., where your mobile website can be found. This is used as a fallback if no CNAME is configured.
  2. Custom URL to mobile webpage (CNAME):
    A CNAME is a subdomain of your own domain that points to your mobile website. Usually it looks like this: You’ll have to configure this on your server.
  3. Redirected languages:
    Select the languages the redirect to the mobile website should be active for.
Exporting Categories and Products
  1. Language:
    Choose the language the products should be exported in.
  2. Currency:
    Choose the currency your products should be exported in.
  3. Country:
    Choose the country your products should be exported in.
Importing Orders
  1. Shipping not blocked:
    Set the status to be assigned to incoming Shopgate orders that are not blocked for shipping.
  2. Shipping blocked:
    Set the status to be assigned to incoming Shopgate orders that are blocked for shipping.
  3. Shipped:
    Select the status you set for orders that have been shipped. This is used to synchronize the shipping status of orders with Shopgate.
  4. Cancelled:
    Select the status you set for orders that have been cancelled. This is used to synchronize the cancellation status of orders with Shopgate.
  5. Display names for payment methods:
    You can choose names for your payment methods. Simply specify a display name for each of your payment methods here using the formula "Code name"="your display name". Separate each payment formula with a semicolon. For more details, see: How can I replace the code name of a payment on an order's detail page?
System Settings

These are debugging settings that are usually only used on test and development systems or for compatibility reasons.

  1. Shop system encoding:
    Choose the encoding of your system. Zen Cart 2.3 or above uses UTF-8 by default. If you modified your shop, or if you use an older version, you might need to choose an ISO encoding instead.
  2. Shopgate server:
    Choose from the Live or the Playground Shopgate servers for API communication. Alternatively, you can provide a “Custom” Shopgate API URL.
  3. Custom Shopgate server URL:
    If you chose “Custom” in the drop-down menu box, provide a custom URL to the Shopgate API here.

Frequently Asked Questions

How can I replace the code name of a payment on an order's detail page?

On an order's detail page of your mobile shop, a code name is shown for each payment method. For example, "AUTHN_CC" is shown if a customer has paid with a credit card via, and "COD" is shown if a customer selected "cash on delivery."

If you would prefer to display different names for your payment methods, you can now use the payment mapping feature in your Gambio admin. To do so, follow the steps here.

  1. In your Gambio admin, find the Shopgate entry on the left and click Settings.
  2. In the "Importing orders" section, find Display names for payment methods.

  3. To map your display names, enter "Code name"="your display name" and separate each payment with a semicolon. For example, enter
    AUTHN_CC=Credit card via Authorize;COD=Cash on delivery

Use the table below to find the code names of your payments.

Code name Description Code name Description
ACCRD_INS Installment via Accarda PAYONE_IDL iDEAL via PAYONE
ACCRD_INV Invoice via Accarda PAYONE_INV Invoice via PAYONE
AUTHN_CC Credit card via PAYONE_KLV Klarna invoice via PAYONE
BARZAHLEN Pay in-store via Barzahlen PAYONE_PP PayPal via PAYONE
BILLSAFE Invoice via Billsafe PAYONE_PRP Prepayment via PAYONE
BRAINTR_CC Credit card via Braintree PAYONE_SUE SOFORT Überweisung via PAYONE
CHASE_CC Credit card via Chase Paymentech PAYPAL PAYPAL
CMPTOP_CC Credit card via Computop PAYU PayU
CMPTOP_DBT Direct debit via Computop PP_WSPP_CC Credit card via PayPal Website Payments Pro
CMPTOP_PP PayPal via Computop PPAL_PLUS PayPal Plus
COD Cash on Delivery PREPAY Prepayment
COLL_STORE Collection at store REALEX_CC Credit card via Realex
CONCAR_CC Credit card via ConCardis (DirektLink) SAGEPAY_CC Credit card via SagePay
CYBRSRC_CC Credit card via CyberSource SAGEPAY_PP PAYPAL via SagePay
DEBIT Direct debit SHOPGATE Shopgate payments
DT_CC Credit card via DataTrans SIX_CC Credit card via SIX Saferpay (External)
DTCASH_CC Credit card via DataCash SIX_IDEAL iDEAL via SIX Saferpay
EWAY_CC Credit card via eWAY SIX_PP PayPal via SIX Saferpay
FRSTDAT_CC Credit card via FirstData US SKRILL_CC Credit card via Skrill (External)
HDLPAY_CC Credit card via HeidelPay SKRILL_DBT Direct debit via Skrill
HDLPAY_SUE HeidelPay (SOFORT Überweisung) SKRILL_IDL iDEAL via Skrill
HIPAY Credit card via HiPay (exteral) SKRILL_SUE SOFORT Überweisung via Skrill
INVOICE INVOICE (Own Settlement) SPONE_DBT Direct debit via SEPAone
KLARNA_INV Invoice via Klarna STRIPE_CC Credit card via Stripe
MASTPAY_CC Credit card via Masterpayment SUE SOFORT Überweisung
MASTPAY_PP PAYPAL via Masterpayment TELECSH_CC Telecash
MASTPAY_SUE Masterpayment (SOFORT Überweisung) TRNSFST_CC Credit card via TransFirst
MSTPAY_INV Invoice via Masterpayment UPAID_MCM MasterPass
MWS Amazon Payments (Own - APA) USAEPAY_CC Credit card via USA ePay
OGONE_CC Credit card via Ogone WCARD_DBT Direct debit (External) via Wirecard (Checkout Page)
PAY4ONE_CC Credit card via Pay4one WCARD_INV Invoice via Wirecard (Checkout Page)
PAYJUNC_CC Credit card via PayJunction WCARD_PP PayPal via Wirecard (Checkout Page)
PAYMRW_DBT Direct debit via Paymorrow WCARD_SUE SOFORT Überweisung via Wirecard (Checkout Page)
PAYMRW_INV Invoice via Paymorrow WCARDS_CC Credit card (External) via Wirecard (Checkout Seamless)
PAYOL_INS Installment via Payolution WCARDS_DBT Direct debit (External) via Wirecard (Checkout Seamless)
PAYOL_INV Invoice via Payolution WCARDS_PP PayPal via Wirecard (Checkout Seamless)
PAYONE_CC Credit card via PAYONE WCARDS_SUE SOFORT Überweisung via Wirecard (Checkout Seamless)
PAYONE_DBT Direct debit via PAYONE WIRECRD_CC Credit card (External) via Wirecard (Checkout Page)
PAYONE_GP Giropay via PAYONE WORLDLINE Credit card via Worldline (External)


Was this article helpful?
Can't find what you're looking for?
Let us help you—submit a support ticket.
Contact Support