Back

VibeFox J&T Express for WooCommerce — Help

Requirements

WordPress: 5.8 or later.

WooCommerce: 5.0 or later, installed and active. The plugin refuses to activate without it.

PHP: 8.0 or later.

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 settings 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 WordPress go to Plugins > Add New > Upload Plugin, choose the plugin ZIP file and click Install Now. You can also upload the vfd_jt_express folder to /wp-content/plugins/ by FTP.

2. Click Activate.

3. Open the settings: WooCommerce > Settings > Shipping > VibeFox J&T Express, or click Settings under the plugin name on the Plugins page.

4. Enter your VibeFox license key in the license block at the top of the page and click Activate.

5. 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 store currency is not MYR, the currency conversion rate (see Configuration).

6. Add VibeFox J&T Express to a shipping zone in WooCommerce > Settings > Shipping > Shipping zones, or turn on Ignore shipping zones and choose countries.

Configuration

All settings are on one page: WooCommerce > Settings > Shipping > VibeFox J&T Express. They apply to every shipping zone. When you add the method to a zone, the zone window has only one field:

Title (zone): the name customers see for this zone. Leave it empty to use the global Method title.

Every time you save the settings, the cached J&T quotes are cleared. 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.

General

Enable/Disable: turns the method on or off in all zones at once. Default: on.

Method title: the shipping method name shown in the cart and at checkout. A zone can override it. Default: J&T Express.

Tax status: Taxable adds your store shipping tax on top of the cost, None does not. Choose None 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.

VIP API key: the API key (password) J&T Express gave you with the VIP code. It is never logged.

API account: your J&T Express API account name.

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.

Sender postcode: the Malaysian postcode the parcels are sent from. Leave it empty to use the store postcode from WooCommerce > Settings > General, when the store is in Malaysia. Spaces are removed when you save.

Currency conversion rate: J&T Express Malaysia quotes are in MYR. If your store 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 store currency is MYR, leave it empty: quotes are used as they are. Both a point and a comma are accepted as the decimal separator.

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 store currency)

Country prices: a table with one row per country. Click Add country to add a row and the cross 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. 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 method in that case.

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 (after discounts, before tax) from which shipping is free. Leave it empty for no free shipping.

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

Min weight (kg): hide the method when the cart weighs less. Product weights are converted from your store weight unit. 0 means no limit.

Max weight (kg): hide the method when the cart weighs more. Default: 50. 0 means no limit.

Excluded shipping classes: hide the method when the cart contains a product from any of these WooCommerce shipping classes.

Availability without shipping zones

Ignore shipping zones: offer the method for the countries below even if it is not added to any shipping zone. When off, the method appears only in the zones it is added to.

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 WooCommerce > Status > Logs, source vfd-jt-express. 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.

Remove data on uninstall: when on, deleting the plugin removes its settings, zone methods and cached quotes. Deactivating the plugin never deletes anything.

How it works at checkout

When the customer enters a delivery address, WooCommerce asks the plugin for a rate. The plugin first checks the conditions: delivery country, cart weight, minimum subtotal and excluded shipping classes. If the cart subtotal reaches Free shipping from, the method is shown with a cost of 0, but only when the country has a price: a row in Country prices, a Fallback cost or a live J&T quote. J&T is asked only when the table and the fallback cost give no price.

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 stores not in MYR, a conversion rate is set. The plugin 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 store 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 method is hidden. Per item applies only to the table and fallback prices.

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.

The method works on the classic checkout and on the Cart and Checkout blocks. It is compatible with WooCommerce High-Performance Order Storage (HPOS).

The plugin 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 plugin 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 plugin works with a VibeFox license key from vibefox.net. The license block is at the top of WooCommerce > Settings > Shipping > VibeFox J&T Express. Paste the key into License key and click Activate. The block shows the status, for example the date the license is active until and your domain. Use Check now to check the status again, Change key to enter another key and Remove key to remove it from this site. The link Manage licenses and domains in your account opens your vibefox.net account.

One key works on one domain. Removing the key from a site does not free its domain slot. Free the slot in your vibefox.net account.

Without an active key, J&T Express is not shown to customers at checkout. Logged-in store managers still see it, marked (unlicensed — visible to admins only), so you can set up and test the plugin before you buy a key. A reminder appears on the Plugins page and on WooCommerce pages. Existing orders are not affected.

When a license expires, the plugin keeps working, but updates and support need a renewal. The status is checked again automatically in the background.

Troubleshooting

J&T Express does not appear at checkout: check that the license is active, Enable/Disable is on, and the method is added to the zone of the customer's country (or Ignore shipping zones is on and the country is allowed). Check the weight limits, Minimum subtotal and Excluded shipping classes. Check that Country prices has a row for the country or a * row, or that Fallback cost is set. Turn on Debug log and look at WooCommerce > Status > Logs.

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 stores not in MYR, the Currency conversion rate. Check the warnings at the top of the settings 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.

Rates look outdated after a change: save the settings page. This clears the cached J&T quotes.

Developer hooks: the filter vfd_jtex_quote_request changes the quote request body (for example the service type), vfd_jtex_api_url changes the quote endpoint, and the standard woocommerce_shipping_vfd_jt_express_is_available filter controls availability.

The license block shows an error: follow the message in the block. For example, if the key is already used on another domain, free a slot in your vibefox.net account and click Check now. If the site address changed, click Check now to activate the key for the new domain. If the license server cannot be reached, the plugin keeps working on the last known status.

Uninstall

Deactivating the plugin keeps all data. To remove it, deactivate and delete it on the Plugins page. The license key and license status of this plugin are always removed. Settings, zone methods and cached quotes are removed only if Remove data on uninstall was on. Otherwise they stay for a later re-install. Existing orders keep their shipping lines.

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