Back

VibeFox J&T Express for PrestaShop — Help

Requirements

PrestaShop: 8.0 to 9.x.

PHP: 8.0 or later. The module refuses to install on older PHP versions.

J&T Express Malaysia API access (for live quotes only): live quotes exist only for J&T Express Malaysia, for delivery addresses in Malaysia. You need four values. Apply for a J&T VIP account on the J&T Express Malaysia website (the module page has a link): J&T gives you the VIP customer code and the VIP API key. The API account and the private key for signing requests are issued by J&T for API integration. Ask your J&T account manager for them. J&T Philippines, Indonesia and other countries have no public quote API, so use the price table for them. If you only use the price table and fallback cost, you do not need J&T API access.

VibeFox license key: bought on vibefox.net. One key works on one domain.

Installation

1. In the back office go to Modules > Module Manager and click Upload a module. Choose the module ZIP file.

2. When the upload finishes, click Configure, or find VibeFox J&T Express in the module list later and click Configure.

3. Paste your VibeFox license key into License key in the license block at the top of the Configure page and click Activate (see License key).

4. Fill in the price table and / or the fallback cost. For live Malaysian quotes, also enter the J&T API credentials, the sender postcode and, if your shop default currency is not MYR, the currency conversion rate (see Configuration). Click Save.

On install the module creates the J&T Express carrier with the delivery time text Courier delivery. The carrier is assigned to all zones and all customer groups. You can change zones, customer groups, delivery time, logo and size limits in Shipping > Carriers. Do not set prices there: the price always comes from the module.

Configuration

All settings are on the module page: Modules > Module Manager > VibeFox J&T Express > Configure. Each section has its own Save button, which saves the whole page. Every save also clears the cached J&T quotes. If live quotes are only partly configured, a warning at the top of the page lists the missing settings or tells you that the currency conversion rate is missing. Amounts that are not a number of 0 or more are rejected with an error, and so are a Currency conversion rate of 0 and a Min weight greater than Max weight. If your shop weight unit is not recognised, a warning asks you to set a standard unit in International > Localization.

General

The settings on this page apply to every zone. Zones, customer groups and size limits of the carrier are set in Shipping > Carriers (or use Ignore shipping zones below).

Enable J&T Express: turns the carrier on or off. This is the same switch as the carrier status in Shipping > Carriers.

Method title: the carrier name shown in the cart and at checkout. Default: J&T Express. Required.

Tax: the tax rule of the carrier, or No tax. A tax rule adds your shop shipping tax on top of the cost. Choose No tax if the J&T price already includes everything you want to charge.

J&T Express Malaysia API (live quotes) (optional, for delivery addresses in Malaysia; all four credentials are required)

VIP customer code: your J&T Express VIP code. Clearing it also clears the saved VIP API key.

VIP API key: the API key (password) J&T Express gave you with the VIP code. It is never logged. After saving, the field stays empty and shows Saved — leave empty to keep it. Type a new value only to change it.

API account: your J&T Express API account name. Clearing it also clears the saved private key.

API private key: the private key of the API account. It is used only to sign requests (SHA-256). It is never sent to J&T and never logged. Like the VIP API key, it is not shown again after saving.

Sender postcode: the Malaysian postcode the parcels are sent from. Leave it empty to use the shop postcode from Shop Parameters > Contact > Stores, when the shop is in Malaysia. Spaces are removed when you save.

Currency conversion rate: J&T Express Malaysia quotes are in MYR. If your shop default currency is not MYR, enter how many units of your currency one MYR is worth (1 MYR = X). Without it, live quotes are not used and the price table or fallback cost is used instead. If your default currency is MYR, the field says so and is not needed: quotes are used as they are. Both a point and a comma are accepted as the decimal separator. The rate must be greater than 0.

Price table and fallback (used for countries other than Malaysia, when live quotes are not configured, or when J&T gives no quote; prices in your shop default currency, tax excluded)

Country prices: a table with one row per country. Click Add country to add a row and the trash icon to remove one. Choose * Any other country for all countries without their own row. Each row has a Base price and five weight tiers: XS up to 1 kg, S up to 2 kg, M up to 3 kg, L up to 5 kg and XL above 5 kg. A tier price above 0 replaces the base price for carts in that tier. A tier of 0 uses the base price. A base price of 0 means free shipping, and an empty base price is saved as 0. If a country appears in two rows, the last row is kept. Countries without a row (when there is no * row) get no table price.

Fallback cost: the price used when neither J&T nor the table gives a price. Leave it empty to hide the carrier in that case. 0 means free shipping.

Table / fallback price is: Per order charges the price once. Per item (multiplied by the number of items) multiplies it by the number of items in the cart. Live J&T quotes are always for the whole order.

Conditions

Free shipping from: the cart subtotal (products that need shipping, after discounts, before tax) from which shipping is free. Leave it empty for no free shipping.

Minimum subtotal: show the carrier only when the cart subtotal reaches this amount. Leave it empty to always show it.

Min weight: hide the carrier when the cart weighs less, in kg. Product weights are converted from your shop weight unit. 0 means no limit. It cannot be greater than Max weight.

Max weight: hide the carrier when the cart weighs more, in kg. Default: 50. 0 means no limit.

Availability without shipping zones

Ignore shipping zones: offer the carrier for the countries below, even if it is not linked to their zone. When you switch it on, the carrier is linked to all active zones, and zones you create later are linked too. When off, the carrier is offered only in its own zones in Shipping > Carriers. Switching it off gives the carrier its previous zones back.

Countries: the destination countries for that mode. Leave empty to use all countries you ship to. This field is used only when Ignore shipping zones is on.

Advanced

