Archive for the ‘osCommerce’ Category

OSCOM v3.0 Intelligent Checkout With Product Types

Checkout Application

The number of steps during the checkout procedure has been drastically reduced with the new Checkout Application. The checkout procedure no longer starts at the shipping page but now heads directly to the confirmation page which takes care of all dependencies for the order.

The new Checkout Application is simply accessed with:

index.php?Checkout

and works exceptionally well with the flexible Product Types implementation to gather all the information required to complete the order.

Product Types

Each product (or product variant) is assigned a Product Type group which define certain conditions that must be met when a Product Type action is called. Examples of Product Type actions are:

AddToShoppingCart Called when products are added to the shopping cart
PerformOrder Called when the Checkout Application is initialized

Each Product Type action is assigned one or more modular conditions which are checked in the specified order and return either true or false depending on the condition to meet. Failed conditions can optionally execute an onFail() function to help pass the condition. Example conditions are:

RequireBilling Passes true if a billing address and billing method is available
RequireShipping Passes true if a shipping address and shipping method is available
RequireCustomerAccount Passes true if a customer is logged in with their account
RequireStock Passes true if sufficient stock is available

Most, if not all, products would need the RequireBilling condition for the PerformOrder action. Physical products for shipping would obviously also need the RequireShipping condition, whereas digital products would not.

Want to force a customer account for orders? That’s possible with the RequireCustomerAccount condition. Should customers be logged in to add certain products to their shopping cart? No problem. Simply assign the AddToShoppingCart action and the RequireCustomerAccount condition to its Product Type group. Done.

Creating new conditions is amazingly simple with developing new modules that check on the conditions to meet.

Here is how the RequireCustomerAccount condition module is developed:

<?php
  namespace oscommerce\OM\Site\Shop\Module\ProductType;

  use oscommerce\OM\Registry;
  use oscommerce\OM\OSCOM;
  use oscommerce\OM\Site\Shop\Product;

  class RequireCustomerAccount {
    public static function isValid(Product $OSCOM_Product) {
      $OSCOM_Customer = Registry::get('Customer');

      return $OSCOM_Customer->isLoggedOn();
    }

    public static function onFail(Product $OSCOM_Product) {
      $OSCOM_NavigationHistory = Registry::get('NavigationHistory');

      $OSCOM_NavigationHistory->setSnapshot();

      osc_redirect(OSCOM::getLink(null, 'Account', 'LogIn', 'SSL'));
    }
  }
?>

Easy.

Intelligent Checkout

The Checkout Application intelligently gathers the information required to process the order. Both RequiredShipping and RequiredBilling would be common conditions to meet for the PerformOrder action, and would operate with the following workflow:

  1. If no shipping address is defined, automatically use the default customer address if one exists or present the new address form.
  2. Automatically select the cheapest shipping method available for the order.
  3. If no billing address is defined, use the shipping address.
  4. Automatically select the first payment method available for the order.
  5. Present payment method on the confirmation page (eg, credit card details).
  6. Provide links to change the shipping address, shipping method (eg, Express Shipping), billing address, and payment method on the confirmation page.
  7. Process the order once confirmed.

For a customer that is logged in, all information required for the order is already available and is directly taken to the checkout confirmation page. For guests, the minimum checkout flow is 2 steps with the shipping address form and confirmation page.

There is still plenty of room for improving the user experience as described previously with <a href="http://blogs.oscommerce.com/2009/12/16/london-public-meet-up/”>mockups of how the Checkout Application can function.

We look forward to extending this flexibility in future releases to also properly support services that are sold with recurring billing.

Community Feedback

Feedback to this blog entry can be posted on the following topic in the community support forums:

<a href="http://forums.oscommerce.com/topic/358932-oscom-v30-framework-optimized-for-php-v53/”>http://forums.oscommerce.com/topic/358932-oscom-v30-framework-optimized-for-php-v53/

OSCOM v3.0 Application Actions

What Application Actions Do

Application Actions allows functionality to be added to Applications in a flexible manner without needing to edit core source code files. Actions typically define what page content is presented in a given situation and can load nested actions for further processing of data.

Actions are loaded through the page request in the following manner:

index.php?Shop&Account&AddressBook

This initializes the Shop Site, loads the Account Application, and executes the AddressBook Action. The files executed as part of this page request are located in:

