Stacks Image 8

Webshop stack


Create a webshop with RapidWeaver


or

 




What the Webshop.stack offers is an easy to set up, full featured webshop for physical and/or digital products. Examples are the webshops on this site and on Snoezelkussen.nl .

To use this stack, you need :

After purchase, you may use it forever, commercial or non-commercial.

(You can create webshops on max. 10 different domains. Purchase an additional license for an extra 10 domains.
You may create an unlimited number of webshops on the same domain.)

Overview

Stacks Image 20
The above Webshop overview image shows what you see when you drag the Webshop.stack into an Elements or Stacks page. This and the following screenshots are from a Stacks-page, since Elements is not yet published.

The light grey stacks are added by default by Stacks, and are the first ones in the options lists under the (+)-buttons.
Simply click on one and hit the delete key to remove those you are not planning to use.

Installing

After you purchased this stack, you have received an email with a download link. Clicking this link will download a disk image (.dmg).

Double click the disk image, agree to license agreement and a Finder window will appear.

Double click the 'Webstop.stack' file to install it.
It can be installed in RapidWeaver 8 and Classic. I don't know about RapidWeaver 7, just try it.

The disk image contains two Webshop-demo's, one for RW 8 and one for RW Classic. They both contain the same content.
Stacks Image 842
When installed, add a new Stacks page and you will find the Webshop stack in the Stacks Library.
Stacks Image 849
Then, consider renaming the index file from index.html to index.php, although Stacks should do this automatically when publishing.
Stacks Image 860

Webshop Stack Settings

Registration
When you purchase this stack, a serial number will be emailed to you in a separate email, to the email address you used at checkout.
Enter the email address and serial number here to activate the stack.
Stacks Image 71
SDS82/PSS
Not yet implemented!

These settings are for future use when our Purchase/Stock/Sales (PSS) system is linked to the Webshop.stack. You then do not maintain products, taxes, localisation, etc. here in the stack, but in the PSS-system.
Stacks Image 73
General
Store name
Enter a name for your store. It will be shown below the header. Leave empty if do not want to use it.
CSS File to use
If you wish to change a lot of CSS, you can download and change the contents of the CSS-file to your liking. Then upload it somewhere, and enter the URL to that file here. For just small changes, use the CSS-section of the Rapidweaver-page.
Display errors on
Check this box if asked or if you want to check for PHP errors yourself.
Enable maintenance mode
This disables your webshop on your server and shows a message to the visitors. The message can be found in the Localization: 'Offline title' and 'Offline message'.
Time zone
The time zone for the webshop. This overrides the server's time zone. The default is Europe/Amsterdam.
Note: when products are not showing in Preview or on your site, check the date of publishing in the Product's stack settings. That date is set using your Mac's date/time, which can be very different form the date/time of the timezone you set here.
Session validity
Number of days a session is kept alive, when the visitor does not remove cookies within that period.
Stacks Image 80
Database
For the database to work, your database username must have at least the following privileges:
  • Alter
  • Create
  • Delete
  • Drop
  • Insert
  • Select
  • Update
MySQL/MariaDB live database
When checked, stock management of products, placed orders, number of downloads, coupon expiration and usage + ratings can be used.
Address
Domain name or IP-address of the live database server.
Username + Password
Live database access credentials.
Database name
The name of your live database where to create the tables. This database must already exist.

Test mode
MySQL/MariaDB test database
When checked, the same applies as described above, but on a different database. Use this for local testing.
When checked, this database has precedence over the live database settings. So always uncheck before publishing.
Address
Domain name or IP-address of the test database server.
Username + Password
Test database access credentials.
Database name
The name of your test databse where to create the tables. This database must already exist.

Stacks Image 89
General settings
Show low availability badge + Threshold
When checked, the threshold is used when to show low availability. The text can be found in the localization stack, under Product.
Enable product rating + Threshold
When checked:
  • and the threshold is not zero, then if the rating average is greater or equal to the threshold, rating stars can be shown. See 'Show product rating' in the 'Catalag'-settings and 'Show rating' in the 'Product page'-settings below.
  • a link to review and rate the products ordered will be placed inside the order confirmation message.
  • showing reviews on the product page will be possible, see 'Show rating notes' in the Product page settings below.
Days changeable
Number of days a review and rating are changeable by the customer, before they become final.
Copy RapidCart Pro tables

Below you will find the SQL-queries you can use to copy RapidCart Pro tables into the Webshop.stack tables.

Note: do not copy the 'Products' table into the 'ws_products' table. The 'ws_products' table is filled and updated by the Webshop.stack.

INSERT INTO ws_orders (`id`, `date`, `customername`, `customeremail`, `customercountry`, `customercountrycode`, `customercompany`, `customervatid`, `customervatidverified`, `customerstreet`, `customerzipcode`, `customercity`, `customerstate`, `customerphone`, `customerip`, `items`, `options`, `shippingname`, `shippingprice`, `paymenttype`, `paymentname`, `paymentprice`, `transactionid`, `costs`, `coupon`, `weight`, `shippable`, `subtotal`, `taxes`, `total`, `subtotalrefunded`, `taxesrefunded`, `totalrefunded`, `status`, `referrer`, `notes`) SELECT `ID`, `Date`, `CustomerName`, `CustomerEmail`, `CustomerCountry`, `CustomerCountryCode`, `CustomerCompany`, `CustomerVATID`, `CustomerVATIDVerified`, `CustomerStreet`, `CustomerZIPCode`, `CustomerCity`, `CustomerState`, `CustomerPhone`, `CustomerIP`, `Items`, `Options`, `ShippingName`, `ShippingPrice`, `PaymentType`, `PaymentName`, `PaymentPrice`, `TransactionID`, `Costs`, `Coupon`, `Weight`, `Shippable`, `Subtotal`, `Taxes`, `Total`, `SubtotalRefunded`, `TaxesRefunded`, `TotalRefunded`, `Status`, `Referrer`, `Notes` FROM Orders;

INSERT INTO ws_coupons (`code`, `quantity`, `lastupdate`, `synced`) SELECT `Code`, `Quantity`, `LastUpdate`, `Synced` FROM Coupons;

INSERT INTO ws_downloads (`sku`, `email`, `quantity`, `lastupdate`) SELECT `SKU`, `Email`, `Downloads`, `Date` FROM Downloads;

INSERT INTO ws_ratings (`order`, `sku`, `date`, `rate`, `notes`) SELECT `Order`, `Product`, now() as dt, `Rate`, '' as nt FROM Ratings;


Note: In RCPro's table 'Ratings', 'Product' is a number. It will be copied into the 'sku' column of table 'ws_ratings', but you have to change it manually into the right SKU-code you used.
Cart / Checkout
Default country
Choose the default country code to be used in the address section of the checkout-process.
Add a 'Countries, Currency & Taxes'-rule for this country, otherwise currency appears as '??'.
Minimum order
This the minimum order amount (excl. taxes). It will be checked in the checkout-process.
Show option names
When you add cart-options via the 'Cart and/or Product Options'-substack, you give those options a name. Often, the names are the same as the descriptions; in that case, uncheck this box.
Show option prices
Decide if you want to show the cost of an option to your visitors. The costs of product options are added to the product price.
Require acceptance + disclaimer text
Check this box to add the disclaimer text at the end of the checkout. The visitor cannot proceed to pay, without checking the disclaimer-text checkbox first.
Thank you page + Custom URL
The URL of the webpage the buyer is sent to, after a successful purchase.
Default to catalog
After purchase, the buyer is sent back to the catalog page, with a 'Thank you'-text at the top. This text is changeable in the localization substack.
Custom page (fill in the URL below)
Enter a URL to sent the buyer to, after a purchase. No further parameters are sent with this URL.

Require repeat email
When checked, the buyer is required to type his/her email address twice, as a means of verification.
Address field + Phone field + Company field
In the checkout-process, these field options are:
  • Hide
  • Show
  • Required
Note: when 'EU VAT ID field' (see below) is set to 'Show' or 'Required', The 'Company field' is also shown, but not required.
Stacks Image 95

Show taxes split
This will show the net prices + tax, like so: € 0,71 Ex. 9,44% VAT (€ 0,06)
Apply taxes to costs
When checked, the highest tax rate will be applied to costs and discounts during checkout.
Apply taxes to options
When checked, the highest tax rate will be applied to cart options during checkout.
Apply taxes to shipping
When checked, the highest tax rate will be applied to shipping fees during checkout.
Apply taxes to payment
When checked, the highest tax rate will be applied to payment fees during checkout.

EU VAT ID field
In the checkout-process, this field's options are:
  • Hide
  • Show
  • Required
Note: when set to 'Show' or 'Required', and the 'Company field' is set to 'Hide', it will be shown anyway, but not required. Note: when set to 'Require', you can only sell products to companies within the EU.
Validate EU VAT ID with VIES
When checked, the webshop will verify the EU VAT ID via VIES .
Your EU country
The default is 'Non-EU or Default country'.
If you choose another EU-country, you will have to add a 'Countries, Currency & Taxes'-rule for that country, too.
Taxes are not applied to EU VAT-ID owners from a different EU country, if your country is also an EU-country.
Choose 'EU VAT-ID' as country if your company is outside of the EU, but has an EU VAT-ID number.
Local VAT
Check this box to force local VAT from 'Your EU-country', or, if not set, from 'Default country', for digital products, when your revenue from selling digital products to consumers is less than 10.000,- EUR per year.
If not, then you must create 'Countries, Currency and Taxes' rules for ALL EU countries, so taxes can be split between local taxes and the consumer's country's taxes. To make life easier, I've added them all to the webshop-demo.rwc and webshop-demo.rw8 RW files that come with the installation file, so you can copy/paste them all at once into your RW-file. For example:
Catalog
View mode
You can choose between Box or List:
 or 
 
Show cart
Show or hide the cart button:
 or 
 
Show Add to cart button
Shows the 'minus', 'entry-field', 'plus', and 'Add to cart'-buttons, or, when unchecked, shows a 'View product' button:
 or 
 
