Hallo,

ik zit met het volgende probleem, ik ben bezig met een simpele webshop waar je kan afrekenen met iDeal d.m.v. de API van Mollie.

Op de productpagina zie je een overzicht van de producten en heb je per product een 'buy now' button. Als je erop klikt word je netjes doorgestuurd naar de mollie die het betaalproces afhandelt, het moment dat je op de knop klikt wordt er ook een record aangemaakt in de tabel genaamd 'webshop_status' met het orderID en de status wat beiden wordt aangemaakt / opgehaald door de api van mollie.

Nadat je een test betaling hebt gedaan wordt je teruggestuurd naar 'return-page.php' waar je 'bedankt' etc ofzo gaat zien :p

Het probleem is dat je ook een script moet maken wat mollie aanroept (webhook) als er een statusupdate is, deze webhook wordt dus aangeroepen door mollie het moment dat de klant betaald heeft.

Dit script heb ik al af (met dank aan wat voorbeeld code van mollie) maar ik krijg de webhook niet werkend. Ik krijg ook geen error te zien aangezien ik niet weet hoe mollie het script aanroept etc.

Ik heb de code van bestand wat mollie aanroept (webhook.php) hieronder toegevoegd.

Weet iemand wat er hier fout gaat?

- Marco


<?php
/*
* Example 2 - How to verify Mollie API Payments in a webhook.
*/

try
{
include "../include/dbconnect.php";
/*
* Initialize the Mollie API library with your API key.
*
* See: https://www.mollie.nl/beheer/account/profielen/
*/
include "../mollie-api-php-1.1.6/examples/initialize.php";

/*
* Retrieve the payment's current state.
*/
// $payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;

/*
* Update the order in the database.
*/
$act_status = $payment->status;

if ($payment->isPaid() == TRUE)
{
mysql_query("UPDATE webshop_status SET status='paid' WHERE orderID='$order_id'");
/*
* At this point you'd probably want to start the process of delivering the product to the customer.
*/
}
elseif ($payment->isOpen() == FALSE)
{
mysql_query("UPDATE webshop_status SET status='$act_status' WHERE orderID='$order_id'");
/*
* The payment isn't paid and isn't open anymore. We can assume it was aborted.
*/
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
Geen idee, maar wat gebeurt er precies, en wat verwacht je? Krijg je foutmeldingen?
Wat er gebeurd is dat mollie de webhook WEL aanroept (getest met een simpele insert als je de pagina alleen al bezoekt) maar daarna gebeurd er niks meer mee denk ik. Als ik zelf naar de pagina ga krijg ik de volgende error:


Notice: Undefined index: id in /include/webhook.php on line 19 API call failed: Invalid payment ID: ''. A payment ID should start with 'tr_'.


Maar dat komt denk ik omdat ik alleen de url bezoek en niet zoals mollie post variablen toevoeg.

Maar heel mijn probleem is dus dat ik geen error meldingen kan zien omdat mollie het script aanroept en ik zelf niet.
Staan die twee // op regel 19 ook in je live script of staan die er hier per ongeluk voor?
Op mijn live script staan die er niet voor, die ben ik net vergeten weg te halen toen ik wat dingen aan het testen was :p

Heb ook de error melding in mijn post hierboven aangepast aangezien ik de // was vergeten weg te halen gaf het andere errors xD
En deze error geeft hij dus denk ik omdat ik niks naar die url post maar gewoon zelf naar die url ga. Mollie post er wel wat naartoe (een hele array volgends mij)

https://www.mollie.com/nl/docs/webhook
Op de website van Mollie staat het volgende.


Ons systeem beschikt over een testmodus. Om een testbetaling te kunnen doen vul je in plaats van de live API key, de Test API key in in je website.


Het zou dus mogelijk moeten zijn om een test betaling te doen zonder dat het je daadwerkelijk geld kost maar pin me daar niet op vast. Het is helaas al weer meer dan vijf jaar geleden dat ik iets met Mollie heb gedaan dus het zal wel allemaal anders zijn vandaag de dag.

En ja, ze zullen inderdaad een hele rits aan parameters meegeven.
Ja ik heb ook de test API key gebruikt, op de betaling pagina kun je ook gewoon kiezen voor:
- Betaling geslaagd
- Geannuleerd
- Geen status

Hoi

Ik ben op dit moment ook bezig me t de mollie api als ik thuis ben kan ik jouw script even vergelijken met de jouwe om te kijken of ik het probleem zie.
Daan Daan op 05/03/2015 12:21:50

Hoi

Ik ben op dit moment ook bezig me t de mollie api als ik thuis ben kan ik jouw script even vergelijken met de jouwe om te kijken of ik het probleem zie.


Helaas zijn die dingen onduidelijk en er is ook geen support want hun weigeren om te helpen.
Marco,

Mollie heeft ook een api call waarmee je alle transacties kunt ophalen. Als je dit doet dan heb je een paar van die tr_ codes ofwel transactie id's. bovenaan je webhook script kun je dan voor de test heel stom het volgende doen:

<?php
$_POST['id'] = 'tr_xxxxx';
?>

Nu kun je wel vanuit je browser het script aanroepen en gaat hij die transactie voor je ophalen. En jij kan zien of er fouten optreden.
Daarnaast kun je in het panel van Mollie ook een test uitvoeren of je script aangeroepen kan worden. Uit mijn hoofd gezegd dacht ik dat er wel een https:// verbinding vereist is.

Indien je er niet uitkomt die call die alle transacties teruggeeft dan kan ik vanavond even de code plaatsen.

[size=xsmall]Toevoeging op 05/03/2015 13:43:36:[/size]

Heb het al voor je:

<?php

require 'php/config.php';
require "vendor/autoload.php";

$mollie = new Mollie_API_Client;
$mollie->setApiKey($apiKey);

$payments = $mollie->payments->all();

print_r($payments);
?>

Ik gebruik uiteraard de standaard Mollie PHP lib.
Johan de wit op 05/03/2015 13:22:55

[quote="Daan Daan op 05/03/2015 12:21:50"]
Hoi

Ik ben op dit moment ook bezig me t de mollie api als ik thuis ben kan ik jouw script even vergelijken met de jouwe om te kijken of ik het probleem zie.


Helaas zijn die dingen onduidelijk en er is ook geen support want hun weigeren om te helpen.
[/quote]

Ik krijg anders duidelijke hulp als ik een vraag stel en ook de documentatie vind ik er erg duidelijk uitzien.

Marco

Ik heb even in mijn eigen script gekeken en het ziet er redelijk hetzelfde uit alleen ik controleer op de volgende manier of er betaald is of dat de status open is of expired:

<?php
if($payment->status == "paid"){
//Update met als status betaald.
}
elseif($payment->status == "open"){
//Update met als status open.
}
elseif($payment->status == "expired"){
//Update met als status expired.
}
?>

Reageren