Mollie Api
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
35
36
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
35
36
public function betalenAction()
{
require_once (APP_PATH.'/Mollie/API/Autoloader.php');
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_4Hb6uayeYE8NzRbLH8xFtGwm3idBH9');
$order_id = time();
$cart_items = $this->artikelen->get_cart_items($this->client);
$total_price = 0;
foreach ($cart_items as $value)
{
$price = str_replace(',','.', $value['product_prijs']);
$total_price += $price;
}
try
{
$payment = $mollie->payments->create(
array(
'amount' => $total_price,
'method' => Mollie_API_Object_Method::IDEAL,
'description' => 'My first API payment',
'redirectUrl' => 'http://www.testfolder.nl/artikelen/bestelling_status',
'metadata' => array(
'order_id' => $order_id
)
)
);
header("Location: " . $payment->getPaymentUrl());
exit;
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage()) . " on field " + htmlspecialchars($e->getField());
}
}
{
require_once (APP_PATH.'/Mollie/API/Autoloader.php');
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_4Hb6uayeYE8NzRbLH8xFtGwm3idBH9');
$order_id = time();
$cart_items = $this->artikelen->get_cart_items($this->client);
$total_price = 0;
foreach ($cart_items as $value)
{
$price = str_replace(',','.', $value['product_prijs']);
$total_price += $price;
}
try
{
$payment = $mollie->payments->create(
array(
'amount' => $total_price,
'method' => Mollie_API_Object_Method::IDEAL,
'description' => 'My first API payment',
'redirectUrl' => 'http://www.testfolder.nl/artikelen/bestelling_status',
'metadata' => array(
'order_id' => $order_id
)
)
);
header("Location: " . $payment->getPaymentUrl());
exit;
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage()) . " on field " + htmlspecialchars($e->getField());
}
}
Ik heb ook de webhookUrl juist aangemaakt:
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
try
{
require_once (APP_PATH.'/Mollie/API/Autoloader.php');
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_4Hb6uayeYE8NzRbLH8xFtGwm3idBH9');
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;
$this->artikelen->set_bestel_status($order_id, $payment->status);
if ($payment->isPaid() == TRUE)
{
}
elseif ($payment->isOpen() == FALSE)
{
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
{
require_once (APP_PATH.'/Mollie/API/Autoloader.php');
$mollie = new Mollie_API_Client;
$mollie->setApiKey('test_4Hb6uayeYE8NzRbLH8xFtGwm3idBH9');
$payment = $mollie->payments->get($_POST["id"]);
$order_id = $payment->metadata->order_id;
$this->artikelen->set_bestel_status($order_id, $payment->status);
if ($payment->isPaid() == TRUE)
{
}
elseif ($payment->isOpen() == FALSE)
{
}
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
Want als ik terug op de pagina kom en de database controleer staan inderdaad de juiste order_id en order_status in de database.
Maar zoals ik al aangaf wil ik graag de koper informatie in de database opslaan voor later gebruik. Waneer ik echer het volgende voor de redirect in betalenAction voor de redirect naar mollie plaats blijft de pagina steken en kom ik niet bij Mollie terecht.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
$order_id = time();
$client_id = $this->client;
$naam = filter_input(INPUT_POST, 'naam', FILTER_SANITIZE_STRING);
$adres = filter_input(INPUT_POST, 'adres', FILTER_SANITIZE_STRING);
$postcode = filter_input(INPUT_POST, 'postcode', FILTER_SANITIZE_STRING);
$woonplaats = filter_input(INPUT_POST, 'woonplaats', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
$telefoon = filter_input(INPUT_POST, 'telefoon', FILTER_SANITIZE_STRING);
$bijzonderheden = filter_input(INPUT_POST, 'bijzonderheden', FILTER_SANITIZE_STRING);
$toevoegen = $this->artikelen->bestelling_toevoegen($order_id,$client_id,$naam,$adres,$postcode,$woonplaats,$email,$telefoon,$bijzonderheden);
$client_id = $this->client;
$naam = filter_input(INPUT_POST, 'naam', FILTER_SANITIZE_STRING);
$adres = filter_input(INPUT_POST, 'adres', FILTER_SANITIZE_STRING);
$postcode = filter_input(INPUT_POST, 'postcode', FILTER_SANITIZE_STRING);
$woonplaats = filter_input(INPUT_POST, 'woonplaats', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
$telefoon = filter_input(INPUT_POST, 'telefoon', FILTER_SANITIZE_STRING);
$bijzonderheden = filter_input(INPUT_POST, 'bijzonderheden', FILTER_SANITIZE_STRING);
$toevoegen = $this->artikelen->bestelling_toevoegen($order_id,$client_id,$naam,$adres,$postcode,$woonplaats,$email,$telefoon,$bijzonderheden);
Ziet iemand wat ik hier fout doe?
Bij voorbaat dank
Is je website op maat gemaakt?
Hallo Johan. Ja die is op maat gemaakt, het is geen bestaand Framwerk
Lijkt me dat order_id een uniek ding moet zijn?
time() levert je het aantal seconden sinds 1970. In 1 seconde zitten 1000 miliseconden. Elke paar ms kan een webserver wel een request verwerken. De kans is dus zeker aanwezig dat er een keer 2 orders in dezelfde seconde geplaatst worden. Hoeft niet vaak te gebeuren. Een keer is genoeg om een probleem te veroorzaken.
Ik zou de tabel met orders voorzien van een kolom order_id met een auto-increment waarde.
En als jij order_id = 134 niet spannend genoeg vindt, dan kun je dat altijd nog als 2015090134 presenteren.
Verder zou ik je opsla-probleem debuggen door te kijken wat bestelling_toevoegen() precies uitspookt.
Ik zou eens kijken of die functie fouten in de query uitvoering opvangt.
Daarna kan die functie true/false terug geven, waarna je bij de aanroep op basis van de geretourneerde waarde kan besluiten om wel of niet (met melding) naar mollie door te gaan.
Code (php)
1
$toevoegen = $this->artikelen->bestelling_toevoegen($order_id,$client_id,$naam,$adres,$postcode,$woonplaats,$email,$telefoon,$bijzonderheden);
Die $this is een object dat een container artikelen bevat. Die artikelen hebben een methode bestelling_toevoegen() waarmee je klantgegevens opslaat. Dat zijn echter drie verschillende dingen, die je zou moeten scheiden: artikelen, bestelling en klant. De structuur deugt niet óf je gebruikt een bestaande structuur verkeerd.
Waar komt die $this vandaan?
@ Ward. Je hebt helemaal gelijk. Ik heb de order_id inmiddels uit de tafel verwijderd. Voor wat betreft de $this. Die komt uit de main controller:
protected $artikelen;
$this->artikelen = new Model_Artikelen($pdo);