Show Add short descriptions
In the 'Product'-substacks, you can add a short and long description. In the Catalog only the short description is shown, unless unchecked, the no description is shown.
Show starting price
Checking this will show or hide the price of the product, but only if the product has no paid options assigned to it via the 'Cart and/or Product Options'-substacks. In such cases, the 'View product-button is shown.
Show product tag
This will show or hide the product tag. You can add tags to a product, and from that list, the first one is taken and shown in the top right corner of the product:

 
Show product rating
This will show or hide the product rating. You can set the rating in a product, and that will be shown above the name of the product:

When you have checked 'Enable product rating' in the 'Database'-settings, product ratings are calculated based on the ratings of buyers.
Show rating count
This will show or hide the number of ratings for the product and display that number next to the rating stars (see image above here).
This setting only works when you have enabled the database and checked 'Enable product rating' in the 'Database'-settings.
Highlight promoted products
This will show or hide the 'Promoted'-tag and will colorize the product box with a orange border and light yellow background. The 'Promoted'-tag will be displayed instead of a product-tag, even if 'Show product tag' is unchecked:

The colorizing of the promoted box can be changed by adding CSS for the border and the background in your page's CSS-settings for classes: .wsproduct.promo { } and .wsproduct.promo .wsthumb .wstag { }
 
When this setting is checked, a visitor can also filter on only promoted products:

Products / Page
This setting determines the number of products shown on a page, before paging-buttons are shown.
Page numbers
Determines where the paging-buttons are shown.
Paging buttons
Determines how many paging-buttons are shown, before ... are shown left and right to indicate more pages.

Show search
Hide or show the 'Search'-field in the sidebar.
Show categories
Show or hide the categories filter.
Sort categories alfabetically
Does what it says when checked.
Show tags
Show or hide the tags filter.
Sort tags alfabetically
Does what it says when checked.
Show sort
Shows or hides product sorting buttons. A visitor can sort on Date (publish date), Name or Price.
Default sorting
The initial setting for the web page.
Stacks Image 105
Stacks Image 109
Product page
Show Cart button
Show or hide the cart button:
Version columns
Number of columns for versions. When non-zero, versions are placed in rows and columns.
Leave 0 when you want to use a horizontal scrolling bar, instead of rows and columns.
Show thumbnail in versions
To reduce the size of versoins on the screen, you might want to hide the thumbnail image.
Show version SKU
This only applies to product page.
Show option names
Show or hide product option names.
When unchecked, only the description / message - if not empty - of the option will be printed (applies to cart).
If the description of the option is empty, the name is printed anyway.
See 'Cart and/or Product options' substacks.
Show rating
Shows or hides the rating in the product.

When you have checked 'Enable product rating' in the 'Database'-settings, product ratings are calculated based on the ratings of buyers.
Show rating count
This will show or hide the number of ratings for the product and display that number next to the rating stars (see image above here). The text can be found in the localisation-settings.
This setting only works when you have enabled the database and checked 'Enable product rating' in the 'Database'-settings.
Show rating notes
This will show or hide the the reviews for the product and display them below the social media icons.
This setting only works when you have enabled the database and checked 'Enable product rating' in the 'Database'-settings.
Subtitle labels
Show categories or tags, or nothing, below product title.
If a product is promoted, the promoted tag is always show, regardless of this setting.
 or  or 
Show short description
Shows or hides the the short description of the product.
When checked will it show the short description as a title, below the rating and before the long description.

Gallery position
This setting determines if the photo/video gallery should float left or right, or should be hidden.
Gallery size
Determines the size of the photo/video gallery: Large, Medium, Small and Mini.
Paging buttons
Determines how many paging-buttons are shown, before ... are shown left and right to indicate more pages.
Enable lightbox
When checked, a Lightbox is available to your visitors when they click on the image or video.
Enable autoplay
When checked, and you have more than one image or video added to the product, this setting determines if the media should be shown in a slideshow, or that the visitor has to click on thumbnails to view the different images or videos.
Autoplay interval
The number of seconds a slide should be shown before the next one is loaded.
Transition speed
The duration in milliseconds of the transition between slides. Use 0 to disable animation.

Max rel. products
The maximum number of related products that should be listed.
Related products are shown below the versions. Set to 0 to disable the related products section.
Related products
Chooose how related products are found: by Category or by Tag.. The webshop will look for matching categories or tags in other products.

Show Facebook / Pinteres / Twitter button.
Does what it says when checked. The buttons are shown below the product's long description.
Twitter user
Type your webshop's Twitter / X user, without the '@' character.