oscommerce/OM/Site/Shop/Controller.php Shop Site
oscommerce/OM/Site/Shop/Application/Account/Controller.php Account Application
oscommerce/OM/Site/Shop/Application/Account/Action/AddressBook.php AddressBook Action

Nested Actions

The AddressBook Action only presents the address book page to the customer and contains no data processing logic whatsoever. As the address book should provide functionality to create, edit, and delete address book entries, these operations are properly handled through nested Actions in the following manner:

index.php?Shop&Account&AddressBook&Create
index.php?Shop&Account&AddressBook&Create&Process
index.php?Shop&Account&AddressBook&Edit=1
index.php?Shop&Account&AddressBook&Edit=1&Process
index.php?Shop&Account&AddressBook&Delete=1
index.php?Shop&Account&AddressBook&Delete=1&Process

The files executed as part of these page requests are located in (from the Shop Site directory):

Application/Account/Action/AddressBook/Create.php
Application/Account/Action/AddressBook/Create/Process.php
Create and Process Actions
Application/Account/Action/AddressBook/Edit.php
Application/Account/Action/AddressBook/Edit/Process.php
Edit and Process Actions
Application/Account/Action/AddressBook/Delete.php
Application/Account/Action/AddressBook/Delete/Process.php
Delete and Process Actions

Security And Protection

All Actions in the page request are executed in order. This allows control logic to be defined in the main Action class and affects nested Actions as they are executed. An example is having a customer log-in check in the main Action class and not needing to perform the same check in the nested Actions.

As the dynamic nature of Actions allows great flexibility and ease in adding features and functions to a Sites Application, the order of Actions executed as defined in the page request is halted as soon as an Action does not exist or if the name of the Action is the same as the Session name.

Nested Actions also take priority over parameters in the page request that share the same name.

For example, product information pages are loaded in the following manner with the product keyword:

index.php?Shop&Products&oscommerce-tshirt

The Products Application has the following Actions which therefore cannot be used as product keywords:

  • All
  • Images
  • Reviews
  • Specials
  • TellAFriend

Community Feedback

Feedback to this blog entry can be posted on the following topic in the community support forums:

<a href="http://forums.oscommerce.com/topic/358932-oscom-v30-framework-optimized-for-php-v53/”>http://forums.oscommerce.com/topic/358932-oscom-v30-framework-optimized-for-php-v53/

OSCOM v3.0 Namespace Usage

Namespace What\Is\It?

Namespaces allow scopes to be added to classes and are used to group related classes and to prevent collision of class names. The larger the framework grows and the more components that become available and integrate with the framework, the greater the possibility that a collision of class names can occur.

Prior PHP v5.3 and namespaces, vendors worked around this problem by simulating namespaces with extra long class names. Before we introduced namespaces into our framework, long class names where used such as:

  • OSCOM_Language
  • OSCOM_Site_Admin_Application_Administrators
  • OSCOM_Site_Admin_Language

Implementing namespaces in the framework has allowed us to group classes with the following scopes:

oscommerce\OM Core classes
oscommerce\OM\Site\{Site} Site classes
oscommerce\OM\Site\{Site}\Application\{Application} Application classes

Using Namespaces

Namespaces are declared using the namespace keyword, for example:

File: oscommerce/OM/Site/Admin/Language.php

<?php
  namespace oscommerce\OM\Site\Admin;

  use oscommerce\OM\OSCOM as OSCOM;
  use oscommerce\OM\XML; // the same as "as XML"
  use oscommerce\OM\Registry; // the same as "as Registry"

  class Language extends \oscommerce\OM\Language { }
?>

The Admin Site Language class is defined within the oscommerce\OM\Site\Admin namespace and extends the Core oscommerce\OM\Language class.

Classes can be called by their class name if they reside in the same namespace scope, by their qualified name if they reside in a deeper scope (eg, Subnamespace\ClassName), and by their fully qualified name if they reside in different namespace scope entirely (eg, \Scope\ClassName).

The Admin Site Language class accesses three classes outside of its namespace scope: oscommerce\OM\OSCOM, oscommerce\OM\XML, and oscommerce\OM\Registry. These can be called using their fully qualified class names or can be aliased to shorter names using the use keyword.

It’s A Kind Of Magic

Classes are now automatically loaded without the need to use include() or require(). This is possible by utilizing the PHP 5 autoload feature.

