-
Notifications
You must be signed in to change notification settings - Fork 0
/
ipn.php
85 lines (72 loc) · 3.62 KB
/
ipn.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
/*
* Dit bestand kan omgaan met de Instant Payment Notification-meldingen van PayPal.
* Hiermee geeft PayPal op een veilige manier de staat van de betaling door.
*/
function https_post($url, $data)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
if(!($result = curl_exec($ch)))
{
error_log("Got " . curl_error($ch) . " when processing IPN data");
curl_close($ch);
exit();
}
curl_close($ch);
return $result;
}
// Stuur de POST-data terug naar PayPal ter verificatie
$post_data = file_get_contents('php://input');
$verify_data = "cmd=_notify-validate&" . $post_data;
$result = https_post("https://www.paypal.com/nl/cgi-bin/webscr", $verify_data);
if ($result === "VERIFIED" && $_POST['test_ipn'] != 1)
{
// De bestelling-id is opgeslagen in het custom-veld
$bestelling = $_POST['custom'];
// Totaalbedrag bestelling berekenen
$db = connect_to_db();
$sql = $db->prepare("SELECT prijs, hoeveelheid, verzendkosten FROM Bestelling_Product JOIN Bestellingen ON Bestellingen.id = bestelling_id WHERE Bestellingen.id = ?");
$sql->bind_param('i', $bestelling);
$sql->execute();
$sql->bind_result($prijs, $hoeveelheid, $verzendkosten);
$totaalbedrag = 0;
while ($sql->fetch())
$totaalbedrag += $prijs * $hoeveelheid;
$totaalbedrag += $verzendkosten;
$sql->free_result();
$total_price = $_POST['mc_gross']; // moet gelijk zijn aan totaalbedrag bestelling
$business = $_POST['business']; // moet gelijk zijn aan "[email protected]"
$status = $_POST['payment_status']; // Pending of Completed
if ($total_price == $totaalbedrag && $business == '[email protected]')
{
//Een log voor de zekerheid (bijvoorbeeld als een onbekende status ontvangen wordt)
error_log("IPN request: bestelling " . $bestelling . " is nu " . "'$status'");
if ($status == 'Pending')
$status = 'Betaling wordt verwerkt';
else if ($status == 'Completed')
$status = 'Betaald';
else
exit();
$sql = $db->prepare("UPDATE Bestellingen SET betaalstatus = ? WHERE id = ?");
$sql->bind_param('si', $status, $bestelling);
$sql->execute();
}
require_once 'email.php';
bestelling_mail($bestelling, 'U heeft betaald voor uw bestelling bij Super Internet Shop',
'Uw betaling wordt zo snel mogelijk verwerkt en uw bestelling wordt daarna zo spoedig mogelijk verzonden.<br/>
Wanneer dit gebeurt krijgt u van ons een email ter bevestiging.<br/>
U kunt ook altijd zelf de situatie in de gaten houden via uw accountoverzicht, of contact met ons opnemen als u vragen heeft.<br/>
Bedankt voor uw bestelling bij SuperInternetShop.nl!');
$db->close();
}
else
error_log("Unverified IPN request: " . $post_data);
?>