Share tooltip
Tooltip text for the above mentioned social media buttons.
The placeholder %s is replaced with the name of the social media platform.
Copy link tooltip
Tooltip text for copy button. The copy button is always shown on the product page, at the end of the above mentioned social media buttons.
Stacks Image 113
Email SMTP
Note: This section needs to be filled in, otherwise your buyers, and you when you want, will not receive confirmation emails of placed orders
Server address
The IP-address or domain name of the SMTP server from your email account.
This and the following four settings are the same ones you use in your email app.
Port
The port number for the SMTP server.
In the old days this was 25, which received unencrypted email. Nowadays it is mostly 456 or 587. Look it up at the site of your email address provider.
Username
Normally, this is an email address. Enter the username you use to login on the SMTP server.
Password
Enter the password for the above username.
Encryption
You can choose between 'None', 'SSL' or 'TLS'. Check with your email hosting provider. 'None' means port 25 and unencrypted email.
Sender address
The email address used as the sender, for example 'noreply@mywebshop.com'
Name
A normal name used for the sender address, like 'MyWebshop', or your company name.
Reply-to address
Enter an email address where buyers send questions to, when they click on 'Reply' in the order confirmation message.
This comes in handy when you use a noreply-email address as the sender.
Name
A normal name used for the reply-to address, like 'MyWebshop', or your company name.
Send copy to
Enter one ore more email addresses, separated by a comma, where to send the 'New order'-confirmation message to..
Leave blank if you do not need such emails.
Email signature
Enter some text and HTML to be used as the email signature.
This is not a styled text field; you have to enter HTML code if you want to include images, for exampe a company logo.
You can create an email signature for free on lots of websites, but most of them do not show the HTML code, which is what you need.
Stacks Image 121
Webhook
Reference-ID
This ID is sent with the webhook, so your system can identify where the new order comes from.
URL
The URL where the data should be sent to. Data is sent as JSON, via POST.
Token
An authentication token, which is sent in the HTTP-headers as: 'Authorization: Token atokenyoursystemneeds'
You might think that a reference-ID and a token are the same thing, but you can have multiple websites, with different reference-IDs, but the same token to authenticate them.
Check SSL
Uncheck for an HTTP-URL or an HTTPS-URL with an invalid certificate (local testing, for example).
Stacks Image 128
Webhook JSON data example
{"from":"TestWebshop","date_created":"2024-01-24T12:52:14Z","orderid":"7FGrSaS4xMjSHdH3S4kM","invoiceid":"20240124134910QU","customerip":"::1","customer":{"name":"Marc Fox","email_address":"a.customer@example.com","country":"DE","company":"SDS82","vatid":"","street":"Albert Cuypstr.","zip_code":"72045","city":"Mannheim","phone":"31642629208","state":""},"items":[{"key":"SKU1BR","name":"Bruin papier","stock_yn":1,"stock_management":1,"promo":1,"desc_short":"Mooi bruin papier.","groups":"SKU1","categories":"cat1","tags":"tag1","thumbnail":"http:\/\/mbp2020.local\/sites\/tests\/RW_Stacks\/webshop-test\/resources\/pcd2479.gif","price":9.68,"number":2,"taxes":"h","taxperc":21,"amount_excl":16,"amount_incl":19.36,"deliverytype":"PSH","deliverytext":"","deliverylink":"","options":{"C.C.Proefmonsters?.5":{"name":"Proefmonsters?","number":100,"desc":"Dropjes zoet 20g","price":0,"weight":0,"amount_excl":0,"amount_incl":0},"C.C.Proefmonsters?.7":{"name":"Proefmonsters?","number":100,"desc":"Chocoladereepje 20g melk","price":0,"weight":0,"amount_excl":0,"amount_incl":0},"C.C.Proefmonsters?.8":{"name":"Proefmonsters?","number":100,"desc":"Chocoladereepje 20g hazelnoot","price":0,"weight":0,"amount_excl":0,"amount_incl":0}}},{"key":"SKU1GE","name":"Yellow p\u00e4per \ud83d\udfe1","stock_yn":1,"stock_management":1,"promo":0,"desc_short":"Vibrant Yellow A4 Paper, pack of 500 sheets.","groups":"SKU1","categories":"cat1","tags":"tag1","thumbnail":"http:\/\/mbp2020.local\/sites\/tests\/RW_Stacks\/webshop-test\/resources\/santolina.jpg","price":12.1,"number":1,"taxes":"h","taxperc":21,"amount_excl":10,"amount_incl":12.1,"deliverytype":"PSH","deliverytext":"","deliverylink":"","options":{"C.C.Proefmonsters?.3":{"name":"Proefmonsters?","number":100,"desc":"After Shave","price":0,"weight":100,"amount_excl":0,"amount_incl":0},"C.C.Proefmonsters?.7":{"name":"Proefmonsters?","number":100,"desc":"Chocoladereepje 20g melk","price":0,"weight":0,"amount_excl":0,"amount_incl":0}}},{"key":"STACKWS","name":"Webshop.stack","stock_yn":0,"stock_management":0,"promo":0,"desc_short":"Create a webshop","groups":"111859","categories":"Software","tags":"Stack","thumbnail":"https:\/\/www.sds82.com\/products\/webshop-stack\/files\/webshop-stack.png","price":71.34,"number":1,"taxes":"h","taxperc":19,"amount_excl":59.95,"amount_incl":71.34,"deliverytype":"DID","deliverytext":"","deliverylink":"https:\/\/www.sds82.com\/products\/files\/webshop-stack.png","options":{"Serial-Number":{"name":"Serial Number","number":100,"desc":"You will receive your serial number in a separate email.","price":0,"weight":0,"amount_excl":0,"amount_incl":0}}}],"discounts":[{"key":"New-discount-1","name":"New discount 1","price":-10,"taxperc":21,"coupon":"","amount_excl":-10,"amount_incl":-12.1},{"key":"Promotion-discount-%i","name":"Promotion discount : 1 x \u20ac 16,50","price":-16.5,"taxperc":21,"coupon":"","amount_excl":-16.5,"amount_incl":-19.96}],"costs":[{"key":"New-cost-1","name":"New cost 1","price":5,"taxperc":21,"amount_excl":5,"amount_incl":6.05},{"key":"New-cost-2","name":"New cost 2","price":10,"taxperc":21,"amount_excl":10,"amount_incl":12.1},{"key":"New-cost-5","name":"New cost 5","price":3,"taxperc":21,"amount_excl":3,"amount_incl":3.63},{"key":"New-cost-6:-%i","name":"New cost 6: 2 x \u20ac 2,22","price":4.43,"taxperc":21,"amount_excl":4.43,"amount_incl":5.36}],"options":[{"key":"S.4f706d65726b696e67656e.T.-1","name":"Opmerkingen","number":100,"desc":"Happy windsday!","price":5.43,"taxperc":21,"weight":0,"amount_excl":5.43,"amount_incl":6.57}],"shipping_rule":{"key":"PostNL-Intl.-Pakket","name":"PostNL Intl. Pakket","upto":10000,"sumupto":7600,"taxperc":21,"amount_excl":24,"amount_incl":29.04},"payment_rule":{"key":"paypal","name":"P\u00e1ypal","taxperc":21,"amount_excl":5,"amount_incl":6.05,"method":""},"payment":{"amount_excl":116.31,"amount_incl":139.54,"eutaxrule":0,"taxes":[{"h":{"country":"NL","type":"V","perc":21,"amount_excl":56.36,"amount_tax":11.84},"m":{"country":"NL","type":"V","perc":9,"amount_excl":0,"amount_tax":0},"l":{"country":"NL","type":"V","perc":0,"amount_excl":0,"amount_tax":0}},{"h":{"country":"DE","type":"V","perc":19,"amount_excl":59.95,"amount_tax":11.39},"m":{"country":"DE","type":"V","perc":7,"amount_excl":0,"amount_tax":0},"l":{"country":"DE","type":"V","perc":0,"amount_excl":0,"amount_tax":0}}],"provider":{"key":"paypal","orderid":"42R23003Y4702494S","status":"COMPLETED","reference_id":"7FGrSaS4xMjSHdH3S4kM","custom_id":"7FGrSaS4xMjSHdH3S4kM","invoice_id":"20240124134910QU","payments":{"captures":[{"id":"97E55530ES3672158","status":"COMPLETED","amount":{"currency_code":"EUR","value":"139.54"},"final_capture":true,"seller_protection":{"status":"ELIGIBLE","dispute_categories":["ITEM_NOT_RECEIVED","UNAUTHORIZED_TRANSACTION"]},"invoice_id":"20240124134910QU","create_time":"2024-01-24T12:52:31Z","update_time":"2024-01-24T12:52:31Z"}]},"payer_id":"WBGF4SKTTNNDN"}}}
Webhook JSON data seen as an object
stdClass Object
(
    [from] => TestWebshop
    [date_created] => 2024-01-24T12:52:14Z
    [orderid] => 7FGrSaS4xMjSHdH3S4kM
    [invoiceid] => 20240124134910QU
    [customerip] => ::1
    [customer] => stdClass Object
        (
            [name] => Marc Fox
            [email_address] => a.customer@example.com
            [country] => DE
            [company] => SDS82
            [vatid] => 
            [street] => Albert Cuypstr.
            [zip_code] => 72045
            [city] => Mannheim
            [phone] => 31642629208
            [state] => 
        )

    [items] => Array
        (
            [0] => stdClass Object
                (
                    [key] => SKU1BR
                    [name] => Bruin papier
                    [stock_yn] => 1
                    [stock_management] => 1
                    [promo] => 1
                    [desc_short] => Mooi bruin papier.
                    [groups] => SKU1
                    [categories] => cat1
                    [tags] => tag1
                    [thumbnail] => http://mbp2020.local/sites/tests/RW_Stacks/webshop-test/resources/pcd2479.gif
                    [price] => 9.68
                    [number] => 2
                    [taxes] => h
                    [taxperc] => 21
                    [amount_excl] => 16
                    [amount_incl] => 19.36
                    [deliverytype] => PSH
                    [deliverytext] => 
                    [deliverylink] => 
                    [options] => stdClass Object
                        (
                            [C.C.Proefmonsters?.5] => stdClass Object
                                (
                                    [name] => Proefmonsters?
                                    [number] => 100
                                    [desc] => Dropjes zoet 20g
                                    [price] => 0
                                    [weight] => 0
                                    [amount_excl] => 0
                                    [amount_incl] => 0
                                )

                            [C.C.Proefmonsters?.7] => stdClass Object
                                (
                                    [name] => Proefmonsters?
                                    [number] => 100
                                    [desc] => Chocoladereepje 20g melk
                                    [price] => 0
                                    [weight] => 0
                                    [amount_excl] => 0
                                    [amount_incl] => 0
                                )

                            [C.C.Proefmonsters?.8] => stdClass Object
                                (
                                    [name] => Proefmonsters?
                                    [number] => 100
                                    [desc] => Chocoladereepje 20g hazelnoot
                                    [price] => 0
                                    [weight] => 0
                                    [amount_excl] => 0
                                    [amount_incl] => 0
                                )
                        )
                )

            [1] => stdClass Object
                (
                    [key] => SKU1GE
                    [name] => Yellow päper 🟡
                    [stock_yn] => 1
                    [stock_management] => 1
                    [promo] => 0
                    [desc_short] => Vibrant Yellow A4 Paper, pack of 500 sheets.
                    [groups] => SKU1
                    [categories] => cat1
                    [tags] => tag1
                    [thumbnail] => http://mbp2020.local/sites/tests/RW_Stacks/webshop-test/resources/santolina.jpg
                    [price] => 12.1
                    [number] => 1
                    [taxes] => h
                    [taxperc] => 21
                    [amount_excl] => 10
                    [amount_incl] => 12.1
                    [deliverytype] => PSH
                    [deliverytext] => 
                    [deliverylink] => 
                    [options] => stdClass Object
                        (
                            [C.C.Proefmonsters?.3] => stdClass Object
                                (
                                    [name] => Proefmonsters?
                                    [number] => 100
                                    [desc] => After Shave
                                    [price] => 0
                                    [weight] => 100
                                    [amount_excl] => 0
                                    [amount_incl] => 0
                                )

                            [C.C.Proefmonsters?.7] => stdClass Object
                                (
                                    [name] => Proefmonsters?
                                    [number] => 100
                                    [desc] => Chocoladereepje 20g melk
                                    [price] => 0
                                    [weight] => 0
                                    [amount_excl] => 0
                                    [amount_incl] => 0
                                )
                        )
                )

            [2] => stdClass Object
                (
                    [key] => STACKWS
                    [name] => Webshop.stack
                    [stock_yn] => 0
                    [stock_management] => 0
                    [promo] => 0
                    [desc_short] => Create a webshop
                    [groups] => 111859
                    [categories] => Software
                    [tags] => Stack
                    [thumbnail] => https://www.sds82.com/products/webshop-stack/files/webshop-stack.png
                    [price] => 71.34
                    [number] => 1
                    [taxes] => h
                    [taxperc] => 19
                    [amount_excl] => 59.95
                    [amount_incl] => 71.34
                    [deliverytype] => DID
                    [deliverytext] => 
                    [deliverylink] => https://www.sds82.com/products/files/webshop-stack.png
                    [options] => stdClass Object
                        (
                            [Serial-Number] => stdClass Object
                                (
                                    [name] => Serial Number
                                    [number] => 100
                                    [desc] => You will receive your serial number in a separate email.
                                    [price] => 0
                                    [weight] => 0
                                    [amount_excl] => 0
                                    [amount_incl] => 0
                                )
                        )
                )
        )

    [discounts] => Array
        (
            [0] => stdClass Object
                (
                    [key] => New-discount-1
                    [name] => New discount 1
                    [price] => -10
                    [taxperc] => 21
                    [coupon] => 
                    [amount_excl] => -10
                    [amount_incl] => -12.1
                )

            [1] => stdClass Object
                (
                    [key] => Promotion-discount-%i
                    [name] => Promotion discount : 1 x € 16,50
                    [price] => -16.5
                    [taxperc] => 21
                    [coupon] => 
                    [amount_excl] => -16.5
                    [amount_incl] => -19.96
                )
        )

    [costs] => Array
        (
            [0] => stdClass Object
                (
                    [key] => New-cost-1
                    [name] => New cost 1
                    [price] => 5
                    [taxperc] => 21
                    [amount_excl] => 5
                    [amount_incl] => 6.05
                )

            [1] => stdClass Object
                (
                    [key] => New-cost-2
                    [name] => New cost 2
                    [price] => 10
                    [taxperc] => 21
                    [amount_excl] => 10
                    [amount_incl] => 12.1
                )

            [2] => stdClass Object
                (
                    [key] => New-cost-5
                    [name] => New cost 5
                    [price] => 3
                    [taxperc] => 21
                    [amount_excl] => 3
                    [amount_incl] => 3.63
                )

            [3] => stdClass Object
                (
                    [key] => New-cost-6:-%i
                    [name] => New cost 6: 2 x € 2,22
                    [price] => 4.43
                    [taxperc] => 21
                    [amount_excl] => 4.43
                    [amount_incl] => 5.36
                )
        )

    [options] => Array
        (
            [0] => stdClass Object
                (
                    [key] => S.4f706d65726b696e67656e.T.-1
                    [name] => Opmerkingen
                    [number] => 100
                    [desc] => Happy windsday!
                    [price] => 5.43
                    [taxperc] => 21
                    [weight] => 0
                    [amount_excl] => 5.43
                    [amount_incl] => 6.57
                )
        )

    [shipping_rule] => stdClass Object
        (
            [key] => PostNL-Intl.-Pakket
            [name] => PostNL Intl. Pakket
            [upto] => 10000
            [sumupto] => 7600
            [taxperc] => 21
            [amount_excl] => 24
            [amount_incl] => 29.04
        )

    [payment_rule] => stdClass Object
        (
            [key] => paypal
            [name] => Páypal
            [taxperc] => 21
            [amount_excl] => 5
            [amount_incl] => 6.05
            [method] => 
        )

    [payment] => stdClass Object
        (
            [amount_excl] => 116.31
            [amount_incl] => 139.54
            [eutaxrule] => 0
            [taxes] => Array
                (
                    [0] => stdClass Object
                        (
                            [h] => stdClass Object
                                (
                                    [country] => NL
                                    [type] => V
                                    [perc] => 21
                                    [amount_excl] => 56.36
                                    [amount_tax] => 11.84
                                )

                            [m] => stdClass Object
                                (
                                    [country] => NL
                                    [type] => V
                                    [perc] => 9
                                    [amount_excl] => 0
                                    [amount_tax] => 0
                                )

                            [l] => stdClass Object
                                (
                                    [country] => NL
                                    [type] => V
                                    [perc] => 0
                                    [amount_excl] => 0
                                    [amount_tax] => 0
                                )
                        )

                    [1] => stdClass Object
                        (
                            [h] => stdClass Object
                                (
                                    [country] => DE
                                    [type] => V
                                    [perc] => 19
                                    [amount_excl] => 59.95
                                    [amount_tax] => 11.39
                                )

                            [m] => stdClass Object
                                (
                                    [country] => DE
                                    [type] => V
                                    [perc] => 7
                                    [amount_excl] => 0
                                    [amount_tax] => 0
                                )

                            [l] => stdClass Object
                                (
                                    [country] => DE
                                    [type] => V
                                    [perc] => 0
                                    [amount_excl] => 0
                                    [amount_tax] => 0
                                )
                        )
                )

            [provider] => stdClass Object
                (
                    [key] => paypal
                    [orderid] => 42R23003Y4702494S
                    [status] => COMPLETED
                    [reference_id] => 7FGrSaS4xMjSHdH3S4kM
                    [custom_id] => 7FGrSaS4xMjSHdH3S4kM
                    [invoice_id] => 20240124134910QU
                    [payments] => stdClass Object
                        (
                            [captures] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [id] => 97E55530ES3672158
                                            [status] => COMPLETED
                                            [amount] => stdClass Object
                                                (
                                                    [currency_code] => EUR
                                                    [value] => 139.54
                                                )

                                            [final_capture] => 1
                                            [seller_protection] => stdClass Object
                                                (
                                                    [status] => ELIGIBLE
                                                    [dispute_categories] => Array
                                                        (
                                                            [0] => ITEM_NOT_RECEIVED
                                                            [1] => UNAUTHORIZED_TRANSACTION
                                                        )
                                                )

                                            [invoice_id] => 20240124134910QU
                                            [create_time] => 2024-01-24T12:52:31Z
                                            [update_time] => 2024-01-24T12:52:31Z
                                        )
                                )
                        )

                    [payer_id] => WBGF4SKTTNNDN
                )
        )
)
Stock Management Dashboard

