U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Configuratie van de koppeling met een Mollie-terminal

0000003253     -      11-08-2025

Mercator kan worden gekoppeld aan Mollie betalingsterminals. De ontwikkeling en tests zijn uitgevoerd met de A35-terminal,

Mollie_A35

evenals de A920Pro-terminal.

Mollie_A920pro

De volgende stappen moeten worden uitgevoerd om deze koppeling operationeel te maken:

  • Maak en valideer een handelsaccount bij Mollie.
  • Dit account moet een profiel bevatten.
  • In het tabblad "Betalingen in persoon" van het profiel moet de terminal verschijnen. Het is mogelijk om een terminal te bestellen via deze sectie.
  • Na het klikken op de terminal, raadpleeg "Terminalinformatie" en noteer het "Terminal-ID" (term_...)
  • Alleen bij het opstarten van de eerste terminal moet een API-sleutel worden aangemaakt. Dit gebeurt via 
    • Meer in het menu bovenaan
    • Ontwikkelaars
    • Kopieer de informatie "API sleutel boeken". (gebruik hier niet de testsleutel)
  • Zorg ervoor dat de optie MOLLIE in de voucher van Mercator staat, gevolgd door alle gebruikte terminal-ID's.
  • In "Tools / Setup / Betalingswijzen" moet u één of meerdere betaalwijzen creëren die door de terminal moeten worden ondersteund. Dit vereist een koppeling in kolom "Mollie".
  • Zorg ervoor dat de terminal altijd verbonden is met internet. Er is namelijk geen directe verbinding tussen Mercator en de terminal. Mercator communiceert alleen met een webservice die zich op de Mollie-servers bevindt, en de terminal communiceert op dezelfde manier.

 

In Mercator moet de API-sleutel worden ingevoerd in de optie "Mollie Betaal Terminal / Mollie API-sleutel" (id = MOLLI_APIK). Dit moet slechts één keer worden gedaan, omdat deze optie voor alle werkstations geldt.

Op elk werkstation moet de gebruikte terminal worden gekoppeld. Dit gebeurt via de opties van "Kassa Hardware" : Mollie terminal-ID (id = MOLLIE_TID)

 

  Het is belangrijk om rekening te houden met deze beperkingen die worden opgelegd door de hulpmiddelen die Mollie biedt aan software-integratieontwikkelaars:

  • Bij de opstart kan Mercator niet verifiëren of de terminal daadwerkelijk beschikbaar is (aan, verbonden met internet, enz.). Mercaotr kan alleen controleren of de terminal bestaat en "administratief" beschikbaar is in het portaal.
  • Als een transactie wordt verzonden en de terminal is niet bereikbaar, wordt er geen foutmelding weergegeven. Mercator wacht op de beschikbaarheid van de terminal.
  • Wanneer de terminal zijn internetverbinding verliest, moet hij opnieuw worden opgestart om weer actief te worden of moet je lang genoeg wachten.
  • Mercator heeft geen mogelijkheid om een verzonden transactie te annuleren. Wanneer de gebruiker een transactie in Mercator annuleert via de knop "Annuleren", moet deze ook op de terminal worden geannuleerd (rode knop). Als deze annulering niet plaatsvindt, kan een klant alsnog een betaling finaliseren die niet meer wordt verwacht door Mercator.
  • Als een transactie naar de terminal wordt verzonden, terwijl de vorige transactie nog niet op de terminal is geannuleerd, wordt er geen foutmelding weergegeven.

Let op:

De koppeling met de terminal accepteert geen negatieve bedragen. Terugbetalingen kunnen worden uitgevoerd via het Mollie-portaal of via specifieke code (zie hieronder).

De koppeling wijzigt de betalingswijze niet op basis van het type gebruikte kaart. Dit is niet van toepassing, aangezien alle betalingen aan de handelaar via Mollie gaan, ongeacht het type kaart.

Het is niet mogelijk om dezelfde terminal met meerdere werkstations te delen.


Zie ook: xMollie


Hieronder een voorbeeldcode, die kan worden geplaatst in een knop van een verkoopscherm, waarmee een terugbetaling van het eerder ontvangen bedrag via de Mollie-terminal kan worden uitgevoerd. Deze terugbetaling beïnvloedt echter niet de kassa van Mercator.

Deze code is een eenvoudige oplossing die kan worden verbeterd volgens preciezere specificaties.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;
using MercatorExtensions;
using MercatorDatabase;

