From 573d8469c2fb9ed39547442a65ca168d7c79ec9f Mon Sep 17 00:00:00 2001 From: kevinowino869 Date: Sun, 30 Mar 2025 13:12:36 +0200 Subject: [PATCH] Update pages/payment.php Signed-off-by: kevinowino869 --- pages/payment.php | 58 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/pages/payment.php b/pages/payment.php index 41a1fb8..e9e2295 100644 --- a/pages/payment.php +++ b/pages/payment.php @@ -1,4 +1,56 @@ \ No newline at end of file +/** + * M-Pesa Payment Module - Callback Handler + * Author: NESTICT INFOTECH + * Version: 1.0.0 + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT . "/core/lib/admin.lib.php"; + +header('Content-Type: application/json'); + +// Retrieve M-Pesa callback data +$callbackData = json_decode(file_get_contents('php://input'), true); + +if (!$callbackData) { + http_response_code(400); + echo json_encode(["error" => "Invalid callback data"]); + exit; +} + +// Extract data from callback +$invoiceId = $callbackData['AccountReference'] ?? null; +$transactionId = $callbackData['MpesaReceiptNumber'] ?? null; +$resultCode = $callbackData['ResultCode'] ?? 1; +$resultDesc = $callbackData['ResultDesc'] ?? "Unknown error"; + +if (!$invoiceId || !$transactionId) { + http_response_code(400); + echo json_encode(["error" => "Missing invoice or transaction ID"]); + exit; +} + +// Handle successful transaction +if ($resultCode == 0) { + $sql = "UPDATE ".MAIN_DB_PREFIX."facture SET transaction_number = '$transactionId', paye = 1 WHERE rowid = $invoiceId"; + $db->query($sql); + + // Log payment in Dolibarr + $sqlPayment = "INSERT INTO ".MAIN_DB_PREFIX."paiement (facid, amount, datep, num_payment) VALUES ($invoiceId, (SELECT total FROM ".MAIN_DB_PREFIX."facture WHERE rowid = $invoiceId), NOW(), '$transactionId')"; + $db->query($sqlPayment); + + // Update invoice status + $sqlUpdateInvoice = "UPDATE ".MAIN_DB_PREFIX."facture SET statut = 2 WHERE rowid = $invoiceId"; // Paid status + $db->query($sqlUpdateInvoice); + + http_response_code(200); + echo json_encode(["success" => "Payment successful", "transaction_id" => $transactionId]); +} else { + // Handle failed transaction + http_response_code(400); + echo json_encode(["error" => $resultDesc]); +} + +$db->close(); +?>