Partly implemented!
Implementation depends on enough funding and a database (see above).
First page
This determins which page is loaded after logging in on the Stock Management section of the webshop. You can choose between 'Orders' and 'Statistics'. Note: This is NOT the SDS82/PSS system, but a local implementation for the webshop.
Get push notifications for orders
Shows a popup message in your webbrowser when a new order arrives, while you are on a Stock Managemet page, if you haven't blocked it.
Admin username + password
An admin-user with WRITE permissions, which means this user may change data in the database via the Stock Management pages.
Admin username + password
An second admin-user, but with only READ permissions, which means this user may change nothing via the Stock Management pages.
Stacks Image 134

WebShop Admin applications

You will get a login screen, where you can login with one of the two username/password combinations given above.
The login is kept alive for all admin applications.

With each admin-application you can:
- View, Edit or Delete orders,
- Add new records (if there is a +-button in the bottom right of the footer),
- Export your selection by clicking the green table-icon at the bottom right of the footer,
- Filter data by using the input fields above each column,
- Clear all filters by clicking the eraser-icon next to the 'Search'-button.
- Limit the number of records shown per page, by entering a value in 'Results per page' at the bottom. Minimum is 20, maximum is 500.
- Sort on a column by clicking its header, default is 'Date'.

WSAORDERS

You can access your orders table with https://<yourwebshop>/files/wsaorders.php.
Stacks Image 889
If you copied your RapidCart Pro orders table into the Webshop orders table (see above under 'Database' for the INSERT-query), WSAORDERS will also display these as far as possible. If you encounter an error, send me the ws_orders-record on which it breaks.

WSAPRODUCTS

You can manage stock with https://<yourwebshop>/files/wsaproducts.php.
Stacks Image 911

WSADOWNLOADS

You can manage downloads with https://<yourwebshop>/files/wsadownloads.php.
Stacks Image 913

WSARATINGS

You can manage reviews with https://<yourwebshop>/files/wsaratings.php.
Stacks Image 945
 

Customisation

Substack : Localization

This substack contains entry fields for all texts used in the webshop. If you are satisfied with all the default texts, remove this substack. Since it's useless to list all texts here, only ones that deserve special attention will be explained.

Note: when you use SDS82/PSS, this substack will be hidden, because then all texts will come from SDS82/PSS, which has texts in English, Spanish, French, German and Dutch.
Catalog section
Products found
The placeholder %d will be replaced with the number of products found, when using the search options (search for text, categories, tags) in the toolbar. This text will be shown below the Sort-buttons:
N/F message
Shows this text when no matching products are found. The placeholder %s will be replaced with the text, categories or tags you searched for.
Stacks Image 185
Cart section
>1 Items in cart
The placeholder %d will be replaced with the number of products you added to the cart. This text will be shown inside the Cart-part at the top of the Toolbar:
Stacks Image 225
Stacks Image 227
Stacks Image 229
Minimum order
When set (see above in General Settings -> Cart), and the net minimum order amount is below the threshold when the potential buyer enters the cart and checkout-process, this message is displayed in red and the Next-button is disabled.
The placeholder %s will be replaced with the set minimum amount and the currency symbol from the default country, which must be set in the Countries, Currency & Taxes substack.
Taxes
When Show taxes split is set (see above in General Settings -> Cart), and the tax % for the products is not zero, and the net amount is not the same as the gross amount, this text is displayed in gray below the subtotals.
The placeholder %d will be replaced with the tax amount and the currency symbol from the default country, which must be set in the Countries, Currency & Taxes substack.
Stacks Image 219
VAT text & Sales Tax text
This text is used to print the tax totals in the cart's 'Review' section, below the end total.
The placeholder %t will be replaced with the formatted tax percentage, and the placeholder %d will be replaced with the net amount and currency symbol from the default country, which must be set in the Countries, Currency & Taxes substack.
Ex. VAT & Ex. Sales Tax
When Show taxes split is set (see above in General Settings -> Cart), and the tax % for the products is not zero, and the net amount is not the same as the gross amount, this text is used to print the tax calculation below the various amounts.
The placeholder %t will be replaced with the formatted tax percentage, and the placeholder %d will be replaced with the tax amount and currency symbol from the default country, which must be set in the Countries, Currency & Taxes substack.
VAT or Sales Tax is determined in the Countries, Currency & Taxes substack for the default country.
Order section
Email subject
This text is used as the Subject of the order confirmation email.
The placeholder %ORDER_ID% will be replaced with the order-ID.
The text is also used inside that email, in the order information block at the top in the email, where %ORDER_ID% is replaced with ' : <order id>', but only if the order-ID and invoice number are not the same, which is the case when the buyer does not use Mollie or Paypal, but chooses either 'Bank transfer' or 'Pay at our store'.
Stacks Image 241
Rating title
This text is used on the Product Rating web page, to which the buyer recieves a link in the confirmation email.
The placeholder %s will be replaced with the customer's name.

Note: This works only :
  • with the Database enabled
  • and the 'Enable product rating' checkbox checked.
(see above under 'Webshop Stack Settings -> Database')
Stacks Image 247
Update msg.
This text is used to inform the customer that his/her reviews and ratings are saved and that they can be updated within %d days.
The placeholder %d will be replaced with the value from 'Database -> Days changeable' below 'Enable product rating'.

Note: This works only :
  • with the Database enabled
  • and the 'Enable product rating' checkbox checked.
(see above under 'Webshop Stack Settings -> Database')
Stacks Image 757
Product section
Low availability
This text is used in the Product panes when the stock has reached, or is below, the 'Low availabilty threshold'.
The placeholder %d% will be replaced with the remaining stock. This number comes either from the database (when enabled) or from the setting in a product substack.

Note: This works only with the 'Show low availabilty badge' checkbox checked (see above under 'Webshop Stack Settings -> Database').
Stacks Image 255
Stacks Image 261
Rating count
This text is used as the title-attribute of the bar with stars used for displaying the rating of a product.
The placeholder %d% will be replaced with the number of times the product has beeen rated.

Note: This works only :
  • with the Database enabled
  • and the 'Enable product rating' checkbox checked.
