Hoi. Ik ben enigsinds verward over de payment status in the Mollie webook! De open status wat houd die precies in? Iemand betaald en krijgt een succes status van IDEAL en keert terug naar de website. Alleen werk dit niet altijd zoals het hoort heb ik het vermoeden. In mijn ridirect url heb ik namelijk 3 acties staan die worden uitgevoerd op basis van wat de webhook terug stuurd

Voorbeeld In de database zie ik dat iemand gisteren om 16:15 een product in de winkelmand heeft geplaatst en meteen naar IDEAL is gegaan. In de return url heb ik staan dat als status is paid er een email naar mij verstuurd word met de bestelling. Deze email heb ik echter niet binnengekregen. Via de webhook update ik een andere tafel (order_status) voor de orderstatus (paid, cancelled, open). Nu zie ik echter in de tafel order_status dat de status paid pas om 16:24 heeft plaatsgevonden. Maar wel is de klant terug gestuurd naar de return url

Weet niet zo goed wat ik hier mee aanmoet?

Toevoeging op 31/10/2015 10:59:04:

Ik heb inmiddels het email gedeelte verplaatst van de return url naar de webhook

if($payment->status == "paid")
{
	$order_status  = 'paid';
				
	$update_status = $this->artikelen->set_order_status($klant_id,$order_status);
	
	include_once APP_PATH . '/helpers/mail_versturen.php';
}

En nu krijg ik het bericht duw wel binnen, alleen wel 5 tot 6 keer. Ik zie niet wat hiervan de oorzaak is
Wat ik mij eigenlijk afvraag is waarom Mollie een aparte webhook heeft en een return url. Eigenlijk zouden die twee toch het zelfde kunnen zijn. Afhankelijk van de status kun de dan iemand toch naar een andere View sturen? Of zie ik dat verkeerd?
Donald Boers op 02/11/2015 13:30:12

Wat ik mij eigenlijk afvraag is waarom Mollie een aparte webhook heeft en een return url. Eigenlijk zouden die twee toch het zelfde kunnen zijn. Afhankelijk van de status kun de dan iemand toch naar een andere View sturen? Of zie ik dat verkeerd?




Dat doen ze waarschijnlijk, omdat niet iedereen op OK, klikt en terug navigeert via die weg naar de website.
Mocht de gebruiker de browser of het schermpje sluiten, is iig de betaling wel verwerkt door de webhook.
Maar wat doe je dan met de status open? Ik vind het echt heel verwarrend
Misschien geeft de website van mollie wat duidelijkheid hierover?

Zoals te lezen op die pagina:
"De betaling is aangemaakt, maar er is verder nog niets gebeurd. Voor deze status roept Mollie geen Webhook aan."
je mag eigenlijk niet vertrouwen op het terugkomen van de klant op de succes url om de betaling als gedaan te beschouwen

a) als iemand betaald heeft en om een of andere reden niet terugkomt op je site (vergeet link te klikken, stroom viel uit, wifi stoorde, moest nodig naar toilet etc) dan heeft hij betaald en jij weet van niets.

b) als iemand de return url weet te raden en zonder betaling door gaat naar de juiste url, dan lever jij een product en krijgt geen geld.

Daarom geeft de payment provider onder water een seintje aan jouw server dat de betaling status ok/nok heeft. Mocht dat mislukken, dan zal het mogelijk enkele minuten later nog een keer gebeuren .
In zo'n geval geef ik de terugkerende klant de melding dat de betaling nog niet verwerkt is maar dat we wachten op een melding van de bank.
@Randy. Dat heb ik inderdaad allemaal doorgenomen, maar bedankt voor de link.

@Ivo Ik begrijp wat je bedoeld. Maar er zijn ten aller tijden toch ook mensen die wel de terug gaan naar de website. Hoe zou jou webhook er uitzien. Temeer daar de return url gebasseerd is/moet zijn op wat er in de webhook gebeurt
Je moet je webhook en je return url helemaal los van elkaar zien.

