Ik heb hier een stuk code van de mollie api (werkend), het enige probleem is dat maakt niet uit welke status de betaling heeft hij altijd op de pagina terecht komt waarop op staat dat degene betaald heeft, dit wil ik tegenhouden, maar ik kom niet echt uit de uitleg van Mollie op hun website uit.. Misschien weet iemand het hier meteen en zou hij/zij dat uit kunnen leggen?



<code><?php
session_start();
/*
* Example 1 - How to prepare a new payment with the Mollie API.
*/
setcookie("TestCookie", $_POST['naam']);
$_SESSION['post-data']=$_POST['naam'];
$gegevens = $_SESSION['post-data'];
$str = explode("/", $gegevens);
setcookie("aantal", $_POST['aantaltickets']);
$aantal = $_POST['aantaltickets'];
setcookie("email", $_POST['email']);
setcookie("mailadres", $_POST['mailadres']);
setcookie("onderwerp", $_POST['onderwerp']);
setcookie("inhoud", $_POST['inhoud']);
setcookie("username", $_POST['username']);
setcookie("adres", $_POST['adres']);
setcookie("email", $_POST['email']);


try
{
/*
* Initialize the Mollie API library with your API key.
*
* See: https://www.mollie.com/beheer/account/profielen/
*/
require "mollie/src/Mollie/API/Autoloader.php";

/*
* Initialize the Mollie API library with your API key.
*
* See: https://www.mollie.com/beheer/account/profielen/
*/
$mollie = new Mollie_API_Client;
$mollie->setApiKey("test_AVYz3uwjppq9XCuKbecdAHtQ7hTw2C");

/*
* Generate a unique order id for this example. It is important to include this unique attribute
* in the redirectUrl (below) so a proper return page can be shown to the customer.
*/
$order_id = time();

/*
* Determine the url parts to these example files.
*/
$protocol = isset($_SERVER['HTTPS']) && strcasecmp('off', $_SERVER['HTTPS']) !== 0 ? "https" : "http";
$hostname = $_SERVER['HTTP_HOST'];
$path = dirname(isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF']);

/*
* Payment parameters:
* amount Amount in EUROs. This example creates a € 10,- payment.
* description Description of the payment.
* redirectUrl Redirect location. The customer will be redirected there after the payment.
* metadata Custom metadata that is stored with the payment.
*/
$payment = $mollie->payments->create(array(
"amount" => $str[count($str)-5]*$aantal + $str[count($str)-11]*$aantal,
"description" => "Your ticket(s) payment",
"redirectUrl" => "{$protocol}://{$hostname}{$path}/index2.php?order_id={$order_id}",
"metadata" => array(
"order_id" => $order_id,
),
));

/*
* In this example we store the order with its payment status in a database.
*/
database_write($order_id, $payment->status);

/*
* Send the customer off to complete the payment.
*/
header("Location: " . $payment->getPaymentUrl());
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
}


/*
* NOTE: This example uses a text file as a database. Please use a real database like MySQL in production code.
*/
function database_write ($order_id, $status)
{
$order_id = intval($order_id);
$database = dirname(__FILE__) . "/orders/order-{$order_id}.txt";

file_put_contents($database, $status);
} </code>
Je moet controleren wat de status is en op basis daarvan stuur je iemand door naar een bepaalde pagina zo heb ik het gedaan.
Oke dat begrijp ik zoals dit eigenlijk :
<code><?php if ($payment->isPaid())
{

}
elseif (! $payment->isOpen())
{

}
?>
</code>

maar waar moet ik dat in mn bestaande code neerzetten? Want de redirect url die ik daar heb staan is de redirect van wanneer het gelukt is. Thanks btw
Ik controleer het op de volgende manier:

<?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.
}
?>

Deze code heb ik in mijn return/redirect page staan, de return wordt altijd aangeroepen ook als een betaling verloopt of mislukt.
redirectUrl Redirect location. The customer will be redirected there after the payment.

Op die pagina zul je het payment object (opnieuw) moeten creeren en dan de status controleren, lijkt mij?

Er zijn ongetwijfeld voorbeelden van hoe deze hele flow er in de praktijk uitziet?

EDIT: wellicht wil je of een moderator je API key verwijderen uit je post...
Ja idd Thomas zo werkt het je moet dan opnieuw het payment object creeren en dan de status controleren, die api key is een test key waar je toch niks mee kunt.
Zelf ook bezig met Mollie en een shop.
Ik zou $order_id = time(); niet gebruiken maar

<?php
$order_id = time() . '-' . mt_rand();
?>


En die API key maakt niet heel veel uit, het is maar een test API key waar je niets mee kan eigenlijk.

Als de payment niet juist is gegaan toon ik een andere file.


<?php
$viewfile = 'thankyou';

if (false === $payment->isPaid()) {
     $viewfile = 'wentwrong';
}

$this->display($this->load->view(
	'order/' . $viewfile,
	$data, true)
);
?>


Ik gebruik een framework maar de gedachte blijft hetzelfde.
Thanks allen, ik ga kijken of ik eruit kom en hou jullie op de hoogte!

Reageren