(see above under 'Webshop Stack Settings -> Database')
Stacks Image 263
In stock
This text is used in the Product panes when the stock is above the 'Low availabilty threshold'.
The placeholder %d% will be replaced with the number in stock. This number comes either from the database (when enabled) or from the setting in a product substack.
Remove all text if you never want it to be displayed.
Stacks Image 272
Download section
Link expiration
This text is used in the confirmation email, for digital downloads.
The placeholder %d% will be replaced with the number hours the download link is valid. This number comes from the setting 'Link expiration' in a product substack; if this is 0, this expiration message will not be printed.
The placeholder %s will be replaced with a date/time formatted string (YYYY-MM-DD HH-MM-SS), indicating the exact timestamp when the link expires, so buyers don't have to calculate this themselves.
Stacks Image 282
Stacks Image 288
Limit expiration
This text is used in the confirmation email, for digital downloads.
The placeholder %d% will be replaced with the download limit, specified in the downloadable product's settings.
Stacks Image 746
Admin: Order section
New order subject
This text is used in the subject of the new order email sent to you (or elsewhere). A new order email is only sent if the 'Send copy to'-field in the SMTP-settings (see 'Webshop Stack Settings -> Email SMTP') contains one ore more email addresses.
The first placeholder %s will be replaced with the formatted order amount, the second placeholder %s will be replaced with the customer's name.
New order message
This text is used as the start of the new order email sent to you (or elsewhere).
The placeholder %s will be replaced your name, which is set in 'Webshop Stack Settings -> Email SMTP -> Sender name'.
Stacks Image 294
Admin: GUI section
Page x of y and Page x/y (mobile)
These texts are used in the footer of the WSA-applications (see above under 'Stock Management Dashboard') to indicate how many pages of the page-limit number of records there are.
The first placeholder %p will be replaced with the current page number, the second placeholder %t will be replaced with the total number of pages and the third one %n will be replaced with the total number of found records..
Stacks Image 932
Logout
This text is used as the tooltip of the logout button in the footer of the WSA-applications.
The placeholder %s will be replaced with the username the user logged in with.
Stacks Image 926

Cart

Substack : Payment Providers

Common Settings
At the moment, you can add four payment providers to the webshop.
Paypal
Paypal offers various payment methods, also without an account: your account (balance), by credit card, or iDeal (in The Netherlands), a.o., to your buyers.
Read how to setup a Paypal test-account here: https://marc.vos.net/howto/paypal-test-account/
Mollie
Mollie offers a wide range of payment methods to your buyers.
Bank Transfer
This offers your customers the option to make the payment from their own bank account, at their own time.
This method will be hidden when downloadable products are added to the cart.
At our store
You can offer this method to buyers when you also offer the 'Pick up at our store' shipping-method, or when you have products that cannot be shipped and thus have to be picked up at your store, or when you like to see your customers in person.
This method will be hidden when downloadable products are added to the cart.
Add at least one Payment Provider to your webshop.
Stacks Image 302

Not yet implemented!
When you maintain payment providers in SDS82/PSS, enter the key here. All settings, except the 'Sanbox API'- and 'Test mode'-checkboxes, will be read from SDS82/PSS.
Stacks Image 312

The following fields are used in all four payment providers:
Method name
The name is displayed at checkout, in the 'Payment'-section.
Button text
There are two texts: one for when the amount to pay is non-zero, and one for when the amount is zero.
Commission
If you want to charge money for the use of a payment method, enter the amount or percentage here.
Commission mode
Determines if the number entered in the above field, is an amount or a percentage.
Receipt message
This text is placed in the email body of the oder confirmation email. You can use HTML-code here.
The placeholder %s will be replaced with the name of the buyer, as entered in the 'Address'-section of the checkout process.
Stacks Image 316
Paypal
The following fields are Paypal specific:
Button style
This a setting for how Paypal's buttons should look. You can choose between 'Pill' (rounded corners) and 'Rectangle'.
API Client-ID + API Secret
These are the two authentication credentials you will need. You need to create an endpoint for your webshop and use those credentials at https://developer.paypal.com/dashboard/applications/live
Sandbox API
Check this checkbox when you want to test payments with Paypal. The webshop will use the Sandbox-credentials below.
Sandbox API Client-ID + API Secret
These are the two authentication credentials you will need when you want to test Paypal payments. You need to create an endpoint for your webshop and use those credentials at https://developer.paypal.com/dashboard/applications/sandbox
Stacks Image 330
Mollie
The following fields are Mollie specific:
Secret key
This is the authentication credential you will need. You need to create a profile for your webshop at https://my.mollie.com/dashboard/settings/profiles and use those credentials, which can be found at https://my.mollie.com/dashboard/developers/api-keys
Test mode
Check this checkbox when you want to test payments with Mollie. The webshop will use the Secret test key below.
Secret test key
This is the authentication credential you will need when you want to test payments with Mollie. The Secret test key is generated when you create a profile, like the live key, and canbe found at the same page as the live credentials.
Stacks Image 335

Substack : Shipping Rules

SDS82/PSS
Not yet implemented!
When you maintain Shipping Rules in SDS82/PSS, and want add them here, add a rule and enter the key here. All settings will be read from SDS82/PSS.
Stacks Image 360
Settings
Description
Enter a unique description. It will be used in the 'Shipping'-section of the checkout process.
Mode
The mode ('Fixed' or 'Percentage') determines how the price will be calculated.
Type
This setting determines what the threshold values of the below steps are:
  • Total number of items
  • Total order amount
  • Fixed