The autoloader utilized treats the namespace scope as a directory structure. This means that using the oscommerce\OM\Site\Admin\Language class will automatically try to include oscommerce/OM/Site/Admin/Language.php if it has not already been included.

This follows the final proposal standard defined by the PHP Standards Working Group for autoloader interoperability between frameworks.

Our final framework structure will consist of two main directories: the framework itself and a public directory containing the publicly accessible files such as product images, template stylesheets, and javascript. This allows the framework directory to reside outside the public html directory to further secure the installation.

Community Feedback

Feedback to this blog entry can be posted on the following topic in the community support forums:

<a href="http://forums.oscommerce.com/topic/358932-oscom-v30-framework-optimized-for-php-v53/”>http://forums.oscommerce.com/topic/358932-oscom-v30-framework-optimized-for-php-v53/

OSCOM v3.0 Framework Optimized For PHP v5.3

PHP v5.3 and Namespaces

We’re excited to announce the framework for oscommerce Online Merchant v3.0 is being optimized to use the newer features PHP v5.3 provides, primarily focusing on implementing namespaces into the core. In addition to namespaces, the namespace coding standards defined by the PHP Standards Working Group will be supported to bring in a great level of flexibility with integrating other framework libraries such as Zend Framework v2.0 and Symfony v2.0.

Sites and Applications

Implementing namespaces into the core brings a lot of structural changes to the framework of where and how class files are located and defined, especially to the scope they now play an active role in. Each part that consists of oscommerce Online Merchant (the Shop front-end, the Administration Tool back-end, and the Installation routine) are now separated into “Sites” loaded through a core OSCOM controller (short for oscommerce Online Merchant).

Each Site defines its own classes to use and can import classes from the core (eg, Database, Session, Cache, ..) and from other Sites to use and extend existing functionality and features. This allows new parts of a website to be easily created and added to the installation to provide even more features to the sites users.

Each sections of a Site (eg, Shop Account and Checkout pages) are now separated into “Applications”, again with each Application defining its own classes to use and can import classes from other Applications and Sites to use and extend existing functionality and features.

Imagine creating and integrating CMS, Blog, Forum, Gallery, .. Sites into your installation utilizing the framework of OSCOM :-)

High level of flexibility alert: Please note that we will always be dedicated to “e-commerce” and focusing on providing a core solution for developers to extend on and for store owners to use.

The Developers Worst Nightmare is the Store Owners Peaceful Dream

The road to OSCOM v3.0 has been long, stemming back from v2.2 Milestone 3 and maturing throughout the v3.0 Alpha releases. This long journey has never been about adding new features into the core to stop at and to possibly include a kitchen sink, but a long journey of improving a procedural based codebase and striving for a perfect, high quality level, framework to use as our foundation for future releases that can also be easily extended on. We’re never going to reach “perfect”, but we’re close and the result between v3.0 and v2.2 are clearly worlds apart.

We want to pass this result to developers and want to share and see the same high level of quality being placed into the Add-Ons they make available.

This won’t be achieved with a simple text file document titled “coding_standards.txt”, but actually utilizing OOP (Object-Oriented Programming) design methods in the framework. This stems across the visibility of class methods and properties (public, protected, and private), to abstraction (subclasses, abstracts, and interfaces), to design patterns.

Not only does the framework utilize PHP v5 OOP features, but is also set to log each and every programming error encountered, from fatal errors that stop further loading of the application, to simple notice messages when undefined variables are accessed.

Our goal is to deliver OSCOM v3.0 without any errors logged at the highest possible level (E_ALL | E_STRICT), and force this requirement onto developers to provide the same results with their Add-Ons.

The PHP v5.3 Minimum Requirement

We’re aware that the PHP v5.3 minimum requirement is a high requirement to place on OSCOM v3.0. The changes involved in optimizing for PHP v5.3 are huge, and the timing is actually perfect to get those in now with v3.0 to make upgrading to future v3.0.1, v3.0.2, v3.1, v3.2, .. releases as easy as possible.

With this, we also want to help push the adoption rate of PHP v5.3 on web hosting service providers.

Please note that real PHP v5.3 optimizations are being referred to, and not simple PHP v5.3 compatibility changes.

Progress to v3.0

<a href="http://www.oscommerce.info/confluence/display/OSCOM30/” target=”_blank”

