Mollie betaling opvragen
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?
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());
}?>
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)
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
session_start();
$mollie = new Mollie_API_Client;
$mollie->setApiKey("test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM");
$payment = $mollie->payments->create( array(
'amount' => $invoiceamount,
'description' => 'Flexpay',
'redirectUrl' => 'XXXX'.$returnkey,
'metadata' => array(
'order_id' => $invoice_id
));
// bewaar de payment_id voor als de gebruiker terugkeert
$_SESSION['mollie_payment_id'] = $payment->id;
?>
session_start();
$mollie = new Mollie_API_Client;
$mollie->setApiKey("test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM");
$payment = $mollie->payments->create( array(
'amount' => $invoiceamount,
'description' => 'Flexpay',
'redirectUrl' => 'XXXX'.$returnkey,
'metadata' => array(
'order_id' => $invoice_id
));
// bewaar de payment_id voor als de gebruiker terugkeert
$_SESSION['mollie_payment_id'] = $payment->id;
?>
return page
Code (php)
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.
Gewijzigd op 03/09/2016 08:45:54 door Frank Nietbelangrijk
Zitten hier nog foutjes in?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?
session_start();
require_once '../Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('xxx');
try
{
$payment = $mollie->payments->create(
array(
'amount' => 10.00,
'description' => 'My first payment',
'redirectUrl' => 'xxx',
'metadata' => array(
'order_id' => 'xxx'
)
)
);
/*
* Send the customer off to complete the payment.
*/
$_SESSION['mollie_payment_id'] = $payment->id;
header("Location: " . $payment->getPaymentUrl());
exit;
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
echo " on field " . htmlspecialchars($e->getField());
}
?>
session_start();
require_once '../Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('xxx');
try
{
$payment = $mollie->payments->create(
array(
'amount' => 10.00,
'description' => 'My first payment',
'redirectUrl' => 'xxx',
'metadata' => array(
'order_id' => 'xxx'
)
)
);
/*
* Send the customer off to complete the payment.
*/
$_SESSION['mollie_payment_id'] = $payment->id;
header("Location: " . $payment->getPaymentUrl());
exit;
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
echo " on field " . htmlspecialchars($e->getField());
}
?>
Return page
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?
session_start();
require_once '../Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_jStGFkEggBbm3JFQgfhVqh8zygaBK8');
$payment_id = $_SESSION['mollie_payment_id'];
$payment = $mollie->payments->get($payment_id);
/*
* 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';
}
?>
session_start();
require_once '../Mollie/API/Autoloader.php';
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_jStGFkEggBbm3JFQgfhVqh8zygaBK8');
$payment_id = $_SESSION['mollie_payment_id'];
$payment = $mollie->payments->get($payment_id);
/*
* 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';
}
?>
Ik zou het zo doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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 */
}
?>
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 */
}
?>
Webhook voorbeeld: https://www.mollie.com/nl/docs/webhook#webhook-voorbeeld