Update modMpesapay.class.php

Signed-off-by: kevinowino869 <kevinowino869@www.codelab.nestict.africa>
This commit is contained in:
kevinowino869 2025-03-30 13:44:44 +02:00
parent 8cc6a82807
commit 05f948294d

View File

@ -1,43 +1,172 @@
<?php
/**
* Dolibarr Module Descriptor for M-Pesa Payment
* Dolibarr Module Descriptor for Dolipesa - M-Pesa Payment Module
* Author: NESTICT INFOTECH
* Version: 1.0.0
* Version: 1.0.1
* License: GNU General Public License v3.0
*/
include_once DOL_DOCUMENT_ROOT . "/core/modules/DolibarrModules.class.php";
include_once DOL_DOCUMENT_ROOT . '/core/modules/DolibarrModules.class.php';
class modMpesapay extends DolibarrModules
/**
* Class modDolipesa
* Module descriptor for Dolipesa M-Pesa payment integration
*/
class modDolipesa extends DolibarrModules
{
function __construct($db)
/**
* Constructor
*
* @param DoliDB $db Database handler
*/
public function __construct($db)
{
global $langs, $conf;
$this->db = $db;
$this->numero = 104900;
$this->rights_class = 'mpesapay';
$this->family = 'payment';
$this->name = "M-Pesa Payment Module";
$this->description = "Accept M-Pesa payments in Dolibarr.";
$this->version = '1.0.0';
// Module metadata
$this->numero = 104900; // Unique module ID
$this->rights_class = 'dolipesa';
$this->family = 'financial';
$this->module_position = '50';
$this->name = preg_replace('/^mod/i', '', get_class($this)); // Extracts "Dolipesa" from class name
$this->description = 'Enables M-Pesa payment acceptance within Dolibarr ERP/CRM.';
$this->descriptionlong = 'Integrates Safaricom M-Pesa STK Push for seamless invoice and order payments.';
$this->editor_name = 'NESTICT INFOTECH';
$this->editor_url = 'https://www.nestict.com';
$this->version = '1.0.1';
$this->langs = 'dolipesa@dolipesa'; // Language file
// Configuration constants
$this->const = array(
array('MPESAPAY_PAYBILL', 'chaine', '', 'M-Pesa Paybill Number', 0, 'current', 1),
array('MPESAPAY_PASSKEY', 'chaine', '', 'M-Pesa Passkey', 0, 'current', 1)
0 => array(
'name' => 'MPESAPAY_CONSUMER_KEY',
'type' => 'chaine',
'default' => '',
'desc' => 'M-Pesa Consumer Key from Safaricom Daraja API',
'visible' => 0,
'entity' => 'current',
'enabled' => 1
),
1 => array(
'name' => 'MPESAPAY_CONSUMER_SECRET',
'type' => 'chaine',
'default' => '',
'desc' => 'M-Pesa Consumer Secret from Safaricom Daraja API (encrypted)',
'visible' => 0,
'entity' => 'current',
'enabled' => 1
),
2 => array(
'name' => 'MPESAPAY_SHORTCODE',
'type' => 'chaine',
'default' => '',
'desc' => 'M-Pesa Business Shortcode (Paybill or Till Number)',
'visible' => 0,
'entity' => 'current',
'enabled' => 1
),
3 => array(
'name' => 'MPESAPAY_PASSKEY',
'type' => 'chaine',
'default' => '',
'desc' => 'M-Pesa Passkey for STK Push (encrypted)',
'visible' => 0,
'entity' => 'current',
'enabled' => 1
),
4 => array(
'name' => 'MPESAPAY_CALLBACK_URL',
'type' => 'chaine',
'default' => DOL_MAIN_URL_ROOT . '/custom/dolipesa/callback.php',
'desc' => 'Callback URL for M-Pesa transaction responses',
'visible' => 0,
'entity' => 'current',
'enabled' => 1
)
);
$this->module_parts = array('hooks' => array('invoicecard', 'payment'));
// Module parts
$this->module_parts = array(
'hooks' => array('invoicecard', 'paymentcard', 'newpayment'), // Hooks for UI and payment processing
'triggers' => 0,
'login' => 0,
'substitutions' => 0,
'menus' => 0,
'theme' => 0,
'css' => array(),
'js' => array(),
'models' => 0
);
$this->config_page_url = "mpesapay_setup.php";
$this->dirs = array('/mpesapay');
$this->picto = 'payment';
// Config page
$this->config_page_url = array('mpesapay_setup.php@dolipesa'); // Path relative to module dir
// Data directories
$this->dirs = array('/dolipesa/temp');
// Icon
$this->picto = 'payment@payment'; // Use Dolibarr payment icon
// Dependencies
$this->depends = array('modFacture'); // Requires invoice module
$this->requiredby = array();
$this->phpmin = array(7, 4); // Minimum PHP version
}
// Generate Payment URL
function generatePaymentUrl($invoiceId)
/**
* Generate a secure payment URL for an invoice
*
* @param int $invoiceId Invoice ID
* @return string Payment URL
*/
public function generatePaymentUrl($invoiceId)
{
$token = base64_encode(hash('sha256', $invoiceId . time()));
return DOL_URL_ROOT . "/custom/mpesapay/payment.php?invoice_id={$invoiceId}&token={$token}";
global $conf;
// Generate a secure token using invoice ID and a salt
$token = hash_hmac('sha256', $invoiceId . time(), $conf->global->MAIN_SECURITY_SALT);
$url = DOL_MAIN_URL_ROOT . '/custom/dolipesa/payment.php';
$url .= '?invoice_id=' . urlencode($invoiceId) . '&token=' . urlencode($token);
return $url;
}
/**
* Initialize the module (called during activation)
*
* @return int 1 on success, < 0 on error
*/
public function init()
{
// Create SQL tables if needed
$sql = array(
"CREATE TABLE IF NOT EXISTS " . MAIN_DB_PREFIX . "dolipesa_transactions (
id int AUTO_INCREMENT PRIMARY KEY,
checkout_request_id varchar(50) NOT NULL,
fk_invoice int NOT NULL,
transaction_id varchar(50) DEFAULT NULL,
result_code varchar(10) DEFAULT NULL,
result_desc varchar(255) DEFAULT NULL,
datec datetime NOT NULL,
INDEX idx_fk_invoice (fk_invoice),
INDEX idx_checkout_request_id (checkout_request_id)
) ENGINE=InnoDB;"
);
return $this->_init($sql);
}
/**
* Remove the module (called during deactivation)
*
* @return int 1 on success, < 0 on error
*/
public function remove()
{
$sql = array();
return $this->_remove($sql); // No table drop by default; customize if needed
}
}
?>
?>