Step 1 (max 10)
Enter a threshold value in column 1 and a price in column 2. Step 2 wil open up, and you can add another, higher, threshold. Note: If the last valid step does not contain 999999 as 'Up to' value, the rule will be skipped when either Items, Order total or Weight is greater then the last 'Up to' value.
Free shipping + Amount
Check this box if you want to give free shipping to your buyer when the total order amount is higher then the amount given here.
Include countries
Enter a comma-separated list of 2- or 5-character country codes for which this rule is available. Leave blank to allow all countries.
Exclude countries
Enter a comma-separated list of 2- or 5-character country codes for which this rule is not available.
Stacks Image 366
2- or 5-character country codes
AD:Andorra
AE:United Arab Emirates
AF:Afghanistan
AG:Antigua,Barbuda
AI:Anguilla
AL:Albania
AM:Armenia
AN:Netherlands Antilles
AO:Angola
AQ:Antarctica
AR:Argentina
AS:American Samoa
AT:Austria
AU:Australia
AW:Aruba
AX:Aland Islands
AZ:Azerbaijan
BA:Bosnia and Herzegovina
BB:Barbados
BD:Bangladesh
BE:Belgium
BF:Burkina Faso
BG:Bulgaria
BH:Bahrain
BI:Burundi
BJ:Benin
BL:Saint Barthelemy
BM:Bermuda
BN:Brunei
BO:Bolivia
BQ:Bonaire,Saba,Saint Eustatius
BR:Brazil
BS:Bahamas
BT:Bhutan
BV:Bouvet Island
BW:Botswana
BY:Belarus
BZ:Belize
CA:Canada
CA-AB:Alberta, Canada
CA-BC:British Columbia, Canada
CA-MB:Manitoba, Canada
CA-NB:New Brunswick, Canada
CA-NL:Newfoundland and Labrador, Canada
CA-NS:Nova Scotia, Canada
CA-NT:Northwest Territories, Canada
CA-NU:Nunavut, Canada
CA-ON:Ontario, Canada
CA-PE:Prince Edward Island, Canada
CA-QC:Quebec, Canada
CA-SK:Saskatchewan, Canada
CA-YT:Yukon, Canada
CC:Cocos Islands
CD:Democratic Republic of the Congo
CF:Central African Republic
CG:Republic of the Congo
CH:Switzerland
CI:Ivory Coast
CK:Cook Islands
CL:Chile
CM:Cameroon
CN:China
CO:Colombia
CR:Costa Rica
CS:Montenegro,Serbia
CU:Cuba
CV:Cape Verde
CW:Curacao
CX:Christmas Island
CY:Cyprus
CZ:Czech Republic
DE:Germany
DJ:Djibouti
DK:Denmark
DM:Dominica
DO:Dominican Republic
DZ:Algeria
EC:Ecuador
EE:Estonia
EG:Egypt
EH:Western Sahara
ER:Eritrea
ES:Spain
ES-A:Alicante, Spain
ES-AB:Albacete, Spain
ES-AL:Almería, Spain
ES-AV:Ávila, Spain
ES-B:Barcelona, Spain
ES-BA:Badajoz, Spain
ES-BI:Bizkaia, Spain
ES-BU:Burgos, Spain
ES-C:A Coruña, Spain
ES-CA:Cádiz, Spain
ES-CC:Cáceres, Spain
ES-CE:Ceuta, Spain
ES-CO:Córdoba, Spain
ES-CR:Ciudad Real, Spain
ES-CS:Castellón, Spain
ES-CU:Cuenca, Spain
ES-GC:Las Palmas, Spain
ES-GI:Girona, Spain
ES-GR:Granada, Spain
ES-GU:Guadalajara, Spain
ES-H:Huelva, Spain
ES-HU:Huesca, Spain
ES-J:Jaén, Spain
ES-L:Lleida, Spain
ES-LE:León, Spain
ES-LO:La Rioja, Spain
ES-LU:Lugo, Spain
ES-M:Madrid, Spain
ES-MA:Málaga, Spain
ES-ML:Melilla, Spain
ES-MU:Murcia, Spain
ES-NA:Navarra, Spain
ES-O:Asturias, Spain
ES-OR:Ourense, Spain
ES-P:Palencia, Spain
ES-PM:Balears, Spain
ES-PO:Pontevedra, Spain
ES-S:Cantabria, Spain
ES-SA:Salamanca, Spain
ES-SE:Sevilla, Spain
ES-SG:Segovia, Spain
ES-SO:Soria, Spain
ES-SS:Gipuzkoa, Spain
ES-T:Tarragona, Spain
ES-TE:Teruel, Spain
ES-TF:Santa Cruz de Tenerife, Spain
ES-TO:Toledo, Spain
ES-V:Valencia, Spain
ES-VA:Valladolid, Spain
ES-VI:Álava, Spain
ES-Z:Zaragoza, Spain
ES-ZA:Zamora, Spain
ET:Ethiopia
EU:Europe for VAT
FI:Finland
FJ:Fiji
FK:Falkland Islands
FM:Micronesia
FO:Faroe Islands
FR:France
GA:Gabon
GB:United Kingdom
GB-ENG:England, GBR
GB-HIL:Scottish Highlands & Islands, GBR
GB-IOM:Isle of Man, GBR
GB-IOS:Isles of Scilly, GBR
GB-NIR:Northern Ireland, GBR
GB-SCT:Scotland, GBR
GB-WLS:Wales, GBR
GD:Grenada
GE:Georgia
GF:French Guiana
GG:Guernsey
GH:Ghana
GI:Gibraltar
GL:Greenland
GM:Gambia
GN:Guinea
GP:Guadeloupe
GQ:Equatorial Guinea
GR:Greece
GS:South Georgia,South Sandwich Islands
GT:Guatemala
GU:Guam
GW:Guinea-Bissau
GY:Guyana
HK:Hong Kong
HM:Heard Island,McDonald Islands
HN:Honduras
HR:Croatia
HT:Haiti
HU:Hungary
ID:Indonesia
IE:Ireland
IL:Israel
IM:Isle of Man
IN:India
IO:British Indian Ocean Territory
IQ:Iraq
IR:Iran
IS:Iceland
IT:Italy
IT-21:Piemonte, Italy
IT-23:Valle d'Aosta, Italy
IT-25:Lombardia, Italy
IT-32:Trentino Alto Adige, Italy
IT-34:Veneto, Italy
IT-36:Friuli Venezia Giulia, Italy
IT-42:Liguria, Italy
IT-45:Emilia Romagna, Italy
IT-52:Toscana, Italy
IT-55:Umbria, Italy
IT-57:Marche, Italy
IT-62:Lazio, Italy
IT-65:Abruzzo, Italy
IT-67:Molise, Italy
IT-72:Campania, Italy
IT-75:Puglia, Italy
IT-77:Basilicata, Italy
IT-78:Calabria, Italy
IT-82:Sicilia, Italy
IT-88:Sardegna, Italy
JE:Jersey
JM:Jamaica
JO:Jordan
JP:Japan
KE:Kenya
KG:Kyrgyzstan
KH:Cambodia
KI:Kiribati
KM:Comoros
KN:Saint Kitts and Nevis
KP:North Korea
KR:South Korea
KW:Kuwait
KY:Cayman Islands
KZ:Kazakhstan
LA:Laos
LB:Lebanon
LC:Saint Lucia
LI:Liechtenstein
LK:Sri Lanka
LR:Liberia
LS:Lesotho
LT:Lithuania
LU:Luxembourg
LV:Latvia
LY:Libya
MA:Morocco
MC:Monaco
MD:Moldova
ME:Montenegro
MF:Saint Martin
MG:Madagascar
MH:Marshall Islands
MK:Macedonia
ML:Mali
MM:Myanmar
MN:Mongolia
MO:Macao
MP:Northern Mariana Islands
MQ:Martinique
MR:Mauritania
MS:Montserrat
MT:Malta
MU:Mauritius
MV:Maldives
MW:Malawi
MX:Mexico
MY:Malaysia
MZ:Mozambique
NA:Namibia
NC:New Caledonia
NE:Niger
NF:Norfolk Island
NG:Nigeria
NI:Nicaragua
NL:Netherlands
NO:Norway
NP:Nepal
NR:Nauru
NU:Niue
NZ:New Zealand
OM:Oman
PA:Panama
PE:Peru
PF:French Polynesia
PG:Papua New Guinea
PH:Philippines
PK:Pakistan
PL:Poland
PM:Saint Pierre and Miquelon
PN:Pitcairn
PR:Puerto Rico
PS:Palestinian Territory
PT:Portugal
PW:Palau
PY:Paraguay
QA:Qatar
RE:Reunion
RO:Romania
RS:Serbia
RU:Russia
RW:Rwanda
SA:Saudi Arabia
SB:Solomon Islands
SC:Seychelles
SD:Sudan
SE:Sweden
SG:Singapore
SH:Saint Helena
SI:Slovenia
SJ:Svalbard and Jan Mayen
SK:Slovakia
SL:Sierra Leone
SM:San Marino
SN:Senegal
SO:Somalia
SR:Suriname
SS:South Sudan
ST:Principe,Sao Tome
SV:El Salvador
SX:Sint Maarten
SY:Syria
SZ:Swaziland
TC:Turks and Caicos Islands
TD:Chad
TF:French Southern Territories
TG:Togo
TH:Thailand
TJ:Tajikistan
TK:Tokelau
TL:East Timor
TM:Turkmenistan
TN:Tunisia
TO:Tonga
TR:Turkey
TT:Trinidad and Tobago
TV:Tuvalu
TW:Taiwan
TZ:Tanzania
UA:Ukraine
UG:Uganda
UM:United States Minor Outlying Islands
US:United States
US-AK:Alaska, USA
US-AL:Alabama, USA
US-AR:Arkansas, USA
US-AZ:Arizona, USA
US-CA:California, USA
US-CO:Colorado, USA
US-CT:Connecticut, USA
US-DC:District of Columbia, USA
US-DE:Delaware, USA
US-FL:Florida, USA
US-GA:Georgia, USA
US-HI:Hawaii, USA
US-IA:Iowa, USA
US-ID:Idaho, USA
US-IL:Illinois, USA
US-IN:Indiana, USA
US-KS:Kansas, USA
US-KY:Kentucky, USA
US-LA:Louisiana, USA
US-MA:Massachusetts, USA
US-MD:Maryland, USA
US-ME:Maine, USA
US-MI:Michigan, USA
US-MN:Minnesota, USA
US-MO:Missouri, USA
US-MS:Mississippi, USA
US-MT:Montana, USA
US-NC:North Carolina, USA
US-ND:North Dakota, USA
US-NE:Nebraska, USA
US-NH:New Hampshire, USA
US-NJ:New Jersey, USA
US-NM:New Mexico, USA
US-NV:Nevada, USA
US-NY:New York, USA
US-OH:Ohio, USA
US-OK:Oklahoma, USA
US-OR:Oregon, USA
US-PA:Pennsylvania, USA
US-PR:Puerto Rico, USA
US-RI:Rhode Island, USA
US-SC:South Carolina, USA
US-SD:South Dakota, USA
US-TN:Tennessee, USA
US-TX:Texas, USA
US-UT:Utah, USA
US-VA:Virginia, USA
US-VT:Vermont, USA
US-WA:Washington, USA
US-WI:Wisconsin, USA
US-WV:West Virginia, USA
US-WY:Wyoming, USA
UY:Uruguay
UZ:Uzbekistan
VA:Vatican
VC:Saint Vincent and the Grenadines
VE:Venezuela
VG:British Virgin Islands
VI:U.S. Virgin Islands
VN:Vietnam
VU:Vanuatu
WF:Wallis and Futuna
WS:Samoa
XK:Kosovo
YE:Yemen
YT:Mayotte
ZA:South Africa
ZM:Zambia
ZW:Zimbabwe

Substack : Cart and/or Product Options

SDS82/PSS
Not yet implemented!
When you maintain an option in SDS82/PSS, and want add it here, add a rule and enter the key here. All settings will be read from SDS82/PSS.
Stacks Image 390
Settings
These are the main settings that determine where and how an option is shown to the customer.
Name
A unique name for this option.
Mode
Determines where the option is presented to the buyer. 'Cart' is shown in its own tab during checkout. The others are shown when the buyer views the individual product page. You can choose from:
  • Cart
  • Category
  • Tag
  • Group
  • Product SKU
Stacks Image 398
Values
Enter a single value or a comma-separated list of values that match the above chosen 'Mode':
  • Category : enter one or more categories.
  • Tag : enter one or more tags.
  • Group : enter one or more groups. Groups are free to define in the 'Product'-substack. With groups you can link an option to products without having to use the other types. Groups are not visible to the customers.
  • Product SKU : enter one or more SKU's.
This field will be hidden for mode 'Cart', because it has no meaning there.
Type
Determines how the options below are presented to the customer. You can choose from:
  • Checkboxes
  • Drop-down menu
  • Message
  • Text entry
Required
Check this setting if the option is required. This setting is only valid for types 'Checkboxes' and 'Drop-down menu'; it will be hidden for the other two types.
Choices, Message & Text entry
These choices are shown when the 'Type' is set to 'Checkboxes' or 'Drop-down menu'. You can have a maximum of 10 choices per option.
Choice text
A unique name for this checkbox- or menu-choice.
Price
If this choice cost money, enter a price here. Prices are net, ergo ex. taxes.
Weight
If this choice adds to the overall weight of the package to ship, regarding shipping costs, enter a weight here. Weights are in grammes, so 2 kilo must be entered as 2000.
Note: If a 'Choice text' is left empty, the choice will not be used.
Note: For type 'Checkboxes', the buyer can select none or all items.
Note: When 'Required' is checked, the buyer has to select at least one checkbox, or choose at least one menu-item.
Stacks Image 428

This entry field is shown when the 'Type' is set to 'Message'.
Message
Enter a message here. Messages are used to inform the buyer about something, and have no effect on order totals, weights, etc..
Stacks Image 436

These entry fields are shown when the 'Type' is set to 'Text entry'. This can be used to let the customer add a birthday text or some other message.
Max. length
The maximum number of characters the message may be. Only when the buyer has entered text, the option is seen as having been selected.
Price
If this option cost money, enter a price here. Prices are net, ergo ex. taxes.
Stacks Image 445

Substack : Costs

SDS82/PSS
Not yet implemented!
When you maintain a Cost rule in SDS82/PSS, and want add it here, add a rule and enter the key here. All settings will be read from SDS82/PSS.
Stacks Image 460
Settings
Costs are extra costs that can arise when a buyer adds certain products, reaches a certain order amount, or general costs that are always added to the cart at checkout.
Description
Add a unique description or short name for the cost. The description is shown during checkout and on the confirmation email.

With costs for Products, Categories or Tags, you can use the placeholder %i, which will be replaced with the text 'Num * Cost %' or 'Num * Amount'.
Stacks Image 469
Mode
Determines if the cost is a fixed amount or a percentage:
  • It is ignored with type 'Shopping cart', that one is always fixed, because it cannot be based on anything useful.
  • Percentage for 'Order Total', 'Order Weight' and 'Number of Items' is based on the total amount spent on all products.
  • Percentage for 'Products', 'Categories' and 'Tags' is based on the total amount spent on the specified Products, Categories or Tags.