There is still a lot of work ahead of us in optimizing the framework for PHP v5.3, and there are still a lot of structural changes to make to the framework. Changes are being regularly pushed to <a href="http://github.com/haraldpdl/oscommerce” target=”_blank”>my repository on Github which will be merged to the <a href="http://github.com/oscommerce/oscommerce” target=”_blank”>main repository as soon as the changes have stabilized.

A page has been set up on our Documentation site to show the current progress of the changes made and changes still to make. This page is available here:

<a href="http://www.oscommerce.info/confluence/display/OSCOM30/” target=”_blank”>http://www.oscommerce.info/confluence/display/OSCOM30/

A proper versioning system is also being placed onto our releases – we are no longer going to publish Milestone, Release Candidate, Alpha, and Beta releases, but proper X.X.X releases, starting with v2.2 and v3.0. Yes, our next releases will be v2.2 and v3.0, followed by v3.0.1, v3.0.2, v3.1, ..

Upgrading to v3.0

Existing oscommerce Online Merchant v2.2 and v3.0 Alpha 5 store owners will be able to upgrade to v3.0. The upgrade path is actually a migration path that will copy the core database data to a new database v3.0 is installed on. The advantage of using a separate database is to not alter any of the data from the v2.2 installation, to test and to customize the v3.0 installation before making it live for public use.

The migration tool will be implemented within the new Setup Site and will be made available with the release of v3.0 or shortly afterwards depending on our schedule.

Please note that the migration tool can only import data from the standard v2.2 database schema. Any Add-Ons installed that utilize the database will need to provide their own migration tools when they release for v3.0.

Community Feedback

Feedback to this blog entry can be posted on the following topic in the community support forums:

<a href="http://forums.oscommerce.com/topic/358932-oscom-v30-framework-optimized-for-php-v53/” target=”_blank”>http://forums.oscommerce.com/topic/358932-oscom-v30-framework-optimized-for-php-v53/

We look forward to receiving your feedback!

CRE Loaded Forms and Surveys : System Overview

During my time at Chain Reaction (now known as Chain Reaction Ecommerce, Inc.), I created conceptual design for several new major system components.   One of those elements is the CRE Loaded Forms and Survey System (FSS).  Now present in the 6.3 and 6.4 cart releases,  FSS suffers from a few serious defects in usability.

The most [...]


Copyright © 2009 StrikeHawk eCommerce Inc. All rights reserved.
This feed is for personal, non-commercial use only. The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright.
(Digital Fingerprint:  1dc339979e7e0ec7d869ea55bbeb9f90

London Public Meet-Up

I registered on the English and German oscommerce forums back in February 2003 when I first got in contact with the project. I posted and answered questions and made some contributions to existing add-ons. Two years ago in December 2007, Harald asked me if I’d like to become an official team member which I gladly accepted. Since then I’ve been helping with the German and English documentation, the German language pack for oscommerce 3.0, as well as some small bug fixes here and there. Currently, I’m working on a wireframe for the front end layout of version 3.0.

During the last 2 years as a team member I participated in various discussions on Skype and on the internal mailing list, but I never met any of the other team members in person. This changed in December 2009 when after a long break of official meetings, the first oscommerce public meet-up took place in London on 11th.

In the early afternoon I met with Harald, Mark, Jan and Matthijs from the team before the official event and enjoyed various interesting talks about each person’s professional career and long experience in e-commerce as well as their participation in the project.

Later on we all went from Paddington to Oxford Circus to the official event by tube where I had a chance to talk to community members such as Gary Burton and Mark Samios, as well as Bruno Lévêque and Igor Schlumberger, the co-founders of another open source e-commerce project called Prestashop).

I had come to London together with my wife and therefore already left the meet-up around 8pm to spend the rest of the evening with my wife. We also took the chance to do some shopping and sight seeing the day before the meet-up. It was a great short trip and I really enjoyed the event!

I’m looking forward to meeting more community members at next spring’s 10 year oscommerce birthday celebration which will shortly be announced on our blogs and on Facebook. Stay tuned!

London Public Meet-Up

We had a fantastic meet-up in London last Friday – I’d like to thank everyone again for the great evening. It was great meeting with team members again and meeting community members around London for the first time!

