Ik ben bezig met het schijven van een api, voor een betalingsysteem.
Alleen loop een beetje vast
Ik weet hoe ik een betaling moet doen
<?
require_once 'Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('XXXX');
try
{
$payment = $mollie->payments->create(
array(
'amount' => $invoiceamount,
'description' => 'Flexpay',
'redirectUrl' => 'XXXX'.$returnkey,
'metadata' => array(
'order_id' => $invoice_id
)
)
);
/*
* Send the customer off to complete the payment.
*/
header("Location: " . $payment->getPaymentUrl());
exit;
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage()) . " on field " + htmlspecialchars($e->getField());
}?>
De betaling werkt, echter om te controleren of de betaling is gedaan, moet ik de Betaling ophalen.
Echter weet ik niet hoe ik aan de $payment_id kom. Want zoals het script hierboven laat zien, stuurt deze je gewoon door (ongacht er betaald is of niet)
De betaling wordt pas na de redirect gedaan via Mollie.
Er wordt vanuit Mollie daarna een webhook aangeroepen waarmee het succes van de betaling wordt doorgegeven. Zoek daar maar eens op in de dev. documentatie van Mollie.
>> Er wordt vanuit Mollie daarna een webhook aangeroepen waarmee het succes van de betaling wordt doorgegeven. Zoek daar maar eens op in de dev. documentatie van Mollie.
Deze informatie klopt op zich maar is niet volledig en is denk ik niet waar ts nu naar op zoek is
Het allerbelangrijkste is om na het aanmaken van de betalingsobject '$payment' de id propery er uit te halen en op te slaan in je database of in je sessie voor later gebruik en zo dat deze gekoppeld is aan de juiste order.
Wanneer de gebruiker dan van mollie af terug keert heb je dit id weer nodig om de status van de betaling op te kunnen halen.
<?php
session_start();
$mollie = new Mollie_API_Client;
$mollie->setApiKey("test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM");
// wat treffen we aan in $payment?
echo '<pre>'.print_r($payment, true).'</pre>';
?>
de webhook werkt helemaal los hiervan. Stel nou dat een betaling niet direct goedgekeurd kan worden (denk aan het handmatig overmaken middels een normale overboeking van de ene bankrekening naar de andere). Wanneer (na een dag of twee) een betaling uiteindelijk goedgekeurd is zal pas dan een statuswijziging optreden voor die ene betaling. Als dat gebeurt dan roept Mollie jouw webhook aan zodat jij op deze gebeurtenis kunt inspringen. Je kunt dan je order alsnog verwerken.
/*
* The order ID saved in the payment can be used to load the order and update it's
* status
*/
$order_id = $payment->metadata->order_id;
if ($payment->isPaid())
{
/*
* At this point you'd probably want to start the process of delivering the product
* to the customer.
*/
print 'betaald';
}
elseif (! $payment->isOpen())
{
/*
* The payment isn't paid and isn't open anymore. We can assume it was aborted.
*/
print 'niet betaald';
}
?>
Ziet er goed uit behalve de laatste elsif. Die biedt ruimte om gepasseerd te worden en dan wordt je script beƫindigd zonder enige actie.
Ik zou het zo doen:
<?php
if ($payment->isPaid())
{
/*
* At this point you'd probably want to start the process of delivering the product
* to the customer.
*/
print 'betaald';
}
elseif (! $payment->isOpen())
{
/*
* The payment isn't paid and isn't open anymore. We can assume it was aborted.
*/
print 'niet betaald';
}
else
{
/*
* The payment is still pending.
*/
print 'Uw betaling is nog niet goedgekeurd. Zodra uw betaling bevestigd is ontvangt u een email.';
/* en hiervoor heb je dan dus de webhook nodig of een cronjob */
}
?>