E-commerce solution for October CMS

Overview

oc-mall

E-commerce solution for October CMS

Build Status

oc-mall is a fully featured online shop solution for October CMS.

  • Manage Products and Variants
  • Virtual products (download only, no shipping)
  • Product services (e. g. extended warranty, on-site installation)
  • Stock management
  • Wishlists
  • Reviews and ratings
  • Checkout via Stripe, PayPal and PostFinance supported out-of-the-box
  • Custom payment providers
  • Integrated with RainLab.User
  • Multi-currency and multi-language (integrates with RainLab.Translate)
  • Shipping and Tax management
  • Specific prices for different customer groups
  • Unlimited additional price fields (reseller, retail, reduced, etc)
  • Custom order states
  • Flexible e-mail notifications
  • Easily extendable with custom features
  • Google Tag Manager and Google Merchant Center integrations

Documentation

The documentation of this plugin can be found here: https://offline-gmbh.github.io/oc-mall-plugin/

Requirements

  • PHP7.2+
  • October Build 444+
  • For best performance use MySQL 5.7+ or MariaDB 10.2+

Demo

A live demo of the plugin can be found here: https://mall.offline.swiss

Support

For support and development requests please file an issue on GitHub.

Installation

The easiest way to get you started is by using the command line:

php artisan plugin:install rainlab.user
php artisan plugin:install rainlab.location
php artisan plugin:install rainlab.translate
php artisan plugin:install offline.mall

Once the plugin is installed take a look at the official documentation to get everything up and running.

Benchmarks

Below are some totally unscientific benchmarks created on a lazy Saturday afternoon. These tests were run on a DigitalOcean CPU optimized Droplet with 2 vCPU and 4GB RAM. October was run on Ubuntu 18.04, PHP 7.2.10, Apache 2.4.19 and MySQL 5.7.24.

All measurements were done using the Bedard.Debugbar plugin and are the average load time over 10 page loads (I told you they were unscientific!).

Index size defines the size of the offline_mall_index table. This table includes de-normalized information about all Products and Variants. An index size of 1000 means there are 1000 individual Variants and Products stored. The demo data used was built using the php artisan mall:seed-demo command run in an infinite loop.

Category page load is the page load time measured when a category page is loaded. All stored products will be filtered, sorted (by sales count) and counted by the currently viewed category_id. Nine of these products will be displayed and the pagination will be built based on the returned number of results.

Filtered page load is the page load time measured when two filters are being enabled (filter by the color Red and the material Carbon). In this case all products will be filtered by their category, their color and their material. The pagination will be built based on the returned number of results.

Index size Category page load Filtered page load
1'000 290 ms 281 ms
5'000 301 ms 295 ms
10'000 324 ms 318 ms
50'000 448 ms 433 ms
100'000 586 ms 570 ms
200'000 912 ms 865 ms
300'000 1300 ms 1240 ms

Please be aware that these benchmarks are only here to show you how this plugin behaves under different loads and the times will vary depending on the hardware, configuration and setup of your installation. If you really want to know how well the plugin performs install it yourself and give it a go!

Contributing

Documentation

The raw documentation for this plugin is stored in the docs directory. It is written in markdown and built with VuePress.

For a live preview of the docs install vuepress locally and run vuepress dev from the docs directory.

Bugs and feature requests

If you found a bug or want to request a feature please file a GitHub issue.

Pull requests

PRs are always welcome! Open them against the develop branch. If you plan a time consuming contribution please open an issue first and describe what changes you have in mind.

