indico_sixpay - SIX EPayment Plugin for Indico

Documentation Available on PyPI License Repository

Installation

The plugin can be installed using standard Python package managers. To enable the plugin, it must be added to the configuration file of indico.

Note that at least indico 2.0 is required, and will be installed automatically if it is missing.

Installing the package

The indico_sixpay plugin must be installed for the python version running indico. With a standard indico installation, you must activate the indico python virtual environment first.

su - indico
source ~/.venv/bin/activate

The latest release version is available for the default python package managers. You can directly install the module using pip:

pip install indico_sixpay

This can also be used to upgrade to a newer version:

pip install indico_sixpay --upgrade

Enabling the package

All plugins must be enabled in indico’s configuration file. By default, the configuration is located in /opt/indico/etc/indico.conf.

PLUGINS = {'payment_sixpay'}

Note that if you need multiple plugins, you must all include them in the set of PLUGINS:

PLUGINS = {'payment_manual', 'payment_paypal', 'payment_sixpay'}

Plugin Configuration

The plugin must be installed for an entire Indico instance. It can be enabled and configured for the entire instance and per individual event. Both levels have the same configuration options: The global settings act as a default, and are overridden by event specific settings.

Configuration Options

SixPay Saferpay URL

The URL to contact the Six Payment Service. Use the default https://www.saferpay.com/hosting/ for any transaction. For testing, use the https://test.saferpay.com/hosting/ test service.

You should generally not change this, unless you want to test the plugin. If the official saferpay URL changes, please submit an issue ticket.

Account ID

The ID of your Saferpay account, a number containing slashes. For testing, use the ID 401860-17795278.

This ID is provided to you by Six Payment Services.

Order Description [80 characters]

The description of each order in a human readable way. This description is presented to the registrant during the transaction with SixPay.

This field is limited to 80 characters, after any placeholders are filled in. The suggested length is 50 characters. The default description uses the registrant name and event title.

Order Identifier [80 characters]

The identifier of each order for further processing. This identifier is used internally and in your own billing.

This field is stripped of whitespace and limited to 80 characters, after any placeholders are filled in. Note that auxiliary services, e.g. for billing, may limit this information to 12 characters.

Notification Mail

Mail address to receive notifications of transactions. This is independent of Indico’s own payment notifications.

Format Placeholders

The Order Description/Identifier settings allow for placeholders. These are dynamically filled in for each event and registrant.

{user_id} [231]

Numerical identifier of the user/registrant. This is unique per event, but not globally unique.

{user_name} [Jane Doe]

Full name of the user/registrant. Use <first name> <last name> format.

{user_firstname} [Jane]

First name of the user/registrant.

{user_lastname} [Doe]

Last name of the user/registrant.

{event_id} [18]

Numerical identifier of the event. This is globally unique.

{event_title} [My Conference]

Full title of the event.

{eventuser_id} [e18u231]

A globally unique identifier for both the event and user.

{registration_title} [Early Bird]

The title of the registration, as shown by Indico.

Placeholders use the Format String Syntax of Python. For example, {event_title:.6} is replaced with the first six characters of the event title.

Note that both fields taking placeholders have a maximum size. Since a template cannot be validated exactly, size validation assumes a reasonably terse input. In practice, fields may be silently shortened after formatting with long input.

Placeholder Examples

Below are some examples for use as Order Description and Order Identifier:

Format Template Example Output
Order Description
{event_title} (RegNr. {user_id}) My Conference (RegNr. 231)
{event_title}: {user_name} ({registration_title}) My Conference: Jane Doe (Early Bird)
{event_title} ({registration_title}) My Conference (Early Bird)
Order Identifier
{eventuser_id}-{user_firstname:.1}{user_lastname} e18u231-JDoe
{event_title:.7} {eventuser_id} My Conf e18u231

Changelog

v2.0.2 – 2018-05-23

  • Default SaferPay URL includes a trailing slash to form correct URLs.

v2.0.1 – 2018-03-01

  • event settings override global settings (issue #6)

v2.0.0 – 2018-02-08

  • public release for Indico 2.0

v1.2.2 – 2017-07-10

  • internal identifier for transactions is configurable
  • expanded order description placeholders

v1.2.1 – 2017-03-14

  • bugfix for duplicate transaction verification

v1.2.0 – 2017-03-13

  • public release for Indico 1.2

Implementation Overview

The plugin follows the Six Payment Services Payment Page Specification Version 5.1. It implements the Saferpay https interface (Section 4 of the Specification), but has to tie it into the Indico transaction flow.

HTTP API Plugin Component Implementation
CreatePayInit SixpayPaymentPlugin _get_transaction_parameters _get_payment_url
VerifyPayConfirm SixPayResponseHandler _verify_signature
CreatePayComplete SixPayResponseHandler _confirm_transaction

Payment Procedure

See below for an overview of the payment procedure:

UML of transaction

indico_sixpay

indico_sixpay package

Submodules

indico_sixpay.blueprint module
indico_sixpay.plugin module
indico_sixpay.request_handlers module
indico_sixpay.utility module

The indico_sixpay adds an EPayment option for the SIX Payment Services provider to the Indico event management system.

Overview

If the plugin is enabled, event participants can select the SixPay payment method during the EPayment checkout. Payment is performed via the Saferpay Payment Page, an external service provided by SIX Payment Services. The plugin handles the user interaction inside Indico, and the secure, asynchronous transaction with SIX Payment Services.

The plugin must be installed for an entire Indico instance. It can be enabled and configured for the entire instance and per individual event. Note that a valid account with SIX Payment Services is required to receive payments.

The plugin follows the Saferpay Payment Page specification version 5.1.

This plugin supports Indico 2.0. The legacy plugin for Indico 1.2 is hosted on github.

Quick Guide

To enable the plugin, it must be installed for the python version running indico.

python -m pip install indico_sixpay

Once installed, it can be enabled in the administrator and event settings. Configuration uses the same options for global defaults and event specific overrides.

Usage Notes

The plugin relies on the ISO 4217 standard for currency conversions. Since they are not properly covered by the standard, the currencies MGA and MRU cannot be used for payments.

Contributing and Feedback

The project is hosted on github. Feedback, pull requests and other contributions are always welcome. If you have issues or suggestions, check the issue tracker: Open Issues

Disclaimer

This plugin is in no way endorsed, supported or provided by SIX, Indico or any other service, provider or entity.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Indices and tables


Documentation built from indico_sixpay 2.0.2 at Dec 07, 2018.