Mollie API

ICTscripters maakt gebruik van cookies. Door het gebruiken en browsen naar onze site gaat je automatisch akkoord met het gebruik van cookies. Klik hier voor meer informatie

  • Naar aanleiding van de vraag van L. Kok bedankt ik deze tutorial te maken. Deze tutorial zal je hoop ik een beeld geven van hoe je met de API van Mollie om moet gaan.

    1. Wat is Mollie?
    Mollie is een website waarmee je online betalingen op je website of app kunt verrichten. Met een eenvoudige API kunnen binnen no time betalingen plaats vinden.


    2. Is het gratis?
    Ja, de diensten van Mollie worden gratis aangeboden. Maar als particulier kunt u slechts van een aantal betaalmogelijkheden gebruikmaken.


    3. Hoe begin ik?
    De eerste stap is het downloaden van de source code. Mollie wordt ondersteund door verschillende talen, onder andere PHP en Node.JS.
    Download de source code en je vindt een map die Mollie heet, waarschijnlijk in een map die 'src' heet. Deze map is noodzakelijk van de installatie van Mollie op je website of app.
    Om betalingen te kunnen uitvoeren heb je een API key nodig, hiervoor heb je een websiteprofiel nodig. Deze moet vervolgens door Mollie zelf goedgekeurd worden. Wacht je op goedkeuring? Geen probleem, je kunt alvast beginnen met een test key.


    4. Hoe initialiseer ik Mollie?
    Met de API key van je websiteprofiel kun je nu de API besturen. Allereerst moet de key ingevoerd worden. Hieronder twee voorbeelden:

    PHP Source Code: PHP_init.php

    1. require_once 'Mollie/API/Autoloader.php';
    2. $mollie = new Mollie_API_Client;
    3. $mollie->setApiKey('API_KEY');


    JavaScript Source Code: Node_init.js

    1. Mollie = require('mollie-api-node');
    2. mollie = new Mollie.API.Client;
    3. mollie.setApiKey('API_KEY');

    5. Betaling uitvoeren
    Om een betaling uit te voeren moet er minimaal het bedrag in euro's, een beschrijving en een redirectUrl meegegeven worden. Daarnaast zijn er nog vier optionele parameters.


    PHP Source Code: PHP_payment.php

    1. try
    2. {
    3. $payment = $mollie->payments->create(
    4. array(
    5. 'amount' => 10.00,
    6. 'description' => 'My first API payment',
    7. 'redirectUrl' => 'https://webshop.example.org/order/12345/',
    8. 'metadata' => array(
    9. 'order_id' => '12345'
    10. )
    11. )
    12. );
    13. /*
    14. * Send the customer off to complete the payment.
    15. */
    16. header("Location: " . $payment->getPaymentUrl());
    17. exit;
    18. }
    19. catch (Mollie_API_Exception $e)
    20. {
    21. echo "API call failed: " . htmlspecialchars($e->getMessage()) . " on field " + htmlspecialchars($e->getField());
    22. }
    Laat alles zien


    JavaScript Source Code: Node_payment.js

    1. mollie.payments.create({
    2. amount: 10.00,
    3. description: 'My first API payment',
    4. redirectUrl: 'https://webshop.example.org/order/12345/',
    5. metadata: {
    6. orderId: '12345'
    7. }
    8. }, function (payment) {
    9. if (payment.error) {
    10. console.error(payment.error);
    11. return response.end();
    12. }
    13. /*
    14. * Send the customer off to complete the payment.
    15. */
    16. response.writeHead(302, {
    17. Location: payment.getPaymentUrl()
    18. });
    19. return response.end();
    20. });
    Laat alles zien

    6. Betaling tonen
    Nadat er een betaling is verricht, kan de status hiervan op worden gehaald. Een betaling kan zich in één van de zeven statussen bevinden, meer informatie in de Mollie documentatie.

    PHP Source Code: PHP_getpayment.php

    1. $payment_id = 'tr_WDqYK6vllg';
    2. $payment = $mollie->payments->get($payment_id);
    3. /*
    4. * The order ID saved in the payment can be used to load the order and update it's status
    5. */
    6. $order_id = $payment->metadata->order_id;
    7. if ($payment->isPaid())
    8. {
    9. /*
    10. * At this point you'd probably want to start the process of delivering the product to the customer.
    11. */
    12. }
    13. elseif (! $payment->isOpen())
    14. {
    15. /*
    16. * The payment isn't paid and isn't open anymore. We can assume it was aborted.
    17. */
    18. }
    Laat alles zien


    JavaScript Source Code: Node_getpayment.js

    1. var payment_id = 'tr_WDqYK6vllg';
    2. mollie.payments.get(payment_id, function(payment) {
    3. if (payment.error) {
    4. console.error(payment.error);
    5. return response.end();
    6. }
    7. if (payment.isPaid()) {
    8. /*
    9. * At this point you'd probably want to start the process of delivering the product to the customer.
    10. */
    11. } else if (!payment.isOpen()) {
    12. /*
    13. * The payment isn't paid and isn't open anymore. We can assume it was aborted.
    14. */
    15. }
    16. });
    Laat alles zien



    7. Mollie documentatie
    De documentatie van Mollie vind ik zelf zeer duidelijk en goed te volgen. Mocht je er dan toch niet uit komen, dan kun je natuurlijk altijd hier een vraag stellen. Wat ook kan, is een mailtje naar het support team van Mollie zelf, deze antwoorden vrij snel op werkdagen tussen 9 en 5.

    8. Handige links



    Bedankt voor het lezen, ik hoop dat jullie er wat aan hebben. Klopt er iets niet wat ik hierboven uitleg, geef me commentaar zodat ik het kan aanpassen.
    Eigenaar Blom Development
    Web Developer
    HTML • CSS • PHP • SQL • JavaScript • jQuery • AngularJS • Node.JS • Java • Android • C# • .NET • Swift • PhoneGap • Cordova • Ionic




    Persoonlijke websiteLinkedIn

    7,412x gelezen