Comments
  • paypal error after redirect to site.

    paypal error after redirect to site.

    Twig token error after payment.

    paypal was in sandbox mode. in paypal i could finalize the payment. after redirect back to cart i got this error.

    payment was successfully registered.

    Screenshot_21

    opened by papppeter 29
  • Implementing the Mollie payment gateway

    Implementing the Mollie payment gateway

    Hi,

    I'm trying to get the payment gateway Mollie working with the Mall plugin. I've created a plugin and imported the relevant OmniPay packages (https://github.com/thephpleague/omnipay-mollie). I'm basing myself on the example as provided by the makers of the OmniPay Mollie package.

    I would like the user to be redirected to the Mollie payment page (example https://www.mollie.com/payscreen/select-method/8sTxQCJ7Vy) and have them select their preferred way of paying there (debit card, credit card, paypal, bank transfer...) and have them redirected to the site once they complete the payment.

    My in my Payment Provider class, the process method looks like this:

        public function process(PaymentResult $result): PaymentResult
        {
            $gateway = \Omnipay\Omnipay::create('Mollie');
            $gateway->setApiKey('test_xxxxxxxxxxxxxxxxxxxxxxxx');
    
            $response = $gateway->purchase(
                [
                    "amount" => "10.00",
                    "currency" => "EUR",
                    "description" => "My first Payment",
                    "returnUrl" => "https://webshop.example.org/mollie-return.php"
                ]
            )->send();
    
            $data = (array)$response->getData();
    
            // Process response
            if ($response->isSuccessful()) {
    
                // Payment was successful
                print_r($response);
    
            } elseif ($response->isRedirect()) {
    
                // Redirect to offsite payment gateway
                $response->redirect();
    
            } else {
    
                // Payment failed
                echo $response->getMessage();
            }
        }
    

    This almost works, but there is one big snag: it seems Mollie doesn't allow a redirect to their platform that originates in Ajax. So I get the following error message (both in localhost development and in a staging environment with a valid SSL-certificate):

    Access to XMLHttpRequest at 'https://www.mollie.com/payscreen/select-method/8sTxQCJ7Vy' (redirected from 'http://localhost/myproject/checkout/confirm') from origin 'http://localhost' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

    I did some searching and saw that others encounter the same issue (with different platforms): https://stackoverflow.com/questions/43766286/no-access-control-allow-origin-header-is-present-on-the-requested-resource-m

    They ask that the redirect happens via another way, for example the user pressing a certain button, or a redirect in another way. What would you recommend I do in this situation? Is there a workaround for such a thing?

    Thanks in advance for your response.

    opened by chocolata 26
  • Paypal sandbox error

    Paypal sandbox error

    I get this when I click on the payment button. My store is still in test mode.

    ERROR: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

    OctoberCMS is up to date, Php server version is 7.1

    WHat should I do?

    opened by cssninjaStudio 20
  • running unit test

    running unit test

    I am trying to run the unit tests and i fall into this error:

    PHP Fatal error:  Uncaught Error: Class 'PluginTestCase' not found in /Users/xxxccc/Sites/oc-mall/plugins/offline/mall/tests/PluginTestCase.php:8
    
    opened by chrisvidal 19
  • Option To Add Multiple Categories To One Product

    Option To Add Multiple Categories To One Product

    Basically, I want the option to add more categories to one product. Say for instance I have a product called "Red Tee" and I want to add that product to three categories:

    • Men
    • Women
    • Red

    Is this possible now?

    enhancement 
    opened by artistro08 19
  • Currencies support issues

    Currencies support issues

    Hard to debug, and how to recreate this, But shop is able to forget to display all prices. All prices can get 0.00 values instead correct prices. Problem is able to fix them-self after a longer while. But if it come back it's critical error. Any idea what could have happened, to cause problem like this in newest version?

    I will test it further to get any more useful information about this.

    opened by amdad 18
  • Winter or October CMS

    Winter or October CMS

    Now the octobercms version 2 will be closed source.

    There are some people that they forked the octobercms calling it winter cms https://github.com/wintercms/winter/issues/5.

    The mall plugin In my opinion is the best and most completed ecommerce solutions out there using octobercms.

    I am a lover of open sources projects, it help to grown the community easily because of the transparency of open source code, and I believe that the perfect way to have great development scale of any project faster and better is to keep it open source, look at linux, git, laravel etc. Also Community

    What do you think? Wouldn't' t b be better for the mall to continue developed based on an open source cms ? like wintercms?

    opened by panakour 17
  • Rainlab.Page Url is wrong when using categories

    Rainlab.Page Url is wrong when using categories

    Hey man, so the category page url is wrong when navigating to a product. The generated urls picks up the hash that's generated for the current product.

    Example:

    image

    image

    opened by artistro08 17
  • New field types for properties / cart custom fields Date, DateTime

    New field types for properties / cart custom fields Date, DateTime

    Hi,

    would it be possible to add two new field type? It would be really use full if date, datetime picker, maybe a date range picker would appear in field type dropdown. (create custom fields, create property)

    or what would be the best way to extend it with this feature?

    and one more thing, is there a possibility to add a time frame how long a variant is active?

    enhancement help wanted 
    opened by papppeter 17
  • [BUG} SERIOUS ERROR:Guest Order Used Another Customer's Information

    [BUG} SERIOUS ERROR:Guest Order Used Another Customer's Information

    Apparently, one customer placed an order as a guest and the information that saved was from another customer. I have no idea how this issue happened but it is a very serious error. My speculation is that both customers had the item in their shopping cart at the same time and these products are in limited quantity.

    opened by letthewriterswrite 16
  • Discount creation error

    Discount creation error

    cant create any discount since last version

    Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) /var/www/html/vendor/october/rain/src/Database/Traits/Nullable.php line 27

    opened by chrisvidal 15
  • OrderProduct prices shown in active instead of Order currency

    OrderProduct prices shown in active instead of Order currency

    Mall 2.0.19 / OctoberCMS 2.2.35 Both on backend and frontend OrderProduct (order line items) prices are always shown in activeCurrency (currency selected in frontend or default as fallback), while totals and add-ons are correctly shown in Order currency.

    Calculation for display comes from this method: https://github.com/OFFLINE-GmbH/oc-mall-plugin/blob/develop/models/OrderProduct.php#L86

    opened by Eoler 0
  • Have you found a solution to the Double payment confirmation notification to client ?

    Have you found a solution to the Double payment confirmation notification to client ?

        Have you found a solution to the Double payment confirmation notification to client ? 
    

    I'm having the same problem, and this makes Gmail block some mails in spam, before the client mailbox... So not in the client mailbox at all, even in spams section.

    Originally posted by @CarolinePublipresse in https://github.com/OFFLINE-GmbH/oc-mall-plugin/issues/877#issuecomment-1344082803

    opened by CarolinePublipresse 3
  • Soft deletion of orders

    Soft deletion of orders

    Hi,

    My client deleted an order by accident and I saw that soft deletion was enabled by default. So great - I was able to undo the deletion of the order via the database. Thank you for your foresight! I saw that the deleted_atcolumn was present both in offline_mall_ordersand offline_mall_order_products.

    The only thing that is missing is the deleted at column in the offline_mall_payments_log table. Could you kindly consider and review the changes I proposed in the following pull requests?

    https://github.com/OFFLINE-GmbH/oc-mall-plugin/pull/974 https://github.com/OFFLINE-GmbH/oc-mall-plugin/pull/975

    Thanks for all of your work.

    opened by chocolata 0
Releases(v2.0.0)
  • v2.0.0(Jun 1, 2022)

    This plugin now requires October 2+. If you want to use the plugin in October 1, use the ^1.0 version of this plugin.

    What's Changed

    • Fix issues with newer Laravel versions. by @mjauvin in https://github.com/OFFLINE-GmbH/oc-mall-plugin/pull/931

    Full Changelog: https://github.com/OFFLINE-GmbH/oc-mall-plugin/compare/v1.16.2...v2.0.0

    Source code(tar.gz)
    Source code(zip)
A free shopping cart system. OpenCart is an open source PHP-based online e-commerce solution.

OpenCart is a free open source ecommerce platform for online merchants. OpenCart provides a professional and reliable foundation from which to build a successful online store.

OpenCart 6.6k Dec 31, 2022
Drag and Drop Website Builder and CMS with E-commerce

Microweber: Drag-and-Drop CMS Current version: 1.2 running on Laravel 8! Download | What is Microweber? | Core features of Microweber | Requirements |

Microweber 2.6k Dec 28, 2022
An E-Commerce package for Laravel with Grafite CMS. Take control of your content and how you sell it! Products, subscriptions, shipping, downloading and more!

Grafite Commerce Grafite has archived this project and no longer supports or develops its code. We recommend using only as a source of ideas for your

Grafite Inc 45 Jun 8, 2021
PHP payment library to easily integrate Baltic banklinks (supports old and new iPizza protocol), E-commerce gateaway (Estcard, Nets Estonia), Liisi Payment Link and Pocopay.

PHP Payment library PHP payment library to easily integrate Baltic banklinks, E-commerce gateaway (Estcard, Nets Estonia), Liizi Payment Link and Poco

Rene Korss 34 Apr 27, 2022
Commerce GrappQL Package for Laravel

Sailwork Commerce Package for Laravel Document Please read document in here: Document Installation You can install the package via composer: composer

Sail Work 6 May 10, 2021
Laravel FREE E-Commerce Software

Laravel FREE E-Commerce Software

Jeff Simons Decena 1.7k Dec 24, 2022
A free open source e-commerce platform for online merchants based on customised version of Laravel.

A free open source e-commerce platform for online merchants based on customised version of Laravel.

Ace Vinayak 58 Oct 19, 2022
Zen Cart® is a full-function e-commerce application for your website.

Zen Cart® - The Art of E-Commerce Zen Cart® was the first Open Source e-Commerce web application to be fully PA-DSS Certified. Zen Cart® v1.5.8 is an

Zen Cart 304 Jan 6, 2023
Full-featured e-commerce platform with multi-domain and multi-language support for PHP 8

Surikata.io Full-featured e-commerce platform with multi-domain and multi-language support for PHP 8. Free to use for both commercial and personal pro

null 8 Apr 5, 2022
Integrated online shop based on Laravel LTS and the Aimeos e-commerce framework

⭐ Star us on GitHub — it motivates us a lot! ?? Aimeos Laravel ecommerce platform Aimeos is THE professional, full-featured and high performance e-com

Aimeos 3k Jan 5, 2023
E-Commerce Laravel Project

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Mohamed Fadl 2 Dec 10, 2022
A e-commerce website with Laravel, Vue

A eCommerce using Laravel Version: 1.0 Release of the Laravel eCommerce. Technologies and libraries Laravel 7+, PHP 7+. JavaScript & VueJS Framework.

Jackson Zhang 1 Nov 4, 2021
A developer-friendly e-commerce foundation for your Laravel app

laravel-shopr A developer-friendly e-commerce foundation for your Laravel app. All the features you need for your webshop but without sacrificing you

Happy Pixels AB 208 Nov 2, 2022
Projeto e Desenvolvimento - TSI: E-commerce de produtos agrícolas.

AgroVen Projeto e Desenvolvimento - TSI: E-commerce de produtos agrícolas. Descrição Um sistema desenvolvido para estabelecer a venda online dos produ

Rayane Sales 3 Jul 4, 2022
My Shop E-commerce Backend API Service

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Dzulfikar Sauki Akmal 7 Dec 30, 2022
Laravel FREE E-Commerce Software

Get discount on Digital Ocean Sign-up with Digital Ocean and get $10 discount! Laravel FREE E-Commerce Software Features Provided Products Cart Checko

Jeff Simons Decena 1.7k Jan 4, 2023
GetCandy - A headless E-Commerce API built on top of Laravel.

A headless E-Commerce API built on top of Laravel. Build amazing online stores with full control over functionality and user experience using headless

GetCandy 438 Jan 4, 2023
The truly Laravel E-commerce Framework

Vanilo The Truly Laravel E-commerce Framework Vanilo's aim is that Laravel developers can rapidly create E-commerce applications with pleasure. Curren

Vanilo E-commerce 650 Dec 28, 2022
GetCandy is an open source E-commerce platform which embraces Laravel

GetCandy is an open source E-commerce platform which embraces Laravel as it's foundation and uses it to build a highly extensible, robust and feature rich application you can build any store on.

GetCandy 16 Jun 15, 2022