Valid from - until
The validity period for this cost.
Type
Set the type of cost:
'Shopping cart': is an independent cost.
'Order total': is based on the total net amount of the products in the cart.
'Order weight': is based on the total weight of the products in the cart.
'Total number of items': is based on the number of products in the cart.
'Specified product SKU': used to target a single product.
'Specified categories': used to target certain categories.
'Specified tags': used to target certain tags.
See the next section 'Types Settings' for what can be entered for each type.
Types Settings
Amount or %
As written above, with this choice, Mode is ignored and the number entered is used as a fixed amount, never as a percentage.
Stacks Image 478

The explanation for these Steps is the same for 'Order total', 'Order weight' and 'Total number of items'.
Step 1 through 10
It starts with Step 1. When you enter a value in column 1 ('Up to'), Step 2 opens up, and so forth, to a maximum of 10 steps.
The values entered in column 1 are 'up to and including' values. In this example, when the total net order amount is 100 or less:
  • a cost of 10 is added to the cart at checkout, when Mode is set to 'Fixed'.
  • a cost of 10% of the net order amount is added to the cart at checkout, when Mode is set to 'Percentage'.
Step 10 is empty, which means that a net amount over 10000 costs nothing extra.
Stacks Image 487

The explanation for these entry fields is the same for 'Product SKU', 'Category' and 'Tag'.
Values to include
Add a comma-separated list of values for the chosen Type, for which this cost is available.
In this example, this cost is only added to the cart when the buyer has added product SKU1BR to the cart.
Amount or %
In this example:
  • a cost of 2,22 is added to the cart at checkout, when Mode is set to 'Fixed'.
  • a cost of 2,22% of the net product amount is added to the cart at checkout, when Mode is set to 'Percentage'.
Stacks Image 496

Substack : Discounts

SDS82/PSS
Not yet implemented!
When you maintain a Discount rule in SDS82/PSS, and want add it here, add a rule and enter the key here. All settings will be read from SDS82/PSS.
Stacks Image 564
Settings
Discounts can arise when a buyer adds certain products, reaches a certain order amount, or general discounts that are always added to the cart at checkout.
Description
Add a unique description or short name for the discount. The description is shown during checkout and on the confirmation email.

With discounts for Products, Categories or Tags, you can use the placeholder %i, which will be replaced with the text 'Num * Discount %' or 'Num * Amount'.
Stacks Image 528
Mode
Determines if the discount is a fixed amount or a percentage:
  • It is ignored with type 'Shopping cart', that one is always fixed, because it cannot be based on anything useful.
  • Percentage for 'Order Total', 'Order Weight' and 'Number of Items' is based on the total amount spent on all products.
  • Percentage for 'Products', 'Categories' and 'Tags' is based on the total amount spent on the specified Products, Categories or Tags.
Requires a coupon code
If checked, this discount is applied only if the coupon code entered below is supplied during checkout.
Coupon code
Enter a coupon code. It can be as simple as 'ABCD' or as complex as 'CM#L3&9Kz4Yj*c'. It's up to you.
Usage limit
Limit the number of times this coupon code can be used per email address. '0' means no limits.
Note: Limits will only be checked when you enabled the database.
Valid from - until
The validity period for this discount.
Type
Set the type of discount:
'Shopping cart': is an independent discount.
'Order total': is based on the total net amount of the products in the cart.
'Order weight': is based on the total weight of the products in the cart.
'Total number of items': is based on the number of products in the cart.
'Specified product SKU': used to target a single product.
'Specified categories': used to target certain categories.
'Specified tags': used to target certain tags.
See the next section 'Types Settings' for what can be entered for each type.
Types Settings
Amount or %
As written above, with this choice, Mode is ignored and the number entered is used as a fixed amount, never as a percentage.
Stacks Image 537

The explanation for these Steps is the same for 'Order total', 'Order weight' and 'Total number of items'.
Step 1 through 10
It starts with Step 1. When you enter a value in column 1 ('Up to'), Step 2 opens up, and so forth, to a maximum of 10 steps.
The values entered in column 1 are 'up to and including' values. In this example, when the total net order amount is between 100 and 250:
  • a discount of 5 is added to the cart at checkout, when Mode is set to 'Fixed'.
  • a discount of 5% of the net order amount is added to the cart at checkout, when Mode is set to 'Percentage'.
Step 4 is empty, which means that for a net amount over 500, no discount is given. If you want to mix percentage and fixed, use two discount rules.
Stacks Image 546

The explanation for these entry fields is the same for 'Product SKU', 'Category' and 'Tag'.
Values to include
Add a comma-separated list of values for the chosen Type, for which this discount is available.
In this example, this discount is only added to the cart when the buyer has added product SKU1BR to the cart.
Amount or %
In this example:
  • a discount of 2,22 is added to the cart at checkout, when Mode is set to 'Fixed'.
  • a discount of 2,22% of the net product amount is added to the cart at checkout, when Mode is set to 'Percentage'.
Stacks Image 555

Substack : Countries, Currency & Taxes

General
Note: when you use SDS82/PSS, this substack will be hidden, because then all settings will come from SDS82/PSS.

Note: Always add the default country (see 'Webshop Stack Settings -> Cart / Checkout') first.

Note: If you sell digital downloadable products to EU-consumers, you must create 'Countries, Currency & Taxes' rules for ALL EU countries. The reason for this is that when the buyer provides an EU-country in the 'Address' section of the checkout-sequence, and does not, or cannot, enter a valid EU-VAT-number, VAT of the EU-country from the buyer must, and will, be calculated, unless your revenue from selling digital products to consumers is less than 10.000,- EUR per year. In that case, check the box 'Force local VAT' under 'Webshop Stack Settings -> Cart' (see above).

Country code
Choose a country. For a complete list, see 'Substack: Shipping Rules -> 2- or 5-character country codes'.
Stacks Image 581
Currency
Code
Choose the currency your webshop uses.
Symbol
Enter the currency symbol for the chosen currency.
Decimal separator
Choose the decimal separator for the chosen currency. A comma implies a dot as the thousands separator, and vise-versa.
Stacks Image 590
Taxes
Tax type
Choose between VAT or Sales Tax. VAT is line based, Sales Tax is order based.
High %
The highest VAT %, or when (G)ST, the Sales Tax %.
Middle %
The next lower %.
Low %
The lowest %.
In a 'Product'-substack, you can specify which of the three is valid for that product.
Stacks Image 599

Products

Substack : Product

SDS82/PSS
Not yet implemented!
When you maintain Products in SDS82/PSS, you normally do not add products here. Only when you want to add an existing PSS-product which needs different settings for this webshop, enter the product key here. The settings below will be used to display the product, not those from SDS82/PSS.

When you enter a product code here, the entry field 'General -> Product SKU' will be hidden, and the title of the substack will show the PSS-key instead of the Product SKU:
Stacks Image 684
General
Product SKU
Enter the unique product code / SKU you use for this product.
Product GTIN
A unique numerical identifier for commercial products that is usually associated with a barcode printed on retail merchandise. The number must already exist!
Product MPN
In case you are the manufacturer and the only seller of a product without an assigned MPN, include a unique identifier number of your choice.
Product ISBN
A unique numerical identifier for commercial books published since 1970 that can be found on the back of a printed book, or inside a digital book, or on CDs and DVDs, along with the barcode. The number must already exist!
Product brand
Enter the name of the brand of the product.

Note : The above fields will be shown on the product page, when they are not empty.
Note : The above fields will be hidden when an SDS82/PSS ID is used.
Name
Enter the short name of the product..
Short description
Enter a short description of the product. It will be shown in the catalog, below the name of the product.
Stacks Image 662
Show long description
When checked, it will show two things:
  • The menu 'Long description type'
  • An large entry field inside the substack, that matches the chosen type.
Long description type
Here you choose what type of edit field it should be, for the long description of the product.
You can choose from:
  • HTML: Enter plain HTML code and text.
  • Markdown: Use Markdown to enter the long description.
  • Styled Text: A standard RapidWeaver styled text area.

Styled Text example

Note : For the product, JSON-Linked Data code will be generated on the individual product page. This makes it easier for search engines to find and show your product in their search results. You can test your individual product page by first copying the link (click the copy-icon on the product page) and the go here https://search.google.com/test/rich-results and paste the link.
Publishing
Publish product
Check this box if you want the product published, when you publish this page. If you uncheck this box, the title of the substack will show this, so you have less chance to overlook it:
Publish date
On publishing the page, the product data will be 'published', but the webshop will look at this date to check if the product should appear in the catalog or not yet.
Note: when products are not showing in Preview or on your site, check the Timezone in the main stack settings. The product's initial publishing date is set using your Mac's date/time, which can be very different form the date/time of the timezone. When the Timezone is hours behind, set the publishing date also a day behind.
Stacks Image 670
Star rating
This is the initial star-rating when using the database. If you have not enabled the databse, this is the actual star-rating for the product and the buyer will not be able to rate the product directly.
Promote product
When checked, a tag with the word 'Promoted' will appear in place of any other tag:
Also, if there are any promoted products in the catalog, a search option 'Promoted' will appear in the sidebar:

You can modify the word 'Promoted' in 'Localization -> Product -> Promoted'.
Delivery type
This setting is important for the shipping of the product. You can choose from three options:
  • Physical, shipping : this means the product can be shipped via a chosen shipping method, defined under 'Shipping Rules'
  • Physical, no shipping : this means the product cannot be shipped and has to be picked up. If you sell such products, add a Shipping Rule, for example 'Pick up at our store'. This will also be expicitly mentioned during checkout and in the purchase confirmation email:
  • Digital delivery : this means the product cannot be shipped, and no shipping rule will be chosen for this product on checkout. See the explanation of the settings for this type below.

Digital Delivery Settings

File to deliver
An URL to the file to be delivered. Set the URL to the file via the 'Edit Link'-button.
Note : The link will be encrypted by using your serial number before it is placed as data inside a download link to this webshop in the purchase confirmation email. When the user clicks the linnk in the email, it will go to this webshop, decrypt the data, read the file and serve it as a download to the buyer. This way, no buyer will ever see the URL to the actual file.