Reacties 39

  • stefan52a -

    In de nodejs versie krijg ik bij

    response.writeHead(302, {
    Location: payment.getPaymentUrl()
    });
    return response.end();

    een CORS error: XMLHttpRequest cannot load mollie.com/payscreen/select-method/TPMsaHmbN. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

    Wat kan ik hier aan doen?

    • FangorN -

      Het is waarschijnlijk lastig danwel onmogelijk om vanaf een lokale webserver een betaaldienst te testen. Dit zul je dus via een testserver moeten doen die rechtstreeks toegankelijk is vanaf het internet. localhost is een adres dat dezelfde (eigen) machine vertegenwoordigt, jij mag dan wel weten wat jouw localhost is, maar machines op het internet kennen geen "localhost" behalve misschien als alias voor hun eigen machine. Je zult dus een (test)webserver op het internet zelf moeten hebben... ook als je deze betaaldienst gaat gebruiken op een website, anders kan Molie niet terugcommuniceren naar een apparaat en dus ook geen authorisatie- of betalingsverzoeken afhandelen.

  • Nico Vink -

    Mogelijk bespaar ik iemand wat zoektijd: voordat je de bezoeker doorduwt naar mollie heb ik zijn betaalgegevens naar een mysql tabel laten schrijven. Deze wordt door de webhook-pagina daarna geupdated met de betaalstatus (via de webhook open->betaald) Om het mollie betaal-id vooraf in de tabel te krijgen:
    $betaalid = $payment->id;

    /* regel in de database aanmaken */
    $tijd=date('h:i:s');
    $datum=date('d-m-Y');
    // bewaar de payment_id voor als de gebruiker terugkeert
    $_SESSION['mollie_payment_id'] = $payment->id;
    $betalingid= $payment->id; //mollies gegeven betalingid
    [email protected]_connect($host_key,$user_key,$pass_key) or die(mysql_error());
    $uid=$_SESSION['user_id'];
    $bnr=$_SESSION['bestelnummer'];
    $bed=$_SESSION['tbt'];
    $knr=$_SESSION['klantnummer'];
    [email protected]($database_key,"insert into 2017_mollie values('','$uid','$bnr','$bed','open','$tijd','$datum','$betalingid','$knr','ideal')");
    @mysql_close();


    en het blijkt dat je de array metadata gewoon kan aanvullen:
    ...'webhookUrl' => $protocol.'://'.$hostname.$path.'/02-webhook-verification.php?bestnr='.$bestnr.'&uid='.$uid,
    'metadata' => array('order_id' => $_SESSION['bestelnummer'],'klantnummer'=>$_SESSION['klantnummer'],'user_id' =>$_SESSION['user_id'])));

  • P.Yntema -

    Hoe kun je het verschil detecteren tussen een gecancelde en een mislukte betaling? Voor zover ik weet kun je namelijk alleen zien of een betaling open of niet open is.

    • ThomasBlom -

      Dit waren slechts twee opties die ik als voorbeeld heb gebruikt. Hier (mollie.com/nl/docs/status) zul je meer informatie over verschillende statussen vinden.

    • P.Yntema -

      Snap ik, alleen hoe kun je deze verkrijgen in een PHP script. Hier lijkt er alleen onderscheid gemaakt te worden tussen open en niet open.

      Verder lukt het ook niet om de gekozen betaalmethode te verkrijgen, alleen als deze van te voren vaststaat. Dit is alleen niet de bedoeling.

    • WHMCSAddons -

      Hoeveel PHP Kennis heb je P.Yntema? De API is behoorlijk uitgebreid je moet alleen weten waar je mee bezig bent. Ten opzichte van hun oude API is deze versie een behoorlijke verbetering geworden..

    • P.Yntema -

      Mijn PHP kennis is best wel redelijk, ik heb echter nog nooit gewerkt met mollie. Vandaar mijn vraag.

    • WHMCSAddons -

      Je kan met de API alle methodes aanroepen die 'geactiveerd' zijn op je account. Uit me hoofd is dat $mollie->methods->all(); hierbij zou je een lijst van geactiveerde methodes moeten krijgen.

      De verschillende statussen staat op de doc van Mollie, je kan deze natuurlijk aanroepen via hun library het bestand met mogelijke statussen staat ook in de library (mocht je die willen uitlezen) "Mollie/src/API/Object/Payment.php" hier vindt je alle objecten terug.

  • Daan -

    Misschien een beetje dom, maar hoe kom je aan de payment ID, ik weet dat deze terug gezonden wordt, maar ik weet niet precies hoe ik deze kan lezen met php

  • Harry -

    De api-key in javascript neerzetten is altijd gevaarlijk, dit is client-side en kan worden achterhaald. Ik verwijs naar het voorbeeld 4.Hoe initialiseer ik Mollie waar de js-code wordt vermeld.

  • gws -

    sorry hoor maar wat is er dan duidelijk in deze uitleg?
    ik heb de code geknipt en geplakt en php init en payment bij elkaar gezet, er lijkt iets te gebeuren, ik kom op mollie en ik doe een betaling
    de rederect is naar php get payment maar daar komt voor mij niets zinnigs uit
    meer uitleg is er niet en ook niet bij mollie wat ik kan vinden.

    moest ook behoorlijk zoeken voordat ik begreep dat set apikey veranderd moest worden

    • ThomasBlom -

      Ik geef in de uitleg toch echt aan dat je de api key moet wijzigen. Dus misschien gewoon beter lezen.

      Dit zijn voorbeelden die van Mollie afkomstig zijn, op hun website zal dus veel meer informatie staan.

      Wanneer je na de betaling terug komt op je eigen website heb je het ID van de Mollie betaling nodig om informatie op te halen. Heb je die niet, dan krijg je ook geen informatie. Die zul je dus ergens op moeten slaan.

  • J van Leeuwen -

    Ik wordt geconfronteerd met een webshop, waarvoor geen kant en klare Ideal plugin beschikbaar is, vandaar dat ik het via de mollie API ga proberen.
    Maar moet ik de diverse PHP scripts in een aparte map op de server plaatsen en dan daar naar verwijzen binnen de webshop scripts, of moet ik de afzonderlijke API-php files plaatsen IN de php scripts van de webshop?
    (de webshop heeft nu wel al ingebouwd Paypal en Authorize.net opties)

    • Aaron -

      de API zou je beter gaan includen zoals hierboven aangegeven. Het is altijd beter om de API buitten je http map te plaatsen zodat ze er niet rechtsreeks aan kunnen...
      Maar de code voor in de web shop mag je uiteraard in je website bouwen en die hoef je niet te includen.

    • J van Leeuwen -

      oké bedankt Aaron.

  • matistop333 -

    Handige tutorial! Wou vroeger ooit werken met mollie maar wist niet hoe het werkte maar nu dus wel! :)

  • FangorN -

    Okay, Mollie is dus een soort van Payment Service Provider (PSP). Zij bieden een aantal API's aan (cURL, PHP, Ruby, NodeJS, Python) en hun winstmodel is een vast/variabel bedrag per transactie (geen setup-, maandelijkse, uitbetaal- of kassa-kosten en je kunt je gratis aanmelden).

    Dit werd mij niet direct duidelijk uit het bovenstaande verhaal :).

  • alex888 -

    Bedankt thomas voor de mollie uitleg,

    Op dit moment ben ik aan het testen met Mollie en heb een aantal vragen:
    - voor webhookurl kan ik helaas geen localhost url gebruiken, klopt dit?
    - in jouw voorbeeld kan PHP_getpayment.php als webhook url worden gebruik? Zie namelijk niet zo snel waar ik de $payment_id vandaan kan halen
    - met het maken van een aantal test betalingen zag ik amountRemaining oplopen, waar ik had verwacht dat dit gewoon op 0 of '' zou staan?

    Groet,

    • WHMCSAddons -

      - De webhook moet communiceren met Mollie, op een localhost kan dit volgens mij niet.
      - Payment ID is een erkenning welke betaling het is geweest om de verwerking af te handelen.
      - Waar zie je de amountRemaining precies oplopen?

    • alex888 -

      Oh en weet je toevallig hoe je testbetalingen in 1x kan verwijderen. Simpel een ander test api key genereren en gebruiken is niet genoeg. Ik veronderstel dat de test betalingen gekoppeld zijn aan je [profileId]?

    • alex888 -

      @WMDiensten, bedankt voor de antwoorden
      Payment ID is de "tr_xxx" waarde die we van mollie terugkrijgen toch? En wordt toch gestuurd naar de file die je in webhook hebt gedefinieerd?

      Mbt amountRemaining, bijv bij PHP_getpayment.php en je zou $payment printen

      $payment = $mollie->payments->get($payment_id);
      print_r($payment);

      Na een aantal test betalingen loopt amountRemaining op en ik zie niet zo snel wat de functie is van de amountRemaining variable itt amountRefund (die is me wel duidelijk)

    • alex888 -

      echo '<pre>';
      print_r($payment);
      echo '</pre>';

    • WHMCSAddons -

      Test betalingen kan je zover ik weet onbeperkt uitvoeren, je moet een profiel toevoegen en deze kan dan volgens gebruikt worden hiervoor.

      payment_id is inderdaad de tr_xxxx terugkoppeling die aan de betreffende betaling zit, hiermee weet je wat de status van die betaling is.

      De amountRemaining zegt mij persoonlijk niets, heb je een goedgekeurd profiel bij Mollie? Mogelijk dat ze je tot die tijd limiteren in het gebruik van de dienst, hier kan ik geen antwoord met zekerheid op geven.

  • WHMCSAddons -

    Goede uitleg, wellicht handig om te vermelden wat de github link is van Mollie.
    Hier staan namelijk de bestanden die gebruikt worden tijdens communicatie met Mollie :)

    > github.com/mollie/mollie-api-php

  • Robin -

    Hardstikke goede tutorial, echter werkt mollie op dit moment ook met een webhook, is misschien handig om dit ook hieraan toe te voegen (dan kunnen betalingen op de achtergrond ook verwerkt worden als de klant bijvoorbeeld niet klikt op "terug naar de winkel".

    • ThomasBlom -

      Dat klopt Robin, die ben ik vergeten. Ook handig om die erbij te zetten, ik zal het straks eens aanpassen.

  • L.Kok -

    Is het mogelijk om de klant het bedrag aan te rekenen inclusief transactiekosten van mollie?

    Ik gebruik namelijk de betaalmethode Bancontact/Mistercash, hierbij is een vaste kost van € 0,25 en een variabele kost van 1,8%.

    • ThomasBlom -

      Mollie zal ook moeten verdienen aan hun diensten. Uw klanten betalen en bij uw uitbetaling wordt er een gedeelte achterhouden voor Mollie.

    • L.Kok -

      Oke dus aan de hand van deze formule kan ik dit aan mijn klant aanrekenen:

      Bedrag + 0,25 + ((bedrag/100)*1,8) = Aan te rekenen bedrag

      Op deze manier hou ik er 'Bedrag' aan over neem ik aan?

    • ThomasBlom -

      Op een paar cent na wel ja.

      Stel het bedrag dat uw klant moet betalen is €10.
      Zonder de formule van jou hierboven ontvang je daar €9.57 voor.
      Met de formule is dat €9.99226

      Zal niet veel schelen dus.

  • Victor -

    Bedankt voor de duidelijke tutorial, zeker handig als je niet goed weet hoe je het op moet zetten!