Op je webhook komen geen bezoekers, nooit. Daarom krijg je de status van Mollie door en die verwerk je in je database. Dat is alles. Er hoeft niet eens iets op te zien te zijn, daar kijkt Mollie toch niet naar.

Op je return url komt de bezoeker. Je haalt uit de database de status (die de webhook heeft doorgegeven) en toont deze aan je bezoeker.

Dat is alles.
En normaal gesproken wordt de webhook eerst aangeroepen, en pas daarna krijgt de bezoeker bij mollie de redirect header.

De bezoeker zou dus in theorie altijd pas terugkomen nadat de status is doorgegeven.
Maar hou rekening met de incidentele gevallen waarin de status nog niet is doorgegeven en de status dus nog "open" is.
Bedankt voor jullie reacties Ramon en Ivo. Wat ik verwarrend blijf vinden is dat Mollie in het ene voorbeeld zegd/schrijft dat je de order status moet updaten voor dat je checkt wat de status is

https://github.com/mollie/mollie-api-php/blob/master/examples/2-webhook-verification.php

en in andere voorbeelden juist weer aangeeft dat de update moet plaatsvinden binnen de check

https://www.mollie.com/nl/docs/webhook

Wat is de juiste weg om te kiezen


Toevoeging op 02/11/2015 22:07:47:

Dit is wat ik nu heb:

    public function webhookAction()
	{
	    try
		{
		    require_once (APP_PATH.'/Mollie/API/Autoloader.php');			
			$mollie = new Mollie_API_Client;
			$mollie->setApiKey('live_KNIP');
			
			$payment        = $mollie->payments->get($_POST["id"]);
			$klant_id       = $payment->metadata->klant_id;
			
			$this->artikelen->set_order_status($klant_id, $payment->status);
			
			if ($payment->isPaid() == TRUE)
			{	
				$klant_info     = $this->artikelen->get_klant_info($klant_id);
				$order          = $this->artikelen->get_order_nummer($klant_id);
				$cart_items     = $this->artikelen->get_email_items($klant_id);
				$klant_naam     = $klant_info['naam'];
				$klant_email    = $klant_info['email_adres'];
				
				include_once APP_PATH . '/helpers/verstuur_mail.php';
				
				if ($email)
				{
					$this->artikelen->delete_cart_items($klant_id);
					$this->artikelen->delete_order_status($klant_id);					
				}
			}
			elseif ($payment->isOpen() == FALSE)
			{
				$this->artikelen->delete_cart_items($klant_id);
				$this->artikelen->delete_order_status($klant_id);			
			}
		}
		
		catch (Mollie_API_Exception $e)
		{
			echo "API call failed: " . htmlspecialchars($e->getMessage());
		}
	}

Echter op deze manier wordt wel 6 tot 7 keer een email verzonden. De eerste keer met de juiste artikel gegevens, de andere keren echter zonder artikel gegevens aangezien ik die verwijder wanneer de email word verzonden.

Ik hoop dat het enigsinds begrijpelijk is wat ik bedoel?

Alvast bedankt
Donald, Beetje laat misschien, maar is je probleem al opgelost?
Ik had het zelfde probleem en dagen op internet gezocht naar een fix maar niet gevonden, maar het is me nu uiteindelijk zelf toch gelukt.

Ben helemaal overnieuw begonnen en ben 1 voor 1 dingen gaan toevoegen van alle files. Ik kwam erachter dat zodra ik mijn include ('menu.php') erbij zette dat het fout ging. Daarna menu.php uitgeplozen en alles 1 voor 1 uitgezet.

Toen kwam ik erachter dat als ik onderstaande regel verwijder, ik slechts 1 email ontvang ipv 6 stuks achter elkaar:

<link rel="shortcut icon" href="#">

Omdat de post al van vorig jaar is vermoed ik dat je probleem al opgelost is, mocht het niet zo zijn probeer dit dan even, en anders hebben misschien meerdere personen er iets aan :)

Succes!

Reageren