I arrived in London on Wednesday and had a hotel in Paddington. The hotels here serve their purpose and Paddington is great for travelling to and from London Heathrow and for getting around Central London with the underground. I learned the hard way from my previous visit not to blindly trust hotel/restaurant public wifi networks (those two “AwEsOmE” messages from Twitter were not from me :-) ) so this time my network traffic went through a secure OpenVPN connection.

I met with <a href="http://forums.oscommerce.com/user/5-mark-evans/” target=”_blank”>Mark Evans at his work office in Waterloo and spent the day catching up. I also showed him what I had been working on with visual changes to the Administration Tool, jQuery interactions, and the new Product Types feature. The new Product Types feature allows the checkout procedure to be streamlined and we came up with some interesting ideas to pursue.

We met again on Thursday in Paddington and spent the day coding. Mark worked on some bug fixes and I did some more work on the Product Types implementation. We used Mockingbird to come up with the following concepts on how the checkout procedure can be optimized:

<a href="http://blogs.oscommerce.com/wp-content/uploads/2009/12/osc3_cart.gif”>Shopping Cart

Shopping Cart

<a href="http://blogs.oscommerce.com/wp-content/uploads/2009/12/osc3_checkout_1.gif”>Checkout Confirmation 1

Checkout Confirmation 1

<a href="http://blogs.oscommerce.com/wp-content/uploads/2009/12/osc3_checkout_2.gif”>Checkout Confirmation 2

Checkout Confirmation 2

The idea is to store all calculated shipping rates for the shopping cart (currently only the cheapest or selected rate is stored) and to select a payment method by default (this would be the first payment method in sort order). This would be displayed on the checkout confirmation page with changes occurring through javascript or page reloads if javascript is disabled.

Interesting concepts! I’ll be publishing more information on the new Product Types feature this week when the changes are committed to Github.

On Friday we met for Lunch in Paddington. <a href="http://forums.oscommerce.com/user/125-mattice/” target=”_blank”>Matthijs van der Vegte and Yolande arrived first. I came and shortly afterwards Mark, <a href="http://forums.oscommerce.com/user/5412-nick-weisser/” target=”_blank”>Nick Weisser, and <a href="http://forums.oscommerce.com/user/39592-jan-zonjee/” target=”_blank”>Jan Zonjee arrived. It was great catching up and meeting Nick for the first time. Getting closer to 5pm we then made our way to Oxford Circus and to the Match Bar where the public meet-up was organized.

One of the first there was <a href="http://forums.oscommerce.com/user/69-burt/” target=”_blank”>Gary Burton (burt) who has been involved in the community since the early days. I didn’t actually get an opportunity to speak to him until the end of the event. There’s just not enough time to be able to talk to everyone – one reason for choosing the Match Bar was due to their open seating arrangements which can get everyone involved in a discussion, unfortunately the high volume the music was playing at kept this down to one-on-one discussions.

It was also great to have Bruno Lévêque and Igor Schlumberger attend (the co-founders of Prestashop in France). We discussed how they operate and how Open Source Licenses are used with the work we do. We’ll be looking at organizing a public meet-up with them in France next year which will be of definite interest to both communities!

I enjoyed talking to <a href="http://forums.oscommerce.com/user/69205-enigma1/” target=”_blank”>Mark Samios (enigma1), Vadym Gurevych (Holbi), <a href="http://forums.oscommerce.com/user/93669-scchristie/” target=”_blank”>Stewart Christie (scchristie), and all who were there.

John Salter from Yubico also attended and managed to have a quick talk to him as he was leaving. He brought some Yubikeys to hand out – the remaining Yubikeys will be handed out to community members with a competition that will run once the add-on has been certified.

It was a successful meet-up, and was a great start of organizing more for next year.

At the end of the meet-up, going back to our hotels, I enjoyed one last drink with Jan and we talked about the Product Types implementation. He mentioned it would be a great way to support products needing a minimum quantity order, which the implementation is perfectly suited for. This brings total flexibility into the checkout procedure and am excited about the possibilities the community will provide through add-ons.

I flew back to Düsseldorf Airport on Saturday after visiting the German Christmas Market at Hyde Park and doing some shopping at Oxford Circus (I really love Hamley’s :-) ).

Nick made some photos of the meet-up so keep an eye out for those!

osCommerce Successfully Defends Its Trademark

