-
Notifications
You must be signed in to change notification settings - Fork 0
/
callback.php
47 lines (41 loc) · 2.25 KB
/
callback.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
<?php
// Log the callback response for debugging purposes
$callbackData = file_get_contents('php://input');
$logFile = 'mpesa_callback.log';
$log = fopen($logFile, 'a');
fwrite($log, $callbackData . "\n");
fclose($log);
// Convert the JSON callback data to an associative array
$callbackData = json_decode($callbackData, true);
// Process the response based on the ResultCode from M-Pesa
if ($callbackData && isset($callbackData['Body']['stkCallback']['ResultCode'])) {
$resultCode = $callbackData['Body']['stkCallback']['ResultCode'];
$resultDesc = $callbackData['Body']['stkCallback']['ResultDesc'];
$merchantRequestID = $callbackData['Body']['stkCallback']['MerchantRequestID'];
$checkoutRequestID = $callbackData['Body']['stkCallback']['CheckoutRequestID'];
// Check if the payment was successful
if ($resultCode == 0) {
// Payment successful, retrieve the transaction details
$amount = $callbackData['Body']['stkCallback']['CallbackMetadata']['Item'][0]['Value'];
$mpesaReceiptNumber = $callbackData['Body']['stkCallback']['CallbackMetadata']['Item'][1]['Value'];
$transactionDate = $callbackData['Body']['stkCallback']['CallbackMetadata']['Item'][3]['Value'];
$phoneNumber = $callbackData['Body']['stkCallback']['CallbackMetadata']['Item'][4]['Value'];
// Insertion to your database
$conn = new mysqli('localhost', 'root', '', 'mpesa_db');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO payments (merchant_request_id, checkout_request_id, amount, mpesa_receipt_number, transaction_date, phone_number) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssdsss", $merchantRequestID, $checkoutRequestID, $amount, $mpesaReceiptNumber, $transactionDate, $phoneNumber);
$stmt->execute();
$stmt->close();
$conn->close();
echo json_encode(['ResultCode' => 0, 'ResultDesc' => 'Success']);
} else {
// Payment failed or was cancelled
echo json_encode(['ResultCode' => 1, 'ResultDesc' => 'Payment Failed or Cancelled']);
}
} else {
// Invalid callback or no result code
echo json_encode(['ResultCode' => 1, 'ResultDesc' => 'Invalid Request']);
}