You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
8.0 KiB
227 lines
8.0 KiB
<?php
|
|
if (!defined('pp_allowed_access')) {
|
|
die('Direct access not allowed');
|
|
}
|
|
|
|
add_action('pp_transaction_ipn', 'send_sms_notification_transaction_ipn');
|
|
add_action('pp_invoice_ipn', 'send_sms_notification_invoice_ipn');
|
|
|
|
function send_sms_notification_transaction_ipn($transaction_id) {
|
|
global $conn;
|
|
|
|
$transaction_details = pp_get_transation($transaction_id);
|
|
$plugin_slug = 'sms-notification';
|
|
$sms_settings = pp_get_plugin_setting($plugin_slug);
|
|
|
|
if (empty($sms_settings)) {
|
|
return; // SMS settings not found
|
|
}
|
|
|
|
// Check if mobile number is valid
|
|
$mobile_number = $transaction_details['response'][0]['c_email_mobile'];
|
|
if (!validate_mobile_number($mobile_number)) {
|
|
return; // Mobile number not valid
|
|
}
|
|
|
|
// Check if transaction notifications are enabled
|
|
if (!isset($sms_settings['enable_transaction_complete'])) {
|
|
return;
|
|
}
|
|
|
|
// Prepare SMS content
|
|
$message = "Dear ".$transaction_details['response'][0]['c_name'].",\n";
|
|
$message .= "Your transaction #".$transaction_id." has been processed.\n";
|
|
$message .= "Amount: ".$transaction_details['response'][0]['transaction_amount']." ".$transaction_details['response'][0]['transaction_currency']."\n";
|
|
$message .= "Status: ".$transaction_details['response'][0]['transaction_status']."\n";
|
|
$message .= "Date: ".$transaction_details['response'][0]['created_at']."\n";
|
|
$message .= "Thank you!";
|
|
|
|
// Send SMS based on selected gateway
|
|
if(isset($sms_settings['sms_gateway'])) {
|
|
if($sms_settings['sms_gateway'] == 'bulksmsbd'){
|
|
send_via_bulksmsbd($sms_settings, $mobile_number, $message);
|
|
}else{
|
|
if($sms_settings['sms_gateway'] == 'mimsms'){
|
|
send_via_mimsms($sms_settings, $mobile_number, $message);
|
|
}else{
|
|
if($sms_settings['sms_gateway'] == 'greenweb'){
|
|
send_via_greenweb($sms_settings, $mobile_number, $message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function send_sms_notification_invoice_ipn($invoice_id) {
|
|
global $conn;
|
|
|
|
$invoice_details = pp_get_invoice($invoice_id);
|
|
$invoice_items = pp_get_invoice_items($invoice_id); // Get invoice items
|
|
$plugin_slug = 'sms-notification';
|
|
$sms_settings = pp_get_plugin_setting($plugin_slug);
|
|
|
|
if (empty($sms_settings)) {
|
|
return; // SMS settings not found
|
|
}
|
|
|
|
// Check if mobile number is valid
|
|
$mobile_number = $invoice_details['response'][0]['c_email_mobile'];
|
|
if (!validate_mobile_number($mobile_number)) {
|
|
return; // Mobile number not valid
|
|
}
|
|
|
|
// Calculate invoice total from items
|
|
$total_amount = 0;
|
|
foreach ($invoice_items['response'] as $item) {
|
|
$item_total = $item['amount'] * $item['quantity'];
|
|
$item_discount = min($item['discount'], $item_total);
|
|
$item_amount_after_discount = $item_total - $item_discount;
|
|
$item_vat = $item_amount_after_discount * ($item['vat'] / 100);
|
|
$total_amount += $item_amount_after_discount + $item_vat;
|
|
}
|
|
|
|
// Add shipping cost if exists
|
|
if (isset($invoice_details['response'][0]['i_amount_shipping'])) {
|
|
$total_amount += floatval($invoice_details['response'][0]['i_amount_shipping']);
|
|
}
|
|
|
|
// Determine which notifications are enabled
|
|
$send_sms = false;
|
|
$message = "";
|
|
|
|
switch($invoice_details['response'][0]['i_status']) {
|
|
case 'unpaid':
|
|
if (isset($sms_settings['enable_invoice_created'])) {
|
|
$send_sms = true;
|
|
$message = "Dear ".$invoice_details['response'][0]['c_name'].",\n";
|
|
$message .= "Invoice #".$invoice_id." has been created.\n";
|
|
$message .= "Amount: ".number_format($total_amount, 2)." ".$invoice_details['response'][0]['i_currency']."\n";
|
|
$message .= "Due Date: ".$invoice_details['response'][0]['i_due_date']."\n";
|
|
$message .= "Status: Unpaid\n";
|
|
|
|
// Only include payment link if available
|
|
$payment_link = get_invoice_link($invoice_id);
|
|
if ($payment_link) {
|
|
$message .= "Pay now: ".$payment_link;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'paid':
|
|
if (isset($sms_settings['enable_invoice_paid'])) {
|
|
$send_sms = true;
|
|
$message = "Dear ".$invoice_details['response'][0]['c_name'].",\n";
|
|
$message .= "Invoice #".$invoice_id." has been paid.\n";
|
|
$message .= "Amount: ".number_format($total_amount, 2)." ".$invoice_details['response'][0]['i_currency']."\n";
|
|
$message .= "Thank you for your payment!";
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (!$send_sms) {
|
|
return;
|
|
}
|
|
|
|
if(isset($sms_settings['sms_gateway'])) {
|
|
if($sms_settings['sms_gateway'] == 'bulksmsbd'){
|
|
send_via_bulksmsbd($sms_settings, $mobile_number, $message);
|
|
}else{
|
|
if($sms_settings['sms_gateway'] == 'mimsms'){
|
|
send_via_mimsms($sms_settings, $mobile_number, $message);
|
|
}else{
|
|
if($sms_settings['sms_gateway'] == 'greenweb'){
|
|
send_via_greenweb($sms_settings, $mobile_number, $message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// SMS Gateway Implementations
|
|
function send_via_bulksmsbd($settings, $mobile, $message) {
|
|
$api_key = $settings['bulksmsbd_api_key'];
|
|
$sender_id = $settings['bulksmsbd_sender_id'];
|
|
$type = $settings['bulksmsbd_type']; // text or unicode
|
|
|
|
$url = "http://bulksmsbd.net/api/smsapi";
|
|
$data = [
|
|
"api_key" => $api_key,
|
|
"senderid" => $sender_id,
|
|
"number" => $mobile,
|
|
"message" => $message,
|
|
"type" => $type
|
|
];
|
|
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
$response = curl_exec($ch);
|
|
curl_close($ch);
|
|
}
|
|
|
|
function send_via_mimsms($settings, $mobile, $message) {
|
|
$url = "https://api.mimsms.com/api/SmsSending/SMS";
|
|
|
|
$data = [
|
|
"UserName" => $settings['mimsms_username'],
|
|
"Apikey" => $settings['mimsms_api_key'],
|
|
"MobileNumber" => $mobile,
|
|
"CampaignId" => null, // or you can use "null" (as a string) if required
|
|
"SenderName" => $settings['mimsms_sender_id'],
|
|
"TransactionType" => "T",
|
|
"Message" => $message
|
|
];
|
|
|
|
$payload = json_encode($data);
|
|
|
|
$ch = curl_init($url);
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
"Content-Type: application/json",
|
|
"Accept: application/json"
|
|
]);
|
|
|
|
$response = curl_exec($ch);
|
|
|
|
curl_close($ch);
|
|
}
|
|
|
|
function send_via_greenweb($settings, $mobile, $message) {
|
|
$to = $mobile;
|
|
$token = $settings['greenweb_api_token'];
|
|
$message = $message;
|
|
$url = "https://api.bdbulksms.net/api.php?json";
|
|
|
|
$data= array(
|
|
'to'=>$to,
|
|
'message'=>$message,
|
|
'token'=>$token
|
|
);
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL,$url);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
$smsresult = curl_exec($ch);
|
|
curl_close($ch);
|
|
}
|
|
|
|
// Helper function to validate mobile numbers
|
|
function validate_mobile_number($number) {
|
|
// Remove any non-digit characters
|
|
$number = preg_replace('/[^0-9]/', '', $number);
|
|
|
|
// Check if it's a valid Bangladeshi mobile number
|
|
if (preg_match('/^(?:\+88|88)?(01[3-9]\d{8})$/', $number, $matches)) {
|
|
return '880'.$matches[1]; // Return in 8801XXXXXXXXX format
|
|
}
|
|
|
|
return false;
|
|
}
|