We have successfully defended our Trademark and Copyright against eCommerce Ventures Ltd who blatantly registered “oscommerce” as a trademark in the United Kingdom and tried to “pass off” as being oscommerce.

With owning the trademark registration, the firm, comprised of members that were active and are known to many on our community support forums, contacted a number of our former team members, Corporate Sponsors, and community members and gave a deadline of 4 days to respond to handing over domains, ceasing any business relationships with us, and to replace links pointing to our website with theirs.

With the help of the Free Software Foundation Europe / Freedom Task Force of seeking legal aid in the United Kingdom, we appointed Beck Greener as our legal counsel and started legal proceedings against the firm.

As this not only affected our community of store owners and developers but also how Open Source projects and solutions operate, we decided to be <a href="http://blogs.oscommerce.com/2009/08/19/the-registration-of-the-oscommerce-trademark-in-the-uk/” target=”_blank”>open on this issue and to keep the community informed of <a href="http://forums.oscommerce.com/topic/343573-oscommerce-vs-ecommerce-ventures-ltd/” target=”_blank”>every step we were taking.

Before our legal counsel could send the first letter, the firm had informally sent us a proposal to quickly resolve the issue of agreeing to let them continue owning the trademark registration and assured its use for SEO purposes only.

As we could obviously not agree to those terms, our legal counsel formerly replied with our demands that were successfully used as a base to later settle out of court.

This included ceasing usage of the oscommerce name, ceasing further distribution of their software and add-ons infringing on our copyright, and to surrender the trademark they had registered.

The support given by the community during this course was truly amazing. We’d like to thank everyone here and in international communities for their support and are immensely proud to have such a caring community! Thank you for being part of it!

osCommerce Public Meet-Up In London (11th December 2009)

<img src="http://cresupport.co.uk/wp-content/plugins/wp-o-matic/cache/cb9d3_logo_uk-300×85.png" alt="oscommerce London Public Meeting 2009″ title=”oscommerce London Public Meeting 2009″ width=”300″ height=”85″ class=”alignright size-medium wp-image-427″ />We’re kickstarting our public meetings again with a meet-up in London on Friday 11th December 2009 at the Match Bar West End (Oxford Circus) from 5pm onwards. This will be a casual no-presentation meet-up to meet, mingle, and have a few drinks with store owners, developers, and enthusiasts part of our community located in and around London.

Attending oscommerce team members and associates include:

Harald Ponce de Leon
Nick Weisser
Mark Evans
Matthijs van der Vegte

If you would like to meet us and other community members in person, please confirm your attendance at our Facebook page event here:

http://www.facebook.com/event.php?eid=166087012682

Please note that this bar requires a minimum age of 18 to enter. Some shared selections will be available to snack on. Those attending will need to pay for their own drink and additional food orders.

Date and Time:

Friday 11th December 2009 from 5pm onwards

Location:

Match Bar West End
37-38 Margaret Street
London W1G 0JF
Nearest Tube: Oxford Circus
Website: http://www.matchbar.com/match_bar_westend.php

We look forward to meeting you!

New Certified Sage Pay Payment Modules for osCommerce Online Merchant v2.2

Sage Pay and oscommerce have partnered to release certified versions of the Sage Pay Form, Server and Direct payment modules to the oscommerce community. This partnership enables merchants to securely process card transactions with the UK’s largest indepenent payment service provider whilst utilising Sage Pay’s latest protocol and product offerings.

The Sage Pay Server module has been updated to include the recently released iframe capability which offer merchants a seamless checkout flow without the customer perception of being redirected away to a hosted payment page. This solution also minimises PCI compliance requirements as no card data is ever stored, processed or transmitted from the merchant’s website.

The certified modules will be included as standard modules in the oscommerce Online Merchant v2.2 release and are available now as add-ons for existing store owners from v2.2 Milestone 2 onwards.

The certified modules are available for free at the oscommerce Add-Ons site:

<a href="http://addons.oscommerce.com/service/sage_pay”>http://addons.oscommerce.com/service/sage_pay

To compliment the release of the new modules, Sage Pay are offering all oscommerce merchants an introductory 3 months free gateway fees for new Sage Pay sign ups, designed to save oscommerce users money on their transaction processing costs.

OFFER: 3 months free unlimited Sage Pay processing when you sign up to Sage Pay – Saving a minimum of £60! Promotion code “osc223″ Apply here!