Debug log: writes price calculations to logs/vfd_jtex_debug.log.php in the module folder. The file cannot be opened from the web. J&T API errors are always logged, even with this option off. No keys, passwords or customer postcodes are written. Turn the log off when you are done.

Log: shows the size and the latest entries of the log. Click Clear log to empty it.

Remove data on uninstall: when on, uninstalling the module deletes the module settings, the carrier, cached quotes and the log. When off, everything is kept for a re-install.

How it works at checkout

At the shipping step PrestaShop asks the module for the J&T Express price. Only physical products count: virtual products add no weight and are not included in the subtotal. The module first checks the conditions: delivery country (with Ignore shipping zones), cart weight and minimum subtotal. If the cart subtotal reaches Free shipping from, the price is 0 and no request goes to J&T.

Otherwise the cost is taken from the first source that gives a price:

1. Live J&T quote: only when all four API credentials and a sender postcode are set, the delivery country is Malaysia, the customer has entered a 5-digit postcode and, for shops whose default currency is not MYR, a conversion rate is set. The module sends J&T the sender and delivery postcodes and the cart weight (at least 0.1 kg) for the standard service EZ, one parcel, and converts the returned MYR price to your default currency.

2. Country prices: the row of the delivery country, or the * row, with the price for the cart weight tier.

3. Fallback cost.

If none of them gives a price, the carrier is hidden for that cart. Per item applies only to the table and fallback prices. The price is calculated in your default currency and then shown in the customer's cart currency.

Each J&T answer is cached for 1 hour, so the same cart does not trigger a new request. A failed request is cached for 10 minutes, so the checkout does not wait for J&T on every refresh. The request timeout is 10 seconds. If J&T returns an error, a zero price or no answer, the customer sees no error. The table or fallback price is used, and the reason is written to the log.

If you edit the carrier in Shipping > Carriers after it has orders, PrestaShop saves it as a new carrier version. The module follows the new version automatically.

The module calculates shipping costs only. It does not create consignment notes, waybills or labels, book pickups, cancel or track shipments, or let customers choose a pickup point. Create and track shipments in your J&T account as usual. The module was built against the request format of the official J&T Express Malaysia plugin. Confirm the prices with your J&T account before going live.

License key

The module works with a VibeFox license key from vibefox.net. The license block License — VibeFox J&T Express is the first block on Modules > Module Manager > VibeFox J&T Express > Configure, above the settings. Paste the key into License key and click Activate. After that the block shows the key masked, the status (for example the date the license is active until and your domain) and the buttons Check now to check the status again, Change key to enter another key and Remove key to remove the key from this shop. Below them are the line Product: presta-shipping-jt-express and the link Manage licenses and domains in your account, which opens your vibefox.net account. Only employees with the Configure permission for the module can change the key. The texts of the block follow the back office language (English and Russian are included).

If the key is not accepted, the block says why, for example Key not found, This key belongs to another product, Domain limit reached or License expired on a date. After the shop address changes, or after you free a domain slot in your account, click Check now. If the license server cannot be reached, the module keeps working on the last known status.

One key works on one domain: the domain of the main shop, also in a multistore setup. Removing the key from the shop does not free its domain slot. Free the slot in your vibefox.net account.

Without an active key, the J&T Express carrier is not shown to customers at checkout and no rate is calculated. The PrestaShop storefront does not know that you are logged in to the back office, so the carrier is hidden for you too: you can set up the module before you buy a key, but not test it at checkout. A reminder appears in Modules > Module Manager on the Alerts tab. Existing orders are not affected.

When a license expires, the module keeps working, but updates and support need a renewal. The status is checked again automatically while you work in the back office: once a day for the first 14 days after the key is entered, then once a week. No cron job is needed. Uninstalling or resetting the module always removes the license key and license status.

Troubleshooting

J&T Express does not appear at checkout: check that the license is active and Enable J&T Express is on. In Shipping > Carriers check that the carrier covers the zone of the customer's country and the customer's group (or that Ignore shipping zones is on and the country is allowed). Check the weight limits and Minimum subtotal. Check that Country prices has a row for the country or a * row, or that Fallback cost is set. Products can also be limited to certain carriers in the product page. Turn on Debug log and look at the Log field on the module page.

The price comes from the table, not from J&T: live quotes need all four API credentials, a sender postcode, a Malaysian delivery address with a 5-digit postcode and, for shops not in MYR, the Currency conversion rate. Check the warnings at the top of the module page. If J&T rejects the request or does not answer, the error is logged and the table or fallback price is used. The failed request is retried after 10 minutes.

No live quotes for the Philippines or Indonesia: J&T offers no public quote API for these countries. Use the price table and the fallback cost there.

A country gets free shipping by mistake: its row has a base price of 0 (an empty base price is saved as 0). Enter a base price or remove the row. Also check Free shipping from.

Rates look outdated after a change: click Save on the module page. This clears the cached J&T quotes.

The page says the J&T Express carrier was not found: the carrier was deleted in Shipping > Carriers. Reset the module in Modules > Module Manager to create it again.

Developer hooks: the hook actionVfdJtexQuoteRequest changes the quote request body (for example the service type), and actionVfdJtexApiUrl changes the quote endpoint.

Uninstall

Go to Modules > Module Manager, open the menu next to VibeFox J&T Express and choose Uninstall. The license key and license status are always removed. The cached quotes are always removed. If Remove data on uninstall is on, the carrier is deleted (orders keep their history) and the settings and log are removed. If it is off, the carrier is only disabled and all settings are kept. Installing the module again gives the saved carrier back its previous status.

J&T Express is a trademark of its respective owner. This module is not affiliated with or endorsed by J&T Express.