| Server IP : 62.60.133.156 / Your IP : 216.73.217.51 Web Server : LiteSpeed System : Linux linux24.centraldnserver.com 4.18.0-553.141.2.lve.el8.x86_64 #1 SMP Wed Jul 8 16:10:02 UTC 2026 x86_64 User : mimradmin ( 1166) PHP Version : 7.4.33 Disable Function : show_source, system, shell_exec, passthru, exec, popen, proc_open MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/mimradmin/.trash/wp-content/plugins/persian-woocommerce-sms/src/Gateways/ |
Upload File : |
<?php
namespace PW\PWSMS\Gateways;
use SoapClient;
use SoapFault;
class Modirpayamak implements GatewayInterface {
use GatewayTrait;
/**
* @var string
*/
public string $api_url = 'https://ippanel.com/api/select';
/**
* @var array
*/
public array $failed_numbers = [];
public static function id() {
return 'modirpayamak';
}
public static function name() {
return 'Modirpayamak.com';
}
public function send() {
$username = trim( $this->username );
$password = trim( $this->password );
$message_content = trim( $this->message );
$sender_number = trim( $this->senderNumber );
$recipient_numbers = $this->mobile;
if ( empty( $sender_number ) ) {
$sender_number = '+983000505';
}
$this->failed_numbers = []; // Reset the property for each send operation
// Replace "pcode" with "patterncode" in the message
$message_content = str_replace( 'pcode', 'patterncode', $message_content );
// Handle pattern-based message
if ( substr( $message_content, 0, 11 ) === "patterncode" ) {
$message_content = str_replace( [ "\r\n", "\n" ], ';', $message_content );
$message_parts = explode( ';', $message_content );
$pattern_code = explode( ':', $message_parts[0] )[1];
unset( $message_parts[0] );
$pattern_data = [];
foreach ( $message_parts as $parameter ) {
$split_parameter = explode( ':', $parameter, 2 );
$pattern_data[ $split_parameter[0] ] = $split_parameter[1];
}
// Loop over recipients to send pattern messages
foreach ( $recipient_numbers as $recipient ) {
$payload = [
'op' => 'pattern',
'user' => $username,
'pass' => $password,
'fromNum' => $sender_number,
'toNum' => $recipient,
'patternCode' => $pattern_code,
'inputData' => [ $pattern_data ],
];
$response = wp_remote_post( $this->api_url, [
'method' => 'POST',
'body' => json_encode( $payload ),
'timeout' => 30,
'headers' => [
'Content-Type' => 'application/json',
],
] );
// Handle response for each recipient
$this->handle_response( $response, $recipient );
}
} else {
try {
$client = new SoapClient( "http://ippanel.com/class/sms/wsdlservice/server.php?wsdl" );
$client->SendSMS( $sender_number, $recipient_numbers, $message_content, $username, $password, '', 'send' );
return true;
} catch ( SoapFault $ex ) {
return $ex->faultstring;
}
}
// Check for failed numbers and return error message
if ( ! empty( $this->failed_numbers ) ) {
// Group numbers by their messages
$grouped = [];
foreach ( $this->failed_numbers as $number => $message ) {
if ( ! isset( $grouped[ $message ] ) ) {
$grouped[ $message ] = [];
}
$grouped[ $message ][] = $number;
}
// Format the grouped data
return implode( ', ', array_map( function ( string $message, array $numbers ) {
return implode( ',', $numbers ) . ': ' . $message;
}, array_keys( $grouped ), $grouped ) );
}
// If no failed numbers, return true for success
return true;
}
/**
* Handle the response for each recipient.
*
* @param mixed $response
* @param string $recipient
*/
private function handle_response( $response, $recipient ) {
if ( is_wp_error( $response ) ) {
$this->failed_numbers[ $recipient ] = $response->get_error_message();
return;
}
$response_code = wp_remote_retrieve_response_code( $response );
$response_message = wp_remote_retrieve_response_message( $response );
if ( empty( $response_code ) || 200 != $response_code ) {
$this->failed_numbers[ $recipient ] = $response_code . ' -> ' . $response_message;
return;
}
$response_body = wp_remote_retrieve_body( $response );
if ( empty( $response_body ) ) {
$this->failed_numbers[ $recipient ] = 'بدون پاسخ دریافتی از سمت وب سرویس.';
return;
}
$response_data = json_decode( $response_body, true );
if ( json_last_error() !== JSON_ERROR_NONE ) {
$this->failed_numbers[ $recipient ] = 'فرمت نامعتبر پاسخ از سمت وب سرویس.';
return;
}
if ( is_numeric( $response_data ) || ( isset( $response_data[0] ) && $response_data[0] == '0' ) ) {
// Successful response, no need to do anything further.
return;
}
// Handle error based on the response
$this->failed_numbers[ $recipient ] = $response_data[1] ?? 'خطای ناشناخته.';
}
/**
* Generate error message based on returning codes
*
* @param string $error_code
*
* @return string
*/
private function errors_describe( $error_code ) {
$error_messages = [
'-1' => 'ارتباط با سامانه پیامک انجام نشد.',
'0' => 'عملیات با موفقیت انجام شده است.',
'1' => 'متن پیام خالی می باشد.',
'2' => 'کاربر محدود گردیده است.',
'3' => 'خط به شما تعلق ندارد.',
'4' => 'گیرندگان خالی است.',
'5' => 'اعتبار کافی نیست.',
'7' => 'خط مورد نظر برای ارسال انبوه مناسب نمیباشد.',
'9' => 'خط مورد نظر در این ساعت امکان ارسال ندارد.',
'98' => 'حداکثر تعداد گیرنده رعایت نشده است.',
'99' => 'اپراتور خط ارسالی قطع می باشد.',
'21' => 'پسوند فایل صوتی نامعتبر است.',
'22' => 'سایز فایل صوتی نامعتبر است.',
'23' => 'تعداد تلاش در پیام صوتی نامعتبر است.',
'100' => 'شماره مخاطب دفترچه تلفن نامعتبر می باشد.',
'101' => 'شماره مخاطب در دفترچه تلفن وجود دارد.',
'102' => 'شماره مخاطب با موفقیت در دفترچه تلفن ذخیره گردید.',
'111' => 'حداکثر تعداد گیرنده برای ارسال پیام صوتی رعایت نشده است.',
'131' => 'تعداد تلاش در پیام صوتی باید یکبار باشد.',
'132' => 'آدرس فایل صوتی وارد نگردیده است.',
'266' => 'شما نمی توانید از خط اشتراکی استفاده نمایید.',
'301' => 'از حرف ویژه در نام کاربری استفاده گردیده است.',
'302' => 'قیمت گذاری انجام نگردیده است.',
'303' => 'نام کاربری وارد نگردیده است.',
'304' => 'نام کاربری قبلا انتخاب گردیده است.',
'305' => 'نام کاربری وارد نگردیده است.',
'306' => 'کد ملی وارد نگردیده است.',
'307' => 'کد ملی به خطا وارد شده است.',
'308' => 'شماره شناسنامه نامعتبر است.',
'309' => 'شماره شناسنامه وارد نگردیده است.',
'310' => 'ایمیل کاربر وارد نگردیده است.',
'311' => 'شماره تلفن وارد نگردیده است.',
'312' => 'تلفن به درستی وارد نگردیده است.',
'313' => 'آدرس شما وارد نگردیده است.',
'314' => 'شماره موبایل را وارد نکرده اید.',
'315' => 'شماره موبایل به نادرستی وارد گردیده است.',
'316' => 'سطح دسترسی به نادرستی وارد گردیده است.',
'317' => 'کلمه عبور وارد نگردیده است.',
'404' => 'پترن در دسترس نیست.',
'455' => 'ارسال در آینده برای کد بالک ارسالی لغو شد.',
'456' => 'کد بالک ارسالی نامعتبر است.',
'458' => 'کد تیکت نامعتبر است.',
'964' => 'شما دسترسی نمایندگی ندارید.',
'962' => 'نام کاربری یا کلمه عبور نادرست می باشد.',
'963' => 'دسترسی نامعتبر می باشد.',
'971' => 'پترن ارسالی نامعتبر است.',
'970' => 'پارامتر های ارسالی برای پترن نامعتبر است.',
'972' => 'دریافت کننده برای ارسال پترن نامعتبر می باشد.',
'992' => 'ارسال پیام از ساعت 8 تا 23 می باشد.',
'993' => 'دفترچه تلفن باید یک آرایه باشد',
'994' => 'لطفا تصویری از کارت بانکی خود را از منو مدارک ارسال کنید',
'995' => 'جهت ارسال با خطوط اشتراکی سامانه، لطفا شماره کارت بانکی خود را به دلیل تکمیل فرایند احراز هویت از بخش ارسال مدارک ثبت نمایید.',
'996' => 'پترن فعال نیست.',
'997' => 'شما اجازه ارسال از این پترن را ندارید.',
'998' => 'کارت ملی یا کارت بانکی شما تایید نشده است.',
'1001' => 'فرمت نام کاربری درست نمی باشد)حداقل 5 کاراکتر، فقط حروف و اعداد(.',
'1002' => 'گذرواژه خیلی ساده می باشد. باید حداقل 8 کاراکتر بوده و از نام کاربری و ایمیل و شماره موبایل خود در آن استفاده نکنید.',
'1003' => 'مشکل در ثبت، با پشتیبانی تماس بگیرید.',
'1004' => 'مشکل در ثبت، با پشتیبانی تماس بگیرید.',
'1005' => 'مشکل در ثبت، با پشتیبانی تماس بگیرید.',
'1006' => 'تاریخ ارسال پیام برای گذشته می باشد، لطفا تاریخ ارسال پیام را به درستی وارد نمایید.',
'1401' => 'اعتبارسنجی کاربر خطا دارد.',
'1402' => 'کلید وب سرویس معتبر نیست',
'1403' => 'کلید وب سرویس لغو شده است.',
'10001' => 'اعتبار پنل کافی نیست.',
'10002' => 'متن پیام خالی است.',
'10003' => 'کاربر محدود گردیده است.',
'10004' => 'شماره ارسال کننده به شما تعلق ندارد.',
'10005' => 'مخاطب پیامک خالی است.',
'10006' => 'اعتبار پنل کافی نیست.',
'10007' => 'خط مورد نظر برای ارسال انبوه مناسب نمیباشد.',
'10008' => 'خط ارسال کننده به صورت موقت غیرفعال شده است.',
'10009' => 'مخاطبان بیش از حد مجاز است.',
'10010' => 'درگاه پیامک غیرفعال است.',
'10011' => 'قیمتگذاری در پنل کاربر انجام نشده است.',
'10012' => 'تیکت غیرمعتبر است.',
'10013' => 'دسترسی ممنوع است.',
'10014' => 'پترن نامعتبر است.',
'10015' => 'پارامترهای پترن نامعتبر است.',
'10016' => 'پترن غیرفعال است.',
'10017' => 'گیرنده پیامک پترن نامعتبر است.',
'10019' => 'ارسال از این خط در ساعات شبانه ممنوع است.',
'10021' => 'برخی مدارک شما تایید نشده است.',
'10022' => 'خطای داخلی.',
'10023' => 'خط ارسال کننده یافت نشد',
'12404' => 'خط ارسال کننده یافت نشد',
'13001' => 'کارت ملی تایید نشده است',
'13002' => 'شماره کارت بانکی شما تایید نشده است',
'13003' => 'رمز عبور شما بسیار ضعیف است',
'13004' => 'خط ارسالی متعلق به شما نیست',
'13005' => 'پترن غیر فعال است.',
'13006' => 'شما نمی توانید از این پترن استفاده نمایید.',
'13007' => 'پترن در دسترس نیست.',
'13008' => 'گیرنده نامعتبر است.',
'13009' => 'درگاه غیرفعال است.',
'13010' => 'پارامتر های پترن نامعتبر است.',
'13011' => 'مقادیر پترن خیلی طولانی است.',
'13012' => 'پارامتر های پترن نامعتبر است.',
'422' => 'خطایی در ورودی ها وجود دارد.',
];
return ( isset( $error_messages[ $error_code ] ) ) ? $error_messages[ $error_code ] : 'اشکال تعریف نشده با کد :' . $error_code;
}
}