As with 'No shipping', a notification is shown during checkout:
Stacks Image 703
Link expiration
Number of hours before the download link expires. Setting it to 0 means that the link never expires.
If hours are entered, the expiration date/time is calculated from the timestamp the purchase confirmation email is sent. This date is contained inside the encrypted data. Upon a download request, the data is decrypted, the expiration date/time is compared with the current date/time, and if it is greater than or equal to now, the download is initiated, otherwise and error-page is shown to the buyer.
Download limit
Number of times the product can be downloaded. Works only with the database enabled. Setting it to 0 means unlimited downloads.
Download button + link example

https://your.own-webshop.com/files/wsapi.php?-dl=uxex4e5730334e474e49513031494f584a714d6d4a47626b46724d6d39hoK7NwyLdM2...
Ordering
Order size
Enter the order size. You can use decimals.
Price
Price is excl. tax
Apply taxes
Decide which tax-% should used for this product. You can choose from:
  • None
  • First rate : this is the highest %. Use this for high VAT or Sales Tax.
  • Middle
  • Low
Weight
Enter the weight in grams; you can use decimals.
Stacks Image 715
Stock available?
When checked, the 'Initial quantity' below will be used. When unchecked, a 'Sold out' message will be shown, unless this is a digital delivered product, or 'Allow orders?' is checked.
Allow orders?
This checkbox only appears when 'Stock available?' is unchecked, and only affects physical products. Normally the 'Sold out' message would appear when there is no stock, but now you can still allow orders, which is very handy for (artisan) products that need manufacturing, or for products for which stock is never kept. When checked, a text 'No stock, allow orders' is shown in the products title bar:
Stacks Image 950
Min. quantity
The minimum number a customer must order per order; this number cannot be less than 'Order Size' (see above). A value of 0 means the minimum is 1 x 'Order Size'.
Max. quantity
The maximum number a customer can order per order. A value of 0 means limited by stock availabilty, which only works with 'Stock Management' enabled.
Stock management
Switch database stock management on. Remember to enable and fill in the database data in the main settings. Uncheck for digital delivered products.
Initial quantity
This setting is used in two ways:
  • With database enabled: the database will initially be filled with this number, when the product is not already in the database. When it already is, use the 'Stock Management Admin' web page to manage the stock.
  • Without a database: for this product, this is the number available displayed in the catalog.
Note : When 'Min. quantity' is not 0 and 'Min. quantity' equals 'Max. quantity', the (+) and (-) buttons to increase the order quantity, are not displayed.
Grouping
Gouping is used to link products together, based on certain criteria. These criteria are defined / made up by you.
Groups
Enter a comma-separated list of self-defined product groups.
Products belonging to same group will be presented as product versions. For example, a white blouse and a blue blouse of the same model and brand, can both belong to a same group. Or a screw and a bag of the same screws should belong to same group.
Groups are also used to link specific Cart Options to a product group.
Note : The group names are for internal use only, and are not seen by customers.
Show only in Versions
This checkbox appears when something has been typed into the 'Groups'-field.
Check this box to have this Product removed from the catalog, so it will only appear in the Versions-bar when viewing a single product. The selection will also be shown in the Product-stack's title bar:
Categories
Enter a comma-separated list of self-defined categories.
Categories are listed in the sidebar, as searchable fields.
Tags
Enter a comma-separated list of self-defined tags.
Tags are also listed in the sidebar, as searchable fields.
Cart and/or Product Options, Costs and/or Discounts can also be based on Categories or Tags.
Stacks Image 727
Resources
Use resources to display images and/or videos of your product.
You can add up to 10 resources.
Resource 1 is also used in the catalog.
Resource type and Thumbnail type
You can choose from 3 types:
  • Image file: drag an image into the image well.
  • Image URL: click the Edit Link-button to choose an URL to an image.
  • Video URL: click the Edit Link-button to choose an URL to a video. Videos are not shown in the Lightbox. Set a thumbnail image as the video's overlay to click on.
Note: Do not check 'Open in New Window' in the Link-chooser.
Caption
The caption is used and displayed in the Lightbox, below the image, when not empty and the Lightbox is enabled (see above at Webhsop Stack Settings -> Product page -> Enable lightbox).
Stacks Image 739
Stacks Image 937

or

 

Version History

v1.0 - January 2024

v1.0.0, 04 Jan 2024

- Initial release.

v1.0.1, 08 Jan 2024

- VAT liability text was also printed in the confirmation email with non-EU countries.
- Discount '%i' placeholder fixed in confirmation emails.

v1.0.2, 09 Jan 2024

- VIES VAT-ID check converted from SOAP to REST API.
- VAT-ID country-code check improved.

v1.0.3, 09 Jan 2024

- VIES VAT-ID response check improved.

v1.0.4, 24 Jan 2024

- The Price in Option Sets can now be max +/- 1000.00 instead of 100.00.

- Renamed 'Czech Republic' to 'Czechia' in country drop down menus.

- Increased the maximum number of Shipping Rules, Cart and/or Product options, Costs, Discounts and Countries & Taxes substacks from the default 25 to 500 and Products to 5000.

- Increased the number of options in 'Cart and/or Product options' for 'Drop-down menu' or 'Checkboxes' from 5 to 10.

- Improved speed by using new functions for detecting Cart and/or Product options.

- Improved EU VAT handling regarding selling digital downloadable products.

- Added a new checkbox to force local VAT for digital products when your revenue from selling digital products to consumers is less than 10000 EUR.
- VAT is now split per country when you have to calulate VAT of the buyer's EU-country, when it is different from your EU-country.
- Added the VAT/TAX countries, tax percentages and amounts to the webhook data, in the 'payment->taxes'-array.
See the manual under 'Webshop Stack Settings -> Cart/Checkout', 'Countries and taxes' and 'Products'.

- Improved reading the publishing date from the Product. A AM/PM date could result in a faulty date and not show any product in the catalog.

- Reduced the serial number check to once per session.

- Added a memory cleanup before serving a downloadable file.

- Fixed replacing %i placeholders in Discounts and Costs names.

v1.0 - February 2024

v1.0.6, 9 Feb 2024

- When testing your webshop locally, you can now clear the cart's session contents by checking 'Enable maintenance mode', click the 'Preview'-eye, and then uncheck 'Enable maintenance mode'. New products are only added to the database once per user-session, to prevent unnecessary reading of the database at each page load; so when the session is cleared, a new user-session is initiated and thus will the database be updated.

- Fixed the Time Zone in the API file. It now reads the Time Zone from the Webshop's settings.

- Fixed a bug that would prevent products from showing up, when 'Webshop -> Catalog -> Page numbers' was set to 'Bottom'.

- Fixed a bug that would display a wrong month in the product's JSON-LD.

- Added headings 'Discounts' (is also the default) and 'Costs' (is also the default) in the Cart-localization settings.

- Added heading 'Customer' (is also the default) in the Admin-localization settings.

- Added the first admin page: /files/wsaorders.php

- Added translateable texts and date/time formats to the 'Localization' substack, in the 'Admin'-section.

- Removed some texts from the 'Admin'-section in the 'Localization' substack, because those were never going to be used.


v1.0.7, 16 Feb 2024

- Added an option 'Show only in Versions' in 'Products', under 'Grouping', attached to 'Groups'. When using groups to create 'Versions', you can now exclude products from the 'Catalog' and have them only show up in the 'Product Versions'-bar.

- Added two new admin cq. dashboard pages:

  • /files/wsaproducts.php to manage product's stock.
  • /files/wsadownloads.php to manage digital downloads.
  • (see Stock Management Dashboard for more info).

- Fixed the column titles of the CSV-export in WSA-applications.

- Last sort column and direction are now memorized during the session in WSA-applications.

- Fixed the digital download problem where only a part of the file would be downloaded.

- Fixed other minor issues in WSA-applications.


v1.0.8, 23 Feb 2024

- Added a new button 'Remove all' to the products-list under the Cart in the Toolbar, to clear the whole cart at once. This also resets the session.

- The names / descriptions of Options, Costs and Discounts do not have to be unique anymore. You can now use the same description (aka 'key') in various contexts, like different categories or tags.

- Improved database synchronisation of new products and new discount coupons.

- Added a new admin cq. dashboard page: /files/wsaratings.php to moderate product reviews.

- Improved date filters in the WSA-applications.

- Fixed 'required' display bug in Cart options.


v1.0 - March 2024

v1.0.9, 1 Mar 2024

- Fixed a bug when 'Apply taxes' in the 'Product' was set to 'None'.

- Fixed a bug when 'Sold out' in the indivudual 'Product' page should (not) be displayed.

- Fixed a bug where an empty coupon code record was inserted in the coupons-table.

- Fixed a bug when the buyer's names were entered without a space in between. Now, an error message is displayed when only one word is found. For example, 'J.Smith' is one word, but 'J. Smith' are two words. The webshop will try to put a space between the last dot and the following word, to avoid the error message. Reason: Paypal and Mollie require a 'first' and 'last' name.

- Fixed a logic error where one could order a product directly from the catalog without seeing, and adding, the availabe options. Now, when any option is detected for a product, the 'View product' button is shown, instead of the 'add-to-cart' buttons.

- In the product-stack's title bar, I gave 'Promoted', 'Show only in versions' and 'NOT published' different colors for better recogition of these important settings.

- The 'Back to catalog'-button in the 'Individual product'-page is now also the same blue/white as the others.

- Added a new checkbox to the 'Product'-stack: 'Allow orders?'. This checkbox only appears when 'Stock available?' is unchecked, and only affects physical products. Normally the 'Sold out' message would appear, but now you can still allow orders, which is very handy for (artisan) products that need manufacturing, or for products for which stock is never kept. When checked, a text 'No stock, allow orders' is shown in the products title bar.

- Added the last admin cq. dashboard page: /files/wsacoupons.php to manage coupons.


v1.1.0, 17 Mar 2024

- Fixed a bug with the determination of taxes when the country was not listed under 'Countries and Taxes'.


v1.1.1, 30 Mar 2024

- Fixed a bug in WSAPI with the determination of taxes when the country was not listed under 'Countries and Taxes'.

- Improved sending mail to the 'Send copy to' email address.


On this website, Google Analytics is used to track visitor statistics. These are anonymized data about the number of visitors, which pages they visit on this site, from which regions they visit, which web browsers they use, etc..
Privacy Statement