diff options
author | Florian Dold <florian.dold@gmail.com> | 2019-08-29 13:36:07 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2019-08-29 13:36:07 +0200 |
commit | cb8472b5b0750c2e6ff22b8e111c220fa189ba4d (patch) | |
tree | 987865f8842e4fae2c4ee6eb80f41362c5d5a99d /doc/manual.texi | |
parent | 6a6b6a05c71ef7877e7a1c5e3f13a4438a107bdd (diff) | |
download | merchant-cb8472b5b0750c2e6ff22b8e111c220fa189ba4d.tar.gz merchant-cb8472b5b0750c2e6ff22b8e111c220fa189ba4d.tar.bz2 merchant-cb8472b5b0750c2e6ff22b8e111c220fa189ba4d.zip |
move documentation to docs repo
Diffstat (limited to 'doc/manual.texi')
-rw-r--r-- | doc/manual.texi | 1296 |
1 files changed, 0 insertions, 1296 deletions
diff --git a/doc/manual.texi b/doc/manual.texi deleted file mode 100644 index b37ad613..00000000 --- a/doc/manual.texi +++ /dev/null @@ -1,1296 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@c Too generic, should be renamed to avoid system conflicts. -@c probably: manual.info -> taler-merchant.info -@setfilename manual.info -@include version-manual.texi -@settitle The GNU Taler merchant backend operator tutorial @value{VERSION} - -@include syntax.texi - -@c Define a new index for options. -@defcodeindex op -@c Combine everything into one index (arbitrarily chosen to be the -@c concept index). -@syncodeindex op cp -@c %**end of header - -@copying -This manual is for the GNU Taler merchant backend (version @value{VERSION}, @value{UPDATED}), - -Copyright @copyright{} 2016, 2017, 2019 Taler Systems SA - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.3 or -any later version published by the Free Software Foundation; with no -Invariant Sections, with no Front-Cover Texts, and with no Back-Cover -Texts. A copy of the license is included in the section entitled -``GNU Free Documentation License''. -@end quotation -@end copying -@c If your manual is published on paper by the FSF, it should include -@c The standard FSF Front-Cover and Back-Cover Texts, as given in -@c maintain.texi. -@c -@c Titlepage -@c -@titlepage -@title The GNU Taler merchant backend operator tutorial -@subtitle Version @value{VERSION} -@subtitle @value{UPDATED} -@author Marcello Stanisci (@email{marcello.stanisci@@inria.fr}) -@author Christian Grothoff (@email{christian.grothoff@@inria.fr}) -@page -@vskip 0pt plus 1filll -@insertcopying -@end titlepage - -@summarycontents -@contents - -@ifnottex -@node Top -@top The GNU Taler manual for Web shops -@insertcopying -@end ifnottex - -@menu -* Introduction:: Whom this manual is addressed to -* Installation:: Installing the Merchant backend -* Configuration:: How to set up the Merchant backend -* Testing:: How to test the installed Merchant backend -* Advanced topics:: Detailed solutions to specific issues - - -Appendices - -* GNU-LGPL:: The GNU Lesser General Public License says how you - can use the code of libtalermerchant.so in your own projects. -* GNU Affero GPL:: The Affero GNU General Public License says how you - can copy and share the Taler merchant backend. -* GNU-FDL:: The GNU Free Documentation License says how you - can copy and share the documentation of GNU Taler. - -Indices - -* Concept Index:: Index of concepts and programs. - -@detailmenu - --- The Detailed Node Listing --- - -Introduction - -* About GNU Taler:: -* About this manual:: -* Architecture overview:: - -Installation - -* Installing Taler using Docker:: -* Generic instructions:: -* Installing Taler on Debian GNU/Linux:: - -Configuration - -* Backend options:: -* Sample backend configuration:: -* Launching the backend:: - -Testing - -Advanced topics - -* Configuration format:: -* Using taler-config:: -* Merchant key management:: -* SEPA configuration:: -* Tipping visitors:: -* Generate payments:: - -@end detailmenu -@end menu - - -@node Introduction -@chapter Introduction - -@menu -* About GNU Taler:: -* About this manual:: -* Architecture overview:: -@end menu - -@node About GNU Taler -@section About GNU Taler - -GNU Taler is an open protocol for an electronic payment system with a -free software reference implementation. GNU Taler offers secure, fast -and easy payment processing using well understood cryptographic -techniques. GNU Taler allows customers to remain anonymous, while -ensuring that merchants can be held accountable by governments. -Hence, GNU Taler is compatible with anti-money-laundering (AML) and -know-your-customer (KYC) regulation, as well as data protection -regulation (such as GDPR). - -GNU Taler is not yet production-ready, after following this manual -you will have a backend that can process payments in ``KUDOS'', but -not regular currencies. This is not so much because of limitations -in the backend, but because we are not aware of a Taler exchange -operator offering regular currencies today. - -@node About this manual -@section About this manual - -This tutorial targets system administrators who want to -install a GNU Taler merchant @emph{backend}. - -We expect some moderate familiarity with the compilation and installation -of free software packages. An understanding of cryptography -is not required. - -This first chapter of the tutorial will give a brief overview of -the overall Taler architecture, describing the environment in which -the Taler backend operates. -The second chapter then explains how to install the software, -including key dependencies. The third chapter will explain how to -configure the backend, including in particular the configuration of the -bank account details of the merchant. - -@c The fouth chapter will explain how to test that the setup worked correctly. - -The last chapter gives some additional information about advanced topics -which will be useful for system administrators but are not necessary for -operating a basic backend. - -@node Architecture overview -@section Architecture overview - -@cindex crypto-currency -@cindex KUDOS -Taler is a pure payment system, not a new crypto-currency. As such, it -operates in a traditional banking context. In particular, this means -that in order to receive funds via Taler, the merchant must have a -regular bank account, and payments can be executed in ordinary -currencies such as USD or EUR. For testing purposes, Taler uses a -special currency ``KUDOS'' and includes its own special bank. - -The Taler software stack for a merchant consists of four main components: - -@itemize -@cindex frontend -@item A frontend which interacts with the customer's browser. The - frontend enables the customer to build a shopping cart and place - an order. Upon payment, it triggers the respective business logic - to satisfy the order. This component is not included with Taler, - but rather assumed to exist at the merchant. This manual - describes how to integrate Taler with Web shop frontends. -@cindex back office -@item A back office application that enables the shop operators to - view customer orders, match them to financial transfers, and possibly - approve refunds if an order cannot be satisfied. This component is - again not included with Taler, but rather assumed to exist at the - merchant. This manual will describe how to integrate such a component - to handle payments managed by Taler. -@cindex backend -@item A Taler-specific payment backend which makes it easy for the - frontend to process financial transactions with Taler. The - next two chapters will describe how to install and configure - this backend. -@cindex DBMS -@cindex Postgres -@item A DBMS which stores the transaction history for the Taler backend. - For now, the GNU Taler reference implemenation only supports Postgres, - but the code could be easily extended to support another DBMS. -@end itemize - -The following image illustrates the various interactions of these -key components: - -@center @image{arch, 3in} - -@cindex RESTful -Basically, the backend provides the cryptographic protocol support, -stores Taler-specific financial information in a DBMS and communicates -with the GNU Taler exchange over the Internet. The frontend accesses -the backend via a RESTful API. As a result, the frontend never has to -directly communicate with the exchange, and also does not deal with -sensitive data. In particular, the merchant's signing keys and bank -account information is encapsulated within the Taler backend. - - -@node Installation -@chapter Installation - -@menu -* Installing Taler using Docker:: -* Generic instructions:: -* Installing Taler on Debian GNU/Linux:: -@c * Installing Taler with GNU Guix:: Installing Taler with GNU Guix -@c * Installing Taler on Arch Linux:: Installing Taler on Arch Linux -@c * Installing Taler on Windows:: Installing Taler on Windows -@c * Installing Taler on OS X:: Installing Taler on OS X -@end menu - -This chapter describes how to install the GNU Taler merchant backend. - -@node Installing Taler using Docker -@section Installing Taler using Docker - -This section provides instructions for the merchant backend -installation using `Docker`. - -For security reasons, we run Docker against a VirtualBox instance, -so the @code{docker} command should connect to a @code{docker-machine} -instance that uses the VirtualBox driver. - -Therefore, the needed tools are: ``docker``, ``docker-machine``, and -``docker-compose``. Please refer to Docker's official -@footnote{https://docs.docker.com/}documentation in order -to get those components installed, as that is not in this manual's scope. - -Before starting to build the merchant's image, make sure a -``docker-machine`` instance is up and running. - -Because all of the Docker source file are kept in our ``deployment`` -repository, we start by checking out the -@code{git://taler.net/deployment} codebase: - -@smallexample -$ git clone git://taler.net/deployment -@end smallexample - -Now we actually build the merchant's image. From the same -directory as above: - -@smallexample -$ cd deployment/docker/merchant/ -$ docker-compose build -@end smallexample - -If everything worked as expected, the merchant is ready to be -launched. From the same directory as the previous step: - -@smallexample -# Recall: the docker-machine should be up and running. -$ docker-compose up -@end smallexample - -You should see some live logging from all the involved containers. -At this stage of development, you should also ignore some (harmless) -error message from postresql about already existing roles and databases. - -To test if everything worked as expected, it suffices to issue a -simple request to the merchant, as: - -@smallexample -$ curl http://$(docker-machine ip)/ -# A greeting message should be returned by the merchant. -@end smallexample - - -@node Generic instructions -@section Generic instructions - -This section provides generic instructions for the merchant backend -installation independent of any particular operating system. -Operating system specific instructions are provided in the following -sections. You should follow the operating system specific -instructions if those are available, and only consult the generic -instructions if no system-specific instructions are provided for your -specific operating system. - -@menu -* Installation of dependencies:: -* Installing libgnunetutil:: -* Installing the GNU Taler exchange:: -* Installing the GNU Taler merchant backend:: -@end menu - -@node Installation of dependencies -@subsection Installation of dependencies - -The following packages need to be installed before we can compile the -backend: - -@itemize -@item autoconf >= 2.69 -@item automake >= 1.14 -@item libtool >= 2.4 -@item autopoint >= 0.19 -@item libltdl >= 2.4 -@item libunistring >= 0.9.3 -@item libcurl >= 7.26 (or libgnurl >= 7.26) -@item GNU libmicrohttpd >= 0.9.39 -@item GNU libgcrypt >= 1.6 -@item libjansson >= 2.7 -@item Postgres >= 9.4, including libpq -@item libgnunetutil (from Git) -@item GNU Taler exchange (from Git) -@end itemize - -Except for the last two, these are available in most GNU/Linux -distributions and should just be installed using the respective -package manager. - -The following sections will provide detailed instructions for -installing the libgnunetutil and GNU Taler exchange dependencies. - -@node Installing libgnunetutil -@subsection Installing libgnunetutil - -@cindex GNUnet -Before you install libgnunetutil, you must download and install the -dependencies mentioned in the previous section, otherwise the build -may succeed but fail to export some of the tooling required by Taler. - -To download and install libgnunetutil, proceed as follows: - -@example -$ git clone https://gnunet.org/git/gnunet/ -$ cd gnunet/ -$ ./bootstrap -$ ./configure [--prefix=GNUNETPFX] -$ # Each dependency can be fetched from non standard locations via -$ # the '--with-<LIBNAME>' option. See './configure --help'. -$ make -# make install -@end example - -If you did not specify a prefix, GNUnet will install to -@code{/usr/local}, which requires you to run the last step as -@code{root}. - -@node Installing the GNU Taler exchange -@subsection Installing the GNU Taler exchange - -@cindex exchange -After installing GNUnet, you can download and install -the exchange as follows: - -@example -$ git clone git://taler.net/exchange -$ cd exchange -$ ./bootstrap -$ ./configure [--prefix=EXCHANGEPFX] \ - [--with-gnunet=GNUNETPFX] -$ # Each dependency can be fetched from non standard locations via -$ # the '--with-<LIBNAME>' option. See './configure --help'. -$ make -# make install -@end example - -If you did not specify a prefix, the exchange will install to -@code{/usr/local}, which requires you to run the last step as -@code{root}. Note that you have to specify -@code{--with-gnunet=/usr/local} if you installed GNUnet to -@code{/usr/local} in the previous step. - -@node Installing the GNU Taler merchant backend -@subsection Installing the GNU Taler merchant backend - -@cindex backend -The following steps assume all dependencies are installed. - -Use the following commands to download and install the -merchant backend: - -@example -$ git clone git://taler.net/merchant -$ cd merchant -$ ./bootstrap -$ ./configure [--prefix=PFX] \ - [--with-gnunet=GNUNETPFX] \ - [--with-exchange=EXCHANGEPFX] -$ # Each dependency can be fetched from non standard locations via -$ # the '--with-<LIBNAME>' option. See './configure --help'. -$ make -$ make install -@end example - -Note that you have to specify @code{--with-exchange=/usr/local} and/or -@code{--with-exchange=/usr/local} if you installed the exchange and/or -GNUnet to @code{/usr/local} in the previous steps. - -@c @node Installing Taler with GNU Guix -@c @section Installing Taler with GNU Guix - -@c This section has not yet been written. - - - - -@node Installing Taler on Debian GNU/Linux -@section Installing Taler on Debian GNU/Linux - -@cindex Wheezy -@cindex Debian -Debian wheezy is too old and lacks most of the packages required. - -On Debian jessie, only GNU libmicrohttpd needs to be compiled from -source. To install dependencies on Debian jesse, run the following -commands: - -@example -# apt-get install \ - autoconf \ - automake \ - autopoint \ - libtool \ - libltdl-dev \ - libunistring-dev \ - libcurl4-gnutls-dev \ - libgcrypt20-dev \ - libjansson-dev \ - libpq-dev \ - postgresql-9.4 -# wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-latest.tar.gz -# wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-latest.tar.gz.sig -# gpg -v libmicrohttpd-latest.tar.gz # Should show signed by 939E6BE1E29FC3CC -# tar xf libmicrohttpd-latest.tar.gz -# cd libmicrohttpd-0* -# ./configure -# make install -@end example - -For more recent versions of Debian, you should instead run: - -@example -# apt-get install \ - autoconf \ - automake \ - autopoint \ - libtool \ - libltdl-dev \ - libunistring-dev \ - libcurl4-gnutls-dev \ - libgcrypt20-dev \ - libjansson-dev \ - libpq-dev \ - postgresql-9.5 \ - libmicrohttpd-dev -@end example - -For the rest of the installation, follow the -generic installation instructions starting with the installation of -libgnunetutil. Note that if you used the Debian wheezy instructions -above, you need to pass -@code{--with-microhttpd=/usr/local/} to all @code{configure} invocations. - - - -@c @node Installing Taler on Arch Linux -@c @section Installing Taler on Arch Linux - -@c This section has not yet been written. - - -@c @node Installing Taler on Windows -@c @section Installing Taler on Windows - -@c This section has not yet been written. - - -@c @node Installing Taler on OS X -@c @section Installing Taler on OS X - -@c This section has not yet been written. - - -@node Configuration -@chapter How to configure the merchant's backend - -@cindex taler-config -@cindex taler.conf -The installation already provides reasonable defaults for most of the -configuration options. However, some must be provided, in particular -the database account and bank account that the backend should use. By -default, the file @code{$HOME/.config/taler.conf} is where the Web -shop administrator specifies configuration values that augment or -override the defaults. The format of the configuration file is -the well-known INI file format. You can edit the file by hand, or -use the @code{taler-config} commands given as examples. -For more information on @code{taler-config}, @pxref{Using taler-config}. - -@menu -* Backend options:: -* Sample backend configuration:: -* Launching the backend:: -@end menu - -@node Backend options -@section Backend options - -The following table describes the options that commonly need to -be modified. -Here, the notation @code{[$section]/$option} denotes the option -@code{$option} under the section @code{[$section]} in the -configuration file. - - -@table @asis - -@item Service address -The following option sets the transport layer address used by the merchant backend: - -@cindex UNIX domain socket -@cindex TCP -@example -[MERCHANT]/SERVE = TCP | UNIX -@end example - -If given, -@itemize -@item @code{TCP}, then we need to set the TCP port in @code{[MERCHANT]/PORT} -@item @code{UNIX}, then we need to set the unix domain socket path and mode in -@code{[MERCHANT]/UNIXPATH} and @code{[MERCHANT]/UNIXPATH_MODE}. The latter takes -the usual permission mask given as a number, e.g. 660 for user/group read-write access. -@end itemize - -The frontend can then connect to the backend over HTTP using the specified address. -If frontend and backend run within the same operating system, the use of -a UNIX domain socket is recommended to avoid accidentally exposing the backend -to the network. - -@c FIXME: we should offer an option to bind the TCP socket to a particular IP address (#4752) - -@cindex port -To run the Taler backend on TCP port 8888, use: -@example -$ taler-config -s MERCHANT -o SERVE -V TCP -$ taler-config -s MERCHANT -o PORT -V 8888 -@end example - - -@item Currency -Which currency the Web shop deals in, i.e. ``EUR'' or ``USD'', is specified using the option - -@cindex currency -@cindex KUDOS -@example -[TALER]/CURRENCY -@end example - -For testing purposes, the currency MUST match ``KUDOS'' so that tests will work -with the Taler demonstration exchange at @url{https://exchange.demo.taler.net/}: - -@example -$ taler-config -s TALER -o CURRENCY -V KUDOS -@end example - - -@item Database -@cindex DBMS -In principle is possible for the backend to support different DBMSs. -The option - -@example -[MERCHANT]/DB -@end example - -specifies which DBMS is to be used. However, currently only the value "postgres" is supported. This is also -the default. - -In addition to selecting the DBMS software, the backend requires DBMS-specific options to access the database. - -For postgres, you need to provide: - -@example -[merchantdb-postgres]/config -@end example -@cindex Postgres - -This option specifies a postgres access path using the format -@code{postgres:///$DBNAME}, where @code{$DBNAME} is the name of the Postgres -database you want to use. Suppose @code{$USER} is the name of the -user who will run the backend process. Then, you need to first run - -@example -$ sudu -u postgres createuser -d $USER -@end example - -as the Postgres database administrator (usually @code{postgres}) to -grant @code{$USER} the ability to create new databases. Next, you -should as @code{$USER} run: - -@example -$ createdb $DBNAME -@end example - -to create the backend's database. Here, @code{$DBNAME} must match the database name -given in the configuration file. - -To configure the Taler backend to use this database, run: -@example -$ taler-config -s MERCHANTDB-postgres -o CONFIG \ - -V postgres:///$DBNAME -@end example - - -@item Exchange -@cindex exchange -To add an exchange to the list of trusted payment service providers, -you create a section with a name that starts with ``exchange-''. -In that section, the following options need to be configured: - -@itemize - -@item -The ``url'' option specifies the exchange's base URL. For example, -to use the Taler demonstrator use: - -@example -$ taler-config -s EXCHANGE-demo -o URL \ - -V https://exchange.demo.taler.net/ -@end example - -@item -@cindex master key -The ``master_key'' option specifies the exchange's master public key in base32 encoding. -For the Taler demonstrator, use: - -@example -$ taler-config -s EXCHANGE-demo -o master_key \ - -V CQQZ9DY3MZ1ARMN5K1VKDETS04Y2QCKMMCFHZSWJWWVN82BTTH00 -@end example - -Note that multiple exchanges can be added to the system by using different -tokens in place of @code{demo} in the example above. Note that all -of the exchanges must use the same currency. If you need to support -multiple currencies, you need to configure a backend per currency. - -@end itemize - -@c FIXME: In the future, we need to describe specifying auditors here. -@c @item Auditors - - -@item Instances -@cindex instance -The backend allows the user to run multiple instances of shops with -distinct business entities against a single backend. Each instance -uses its own bank accounts and key for signing contracts. It is -mandatory to configure a "default" instance. - -@itemize - -@item -The ``KEYFILE'' option specifies the file containing the instance's -private signing key. For example, use: - -@example -$ taler-config -s INSTANCE-default -o KEYFILE \ - -V '$@{TALER_CONFIG_HOME@}/merchant/instace/default.key' -@end example - -@item -The ``NAME'' option specifies a human-readable name for the instance. -For example, use: - -@example -$ taler-config -s INSTANCE-default -o NAME \ - -V 'Kudos Inc.' -@end example - - -@item -The optional ``TIP_EXCHANGE'' and ``TIP_EXCHANGE_PRIV_FILENAME'' -options are discussed in @cite{Tipping visitors} -@end itemize - - - -@item Accounts -@cindex wire format -In order to receive payments, the merchant backend needs to communicate bank -account details to the exchange. For this, the configuration must -include one or more sections named ``ACCOUNT-name'' where @code{name} can be -replaced by some human-readable word identifying the account. For -each section, the following options should be provided: - - -@itemize -@item -The ``URL'' option specifies a @code{payto://}-URL for the account of -the merchant. For example, use: - -@example -$ taler-config -s ACCOUNT-bank -o NAME \ - -V 'payto://x-taler-bank/bank.demo.taler.net/4' -@end example - -@item -The ``WIRE_RESPONSE'' option specifies where Taler should store the -(salted) JSON encoding of the wire account. The file given will be -created if it does not exist. For example, use: - -@example -$ taler-config -s ACCOUNT-bank -o WIRE_RESPONSE \ - -V '@{$TALER_CONFIG_HOME@}/merchant/bank.json' -@end example - - -@item -The ``PLUGIN'' option specifies which wire plugin should be used for -this account. The plugin must support the wire method used by the -URL. For example, use: - -@example -$ taler-config -s ACCOUNT-bank -o PLUGIN \ - -V taler_bank -@end example - -@item -For each @code{instance} that should use this account, you should set -@code{HONOR_instance} and @code{ACTIVE_instance} to YES. The first -option will cause the instance to accept payments to the account (for -existing contracts), while the second will cause the backend to -include the account as a possible option for new contracts. - -For example, use: - -@example -$ taler-config -s ACCOUNT-bank -o HONOR_default \ - -V YES -$ taler-config -s ACCOUNT-bank -o ACTIVE_default \ - -V YES -@end example - -to use ``account-bank'' for the ``default'' instance. - -@end itemize - -Depending on which PLUGIN you configured, you may additionally specfiy -authentication options to enable the plugin to use the account. - -For example, with @code{taler_bank} plugin, use: - -@example -$ taler-config -s ACCOUNT-bank -o TALER_BANK_AUTH_METHOD \ - -V basic -$ taler-config -s ACCOUNT-bank -o USERNAME \ - -V user42 -$ taler-config -s ACCOUNT-bank -o PASSWORD \ - -V pass42 -@end example - - - -@c Document EBICS here once supported. - -Note that additional instances can be specified using different tokens -in the section name instead of @code{default}. - -@end table - -@node Sample backend configuration -@section Sample backend configuration - -@cindex configuration -The following is an example for a complete backend configuration: - -@smallexample -[TALER] -CURRENCY = KUDOS - -[MERCHANT] -SERVE = TCP -PORT = 8888 -DATABASE = postgres - -[MERCHANTDB-postgres] -CONFIG = postgres:///donations - -[INSTANCE-default] -KEYFILE = $DATADIR/key.priv -NAME = "Kudos Inc." - -[ACCOUNT-bank] -URL = payto://x-taler-bank/bank.demo.taler.net/4 -WIRE_RESPONSE = $DATADIR/bank.json -PLUGIN = taler_bank -HONOR_default = YES -ACTIVE_default = YES -TALER_BANK_AUTH_METHOD = basic -USERNAME = my_user -PASSWORD = 1234pass - -[EXCHANGE-trusted] -URL = https://exchange.demo.taler.net/ -MASTER_KEY = CQQZ9DY3MZ1ARMN5K1VKDETS04Y2QCKMMCFHZSWJWWVN82BTTH00 -CURRENCY = KUDOS - -@end smallexample - - -Given the above configuration, the backend will use a database named -@code{donations} within Postgres. - -The backend will deposit the coins it receives to the exchange at -@url{https://exchange.demo.taler.net/}, which has the master key @* -"CQQZ9DY3MZ1ARMN5K1VKDETS04Y2QCKMMCFHZSWJWWVN82BTTH00". - -Please note that @code{doc/config.sh} will walk you through all -configuration steps, showing how to invoke @code{taler-config} -for each of them. - -@node Launching the backend -@section Launching the backend - -@cindex backend -@cindex taler-merchant-httpd -Assuming you have configured everything correctly, you can launch the -merchant backend using: - -@example -$ taler-merchant-httpd -@end example - -When launched for the first time, this command will print a message -about generating your private key. If everything worked as expected, -the command - -@example -$ curl http://localhost:8888/ -@end example - -should return the message - -@smallexample -Hello, I'm a merchant's Taler backend. This HTTP server is not for humans. -@end smallexample - -Please note that your backend is right now likely globally -reachable. Production systems should be configured to bind -to a UNIX domain socket or properly restrict access to the -port. - - -@node Testing -@chapter Testing - -The tool @code{taler-merchant-generate-payments} can be used to test -the merchant backend installation. It implements all the payment's steps -in a programmatically way, relying on the backend you give it as input. -Note that this tool gets installed along all the -merchant backend's binaries. - -This tool gets configured by a config file, that must have the following -layout: - -@example -[PAYMENTS-GENERATOR] - -# The exchange used during the test: make sure the merchant backend -# being tested accpets this exchange. -# If the sysadmin wants, she can also install a local exchange -# and test against it. -EXCHANGE = https://exchange.demo.taler.net/ - -# This value must indicate some URL where the backend -# to be tested is listening; it doesn't have to be the -# "official" one, though. -MERCHANT = http://localbackend/ - -# This value is used when the tool tries to withdraw coins, -# and must match the bank used by the exchange. If the test is -# done against the exchange at https://exchange.demo.taler.net/, -# then this value can be "https://bank.demo.taler.net/". -BANK = https://bank.demo.taler.net/ - -# The merchant instance in charge of serving the payment. -# Make sure this instance has a bank account at the same bank -# indicated by the 'bank' option above. -INSTANCE = default - -# The currency used during the test. Must match the one used -# by merchant backend and exchange. -CURRENCY = KUDOS -@end example -@c FIXME: the last option should be removed and [taler]/CURRENCY used instead! - -Run the test in the following way: - -@example -$ taler-merchant-generate-payments [-c config] [-e EURL] [-m MURL] -@end example - -The argument @code{config} given to @code{-c} points to the configuration -file and is optional -- @code{~/.config/taler.conf} will be checked by -default. -By default, the tool forks two processes: one for the merchant backend, -and one for the exchange. -The option @code{-e} (@code{-m}) avoids any exchange (merchant backend) -fork, and just runs the generator against the exchange (merchant backend) -running at @code{EURL} (@code{MURL}). - -Please NOTE that the generator contains @emph{hardcoded} values, as for -deposit fees of the coins it uses. -In order to work against the used exchange, those values MUST match the -ones used by the exchange. - -The following example shows how the generator "sets" a deposit fee -of EUR:0.01 for the 5 EURO coin. - -@example -// from <merchant_repository>/src/sample/generate_payments.c -@{ .oc = OC_PAY, - .label = "deposit-simple", - .expected_response_code = MHD_HTTP_OK, - .details.pay.contract_ref = "create-proposal-1", - .details.pay.coin_ref = "withdraw-coin-1", - .details.pay.amount_with_fee = concat_amount (currency, "5"), - .details.pay.amount_without_fee = concat_amount (currency, "4.99") @}, -@end example - -The logic calculates the deposit fee according to the subtraction: -@code{amount_with_fee - amount_without_fee}. - -The following example shows a 5 EURO coin configuration - needed by the -used exchange - which is compatible with the hardcoded example above. - -@example -[COIN_eur_5] -value = EUR:5 -duration_overlap = 5 minutes -duration_withdraw = 7 days -duration_spend = 2 years -duration_legal = 3 years -fee_withdraw = EUR:0.00 -fee_deposit = EUR:0.01 # important bit -fee_refresh = EUR:0.00 -fee_refund = EUR:0.00 -rsa_keysize = 1024 -@end example - -If the command terminates with no errors, then the merchant backend -is correctly installed. - -After this operation is done, the merchant database will have some dummy -data in it, so it may be convenient to clean all the tables; to this -purpose, issue the following command: - -@example -$ taler-merchant-dbinit -r -@end example - - -@node Advanced topics -@chapter Advanced topics - -@menu -* Configuration format:: Configuration file format -* Using taler-config:: Introduction to the taler-config tool -* Merchant key management:: Managing the merchant's cryptographic keys -* SEPA configuration:: Configuring a SEPA bank account -* Tipping visitors:: Giving money to Web site visitors with Taler -* Generate payments:: Generate fake payments for testing purposes -@end menu - -@include configuration-format.texi -@include taler-config.texi - - -@node Merchant key management -@section Merchant key management -@cindex merchant key -@cindex KEYFILE - -The option ``KEYFILE'' in the section ``INSTANCE-default'' -specifies the path to the instance's private key. You do not need to -create a key manually, the backend will generate it automatically if -it is missing. While generally unnecessary, it is possible to display -the corresponding public key using the @code{gnunet-ecc} command-line -tool: - -@example -$ gnunet-ecc -p \ - $(taler-config -f -s INSTANCE-default \ - -o KEYFILE) -@end example - -@c Add more on how to add that key to X.509 CSRs once we can do that. - -@node SEPA configuration -@section Using the SEPA wire transfer method -@cindex SEPA -@cindex EBICS - -The following is a sample configuration for the SEPA wire transfer -method:@footnote{Supporting SEPA is still -work in progress; the backend will accept this configuration, but the -exchange will not work with SEPA today.}. - -Then, to configure the EBICS backend for SEPA payments in EUR, -the following configuration -options need to be set: - -@example -$ taler-config -s TALER -o CURRENCY -V EUR -$ taler-config -s ACCOUNT-e -o PLUGIN -V ebics -$ taler-config -s ACCOUNT-e -o URL \ - -V payto://sepa/XY00111122223333444455556666 -$ taler-config -s ACCOUNT-e -o WIRE_RESPONSE - -V '$@{DATADIR@}/b.json' -@end example - -Please note that you will also have to configure an exchange and/or -auditors that support SEPA. However, we cannot explain how to do this -yet as such entities do not yet exist. Once such entities do exist, -we expect future versions of the Taler backend to ship with -pre-configured exchanges and auditors for common denominations. - - -@node Tipping visitors -@section Tipping visitors -@cindex tipping - -Taler can also be used to tip Web site visitors. For example, you may -be running an online survey, and you want to reward those people that have -dutifully completed the survey. If they have installed a Taler wallet, -you can provide them with a tip for their deeds. This section describes -how to setup the Taler merchant backend for tipping. - -There are four basic steps that must happen to tip a visitor. - -@menu -* Configure a reserve and exchange for tipping:: -* Fund the reserve:: -* Authorize a tip:: -* Picking up of the tip:: -@end menu - -@node Configure a reserve and exchange for tipping -@subsection Configure a reserve and exchange for tipping -@cindex gnunet-ecc -@cindex reserve key - -@c TODO: We should probably create a tool that automates the -@c configuration process and simply outputs the wire transfer -@c subject of the reserve. - -To tip users, you first need to create a reserve. A reserve is a pool -of money held in escrow at the Taler exchange. This is the source of -the funds for the tips. Tipping will fail (resulting in disappointed -visitors) if you do not have enough funds in your reserve! - -First, we configure the backend. You need to enable tipping for each -instance separately, or you can use an instance only for tipping. To -configure the ``default'' instance for tipping, use the following -configuration: - -@example -[INSTANCE-default] -# this is NOT the tip.priv -KEYFILE = signing_key.priv -# replace the URL with the URL of the exchange you will use -TIP_EXCHANGE = https://exchange:443/ -# here put the path to the file created with "gnunet-ecc -g1 tip.priv" -TIP_RESERVE_PRIV_FILENAME = tip.priv -@end example - -Note that the KEYFILE option should have already been present for -the instance. It has nothing to do with the ``tip.priv'' file we -created above, and you should probably use a different file here. - -Instead of manually editing the configuration, you could also run: - -@example -$ taler-config -s INSTANCE-default \ - -o TIP_RESERVE_PRIV_FILENAME \ - -V tip.priv -$ taler-config -s INSTANCE-default \ - -o TIP_EXCHANGE \ - -V https://exchange:443/ -@end example - - -Next, to create the @code{TIP_RESERVE_PRIV_FILENAME} file, use: - -@example -$ gnunet-ecc -g 1 \ - $(taler-config -f -s INSTANCE-default \ - -o TIP-RESERVE_PRIV_FILENAME) -@end example - -This will create a file with the private key that will be used to -identify the reserve. You need to do this once for each instance that -is configured to tip. - - -Now you can (re)start the backend with the new configuration. - -@node Fund the reserve -@subsection Fund the reserve -@cindex reserve -@cindex close - -To fund the reserve, you must first extract the public key -from ``tip.priv'': - -@example -$ gnunet-ecc --print-public-key \ - $(taler-config -f -s INSTANCE-default \ - -o TIP-RESERVE_PRIV_FILENAME) -@end example - -In our example, the output for the public key is: - -@example -QPE24X8PBX3BZ6E7GQ5VAVHV32FWTTCADR0TRQ183MSSJD2CHNEG -@end example - -You now need to make a wire transfer to the exchange's bank account -using the public key as the wire transfer subject. The exchange's -bank account details can be found in JSON format at -``https://exchange:443//wire/METHOD'' where METHOD is the respective -wire method (i.e. ``sepa''). Depending on the exchange's operator, -you may also be able to find the bank details in a human-readable -format on the main page of the exchange. - -Make your wire transfer and (optionally) check at -``https://exchange:443/reserve/status/reserve_pub=QPE24X...'' -whether your transfer has arrived at the exchange. -@c FIXME: we should create a nicer tool to do this check! - -Once the funds have arrived, you can start to use the reserve -for tipping. - -Note that an exchange will typically close a reserve after four weeks, -wiring all remaining funds back to the sender's account. Thus, you -should plan to wire funds corresponding to a campaign of about two -weeks to the exchange initially. If your campaign runs longer, you -should wire further funds to the reserve every other week to prevent -it from expiring. - -@node Authorize a tip -@subsection Authorize a tip - -When your frontend has reached the point where a client is supposed -to receive a tip, it needs to first authorize the tip. For this, -the frontend must use the ``/tip-authorize'' API of the backend. -To authorize a tip, the frontend has to provide the following information -in the body of the POST request: - -@itemize @bullet -@item The amount of the tip - -@item The justification (only used internally for the back-office) - -@item The URL where the wallet should navigate next after the tip was processed - -@item The tip-pickup URL (see next section) -@end itemize - -In response to this request, the backend will return a tip token, an -expiration time and the exchange URL. -The expiration time will indicate how long the tip is valid (when the -reserve expires). The tip token is an opaque string that contains all -the information needed by the wallet to process the tip. The -frontend must send this tip token to the browser in a -special ``402 Payment Required'' response inside -the @code{X-Taler-Tip} header. - -The frontend should handle errors returned by the backend, such -as missconfigured instances or a lack of remaining funds for tipping. - -@node Picking up of the tip -@subsection Picking up of the tip - -The wallet will POST a JSON object to the shop's ``/tip-pickup'' handler. -The frontend must then forward this request to the backend. The response -generated by the backend can then be forwarded directly to the wallet. - -@node Generate payments -@section Generate payments -@cindex testing database - -The merchant codebase offers the @code{taler-merchant-benchmark} tool -to populate the database with fake payments. This tool is in charge of -starting a merchant, exchange, and bank processes, and provide them all -the input to accomplish payments. Note that each component will use its -own configuration (as they would do in production). - -The tool takes all of the values it needs from the command line, with -some of them being mandatory. Among those, we have: - -@itemize -@item @code{--currency=K} Use currency @emph{K}, for example to craft coins to withdraw. -@item @code{--bank-url=URL} Assume that the bank is serving under the base URL @emph{URL}. -This option is only actually used by the tool to check if the bank was well launched. -@item @code{--merchant-url=URL} Reach the merchant through @emph{URL}, for downloading -contracts and sending payments. -@end itemize - -The tool then comes with two operation modes: @emph{ordinary}, -and @emph{corner}. The first just executes normal payments, -meaning that it uses the default instance and make sure that -all payments get aggregated. The second gives the chance to -leave some payments unaggregated, and also to use merchant -instances other than the default (which is, actually, the one -used by default by the tool). - -Note: the abilty of driving the aggregation policy is useful -for testing the backoffice facility. - -Any subcommand is also equipped with the canonical @code{--help} -option, so feel free to issue the following command in order to -explore all the possibilities. For example: - -@smallexample -$ taler-merchant-benchmark corner --help -@end smallexample - -will show all the options offered by the @emph{corner} mode. -Among the most interesting, there are: - -@itemize -@item @code{--two-coins=TC} This option instructs the tool to perform @emph{TC} -many payments that use two coins, because normally only one coin is spent per payment. -@item @code{--unaggregated-number=UN} This option instructs the tool to perform @emph{UN} -(one coin) payments that will be left unaggregated. -@item @code{--alt-instance=AI} This option instructs the tool to perform payments -using the merchant instance @emph{AI} (instead of the @emph{default} instance) -@end itemize - -As for the @code{ordinary} subcommand, it is worth explaining the -following options: - -@itemize -@item @code{--payments-number=PN} Instructs the tool to perform @emph{PN} payments. -@item @code{--tracks-number=TN} Instructs the tool to perform @emph{TN} tracking operations. -Note that the @b{total} amount of operations will be two times @emph{TN}, since "one" -tracking operation accounts for @code{/track/transaction} and @code{/track/transfer}. -This command should only be used to see if the operation ends without problems, as -no actual measurement of performance is provided (despite of the 'benchmark' work used -in the tool's name). -@end itemize - -@c ********************************************************** -@c ******************* Appendices ************************* -@c ********************************************************** - -@node GNU-LGPL -@unnumbered GNU-LGPL -@cindex license -@cindex LGPL -@include lgpl.texi - -@node GNU Affero GPL -@unnumbered GNU Affero GPL -@cindex license -@cindex Affero GPL -@include agpl.texi - -@node GNU-FDL -@unnumbered GNU-FDL -@cindex license -@cindex GNU Free Documentation License -@include fdl-1.3.texi - -@node Concept Index -@unnumbered Concept Index - -@printindex cp - -@bye |