// <CompileWithRoslyn />

namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {
        public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
        {
            Forms.Billing.BillingForm billingForm = (Forms.Billing.BillingForm)clickedButton.Form;

            MercatorPayTerm.PayTermMollie payTermMollie = Globals.PayTerms.OfType<MercatorPayTerm.PayTermMollie>().FirstOrDefault();
            if (payTermMollie == null)
            {
                Dialogs.Stop("Optie MOLLIE niet aanwezig!");
                return;
            }
            string transactionId = xFunctions.xMollie(billingForm.BillingEngine.PIEDS, "id", 1);
            if (transactionId == "")
            {
                Dialogs.Stop("De eerste betalingswijze is niet Mollie!");
                return;
            }
            double d = Dialogs.AskDouble("Te retourneren bedrag?", 0, "### ##0.00");
            if (d == double.MinValue)
                return;

            var r = payTermMollie.Refund(transactionId, d, billingForm.BillingEngine.Journal + "_" + billingForm.BillingEngine.Piece, out string error);
            if (error != null)
                Dialogs.Stop(error);
            else
                Dialogs.Stop("Status = " + r.status.ToString());
        }
    }
}

 


In dit tweede voorbeeld wordt de terugbetaling gesynchroniseerd met de kassa van Mercator. Dit kan problematisch zijn als de terugbetaling uiteindelijk om verschillende redenen niet door Mollie wordt uitgevoerd.

Om deze code te implementeren, moet een andere betalingswijze worden aangemaakt. Bijvoorbeeld, "Terugbetaling" en het nummer daarvan (21 hieronder). Vervolgens moet deze code in de gewenste verkoopsequenties worden geplaatst.

Let op dat in alle gevallen deze code de vraag "Doorgaan?" stelt, terwijl het resultaat van de terugbetalingsoperatie wordt weergegeven. Het antwoord dat aangeeft dat de terugbetaling is verwerkt, is "Status = pending". Als je hetzelfde document meerdere keren opslaat, kan de terugbetaling niet worden gewijzigd. In dat geval wordt het bericht "Een duplicaat terugbetaling is gedetecteerd". De opslag kan echter nog steeds worden voortgezet.

Deze code vertegenwoordigt een eenvoudige oplossing die kan worden verbeterd volgens preciezere specificaties.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;
using MercatorExtensions;
using MercatorDatabase;
using MercatorController;

// <CompileWithRoslyn />

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSave += billingEngine_BeforeSave;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSave -= billingEngine_BeforeSave;
        }

        void billingEngine_BeforeSave(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSaveEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            for (int i = 1; i <= 9; i++)
            {
                if (billingEngine.PIEDS.Value<int>("typ_paiem" + i) == 21) // 21 = n° du mode de paiement "Remboursement"
                {
                    if (billingEngine.PIEDS.Value<double>("tot_paiem" + i).CompareTo(0d, 2) > 0)
                    {
                        Dialogs.Stop("Het bedrag op de betalingswijze \"Terugbetaling\" moet negatief zijn!");
                        e.CancelSave = true;
                        return;
                    }
                    if (billingEngine.PIEDS.Value<double>("tot_paiem" + i).CompareTo(0d, 2) < 0)
                    {
                        MercatorPayTerm.PayTermMollie payTermMollie = MercatorUi.Globals.PayTerms.OfType<MercatorPayTerm.PayTermMollie>().FirstOrDefault();
                        if (payTermMollie == null)
                        {
                            Dialogs.Stop("Optie MOLLIE niet aanwezig!");
                            e.CancelSave = true;
                            return;
                        }
                        string transactionId = xFunctions.xMollie(billingEngine.PIEDS, "id", 1);
                        if (transactionId == "")
                        {
                            Dialogs.Stop("De eerste betalingswijze is niet Mollie!");
                            e.CancelSave = true;
                            return;
                        }
                        var r = payTermMollie.Refund(transactionId, -billingEngine.PIEDS.Value<double>("tot_paiem" + i), billingEngine.Journal + "_" + billingEngine.Piece, out string error);
                        string msg = error ?? ("Status = " + r.status.ToString());
                        if (!Dialogs.AnswerYesNo("Het resultaat van de Mollie-terugbetaling is:\r\n" + msg + "\r\nDoorgaan?"))
                        {
                            e.CancelSave = true;
                            return;
                        }
                    }
                }
            }
        }
    }
}


Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)