Advertisement
binizik

SigmaSMS vTiger

Jun 3rd, 2016
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.55 KB | None | 0 0
  1. <?php
  2. /*+**********************************************************************************
  3.  * PINstudio #Binizik
  4.  ************************************************************************************/
  5. include_once 'vtlib/Vtiger/Net/Client.php';
  6.  
  7. class SMSNotifier_SigmaSMS_Provider implements SMSNotifier_ISMSProvider_Model {
  8.  
  9.     private $_username;
  10.     private $_password;
  11.     private $_parameters = array();
  12.     private $_errorsMsg = array(
  13.             1 => 'ошибка авторизации',
  14.             2 => 'недостаточно денежных средств',
  15.             3 => 'запрос отвергнут провайдером',
  16.             4 => 'неверный запрос',
  17.             5 => 'неверный тип запроса',
  18.             6 => 'неверные параметры сообщения',
  19.             7 => 'запрос с неизвестного IP адреса',
  20.             8 => 'сообщение не найдено в БД',
  21.             9 => 'неверный адрес отправителя',
  22.             10 => 'неверный текст сообщения',
  23.             11 => 'неверный параметр validity_period',
  24.             13 => 'превышено максимальное количество номеров за один запрос',
  25.             14 => 'неверный тип группы',
  26.             15 => 'ошибка сохранения в БД',
  27.             16 => 'неверный формат даты',
  28.             17 => 'неверный формат даты и времени',
  29.             99 => 'внутренняя ошибка системы'
  30.         );
  31.  
  32.     const SENDER_PARAM = 'Отправитель';
  33.  
  34.     private static $REQUIRED_PARAMETERS = array(self::SENDER_PARAM);
  35.  
  36.     function __construct() {
  37.     }
  38.  
  39.     public function getName() {
  40.         return 'SigmaSMS';
  41.     }
  42.  
  43.     public function setAuthParameters($username, $password) {
  44.         $this->_username = $username;
  45.         $this->_password = $password;
  46.     }
  47.  
  48.     public function setParameter($key, $value) {
  49.         $this->_parameters[$key] = $value;
  50.     }
  51.  
  52.     public function getParameter($key, $defvalue = false)  {
  53.         if(isset($this->_parameters[$key])) {
  54.             return $this->_parameters[$key];
  55.         }
  56.         return $defvalue;
  57.     }
  58.  
  59.     public function getRequiredParams() {
  60.         return self::$REQUIRED_PARAMETERS;
  61.     }
  62.  
  63.     public function getServiceURL($type = false) {
  64.         return false;
  65.     }
  66.  
  67.     public function send($message, $tonumbers) {
  68.         if (!is_array($tonumbers)) {
  69.             $tonumbers = array($tonumbers);
  70.         }
  71.         $message = htmlspecialchars($message);
  72.         $results = array();
  73.         $fields = array();
  74.  
  75.         foreach ($tonumbers as $to) {
  76.             $fields['target'] .= $to.',';
  77.         }
  78.        
  79.         $fields['target'] = urlencode( rtrim($fields['target'], ',') );
  80.         $fields['user'] = urlencode( $this->_username );
  81.         $fields['pass'] = urlencode( md5($this->_password) );
  82.         $fields['type'] = urlencode('SMS');
  83.         $fields['action'] = urlencode('post');
  84.         $fields['message'] = urlencode( htmlspecialchars($message) );
  85.         $fields['sender'] = urlencode( $this->getParameter(self::SENDER_PARAM) );
  86.  
  87.  
  88.         $responseXml = $this->curl_send($fields, 'http://gates.sigmasms.ru/http/gate.cgi');
  89.         $response = simplexml_load_string($responseXml);
  90.  
  91.         if (empty($response->result->error)) {
  92.             foreach ($response->result->message as $k => $v) {
  93.                 $result['id'] = $v->attributes()['id'];
  94.                 $result['to'] = $v->attributes()['target'];
  95.                 $result['status'] = self::MSG_STATUS_PROCESSING;
  96.                 $result['statusmessage'] = "Передано в MSGC на отправку - в очереди отправки MSGC";
  97.  
  98.                 $results[] = $result;
  99.             }
  100.  
  101.             if (!empty($response->errors)) {
  102.                 foreach ($response->errors->error as $k => $v) {
  103.                     $result['id'] = time()-rand(0, 2244); // Random id
  104.                     $result['to'] = $v->attributes()['target'];
  105.                     $result['error'] = true;
  106.                     $result['status'] = self::MSG_STATUS_ERROR;
  107.                     $result['statusmessage'] = $v;
  108.  
  109.                     $results[] = $result;
  110.                 }
  111.             }
  112.         } else {
  113.             foreach (explode(',', $fields['target']) as $k => $v) {
  114.                 $result['id'] = time()-rand(0, 2244); // Random id
  115.                 $result['to'] = $v;
  116.                 $result['error'] = true;
  117.                 $result['status'] = self::MSG_STATUS_ERROR;
  118.                 $result['statusmessage'] = $this->_errorsMsg[ (int)$response->result->error ];
  119.  
  120.                 $results[] = $result;
  121.             }
  122.         }
  123.  
  124.         return $results;
  125.     }
  126.  
  127.     public function query($messageId) {
  128.         if (empty($messageId)){
  129.             $result['error'] = true;
  130.             $result['needlookup'] = 0;
  131.             $result['statusmessage'] = 'Пустой идентификатор сообщения';
  132.             $result['status'] = self::MSG_STATUS_ERROR;
  133.  
  134.             return $result;
  135.         }
  136.  
  137.         $fields['user'] = urlencode( $this->_username );
  138.         $fields['pass'] = urlencode( md5($this->_password) );
  139.         $fields['message_id'] = urlencode($messageId);
  140.         $fields['action'] = urlencode('status');
  141.  
  142.         $responseXml = $this->curl_send($fields, 'http://gates.sigmasms.ru/http/gate.cgi');
  143.         $response = simplexml_load_string($responseXml);
  144.  
  145.         if (!empty($response->result->error)) {
  146.             $result['error'] = true;
  147.             $result['needlookup'] = 0;
  148.             $result['status'] = self::MSG_STATUS_ERROR;
  149.             $result['statusmessage'] = $this->_errorsMsg[ (int)$response->result->error ];
  150.         } else {
  151.             switch($response->MESSAGES->MESSAGE->MSGSTC_CODE) {
  152.                 case 'delivered':
  153.                     // Сообщение было доставлено. Конечный статус (не меняется со временем)
  154.                     $result['statusmessage'] = "Сообщение было доставлено";
  155.                     $result['status'] = self::MSG_STATUS_DELIVERED;
  156.                     $result['needlookup'] = 0;
  157.                     $result['error'] = false;
  158.  
  159.                     break;
  160.                 case 'wait':
  161.                     // Не конечный статус (меняется со временем).
  162.                     $result['statusmessage'] = "Передано в MSGC на отправку - в очереди отправки MSGC";
  163.                     $result['status'] = self::MSG_STATUS_PROCESSING;
  164.                     $result['needlookup'] = 1;
  165.                     $result['error'] = false;
  166.  
  167.                     break;
  168.                 case 'failed':
  169.                     // Сообщение не было доставлено. Конечный статус (не меняется со временем)
  170.                     $result['statusmessage'] = "Сообщение не было доставлено";
  171.                     $result['status'] = self::MSG_STATUS_FAILED;
  172.                     $result['needlookup'] = 0;
  173.                     $result['error'] = true;
  174.  
  175.                     break;
  176.                 default:
  177.                     $result['statusmessage'] = "Неизвестный статус: ".$response->MESSAGES->MESSAGE->MSGSTC_CODE;
  178.                     $result['status'] = self::MSG_STATUS_ERROR;
  179.                     $result['needlookup'] = 0;
  180.                     $result['error'] = true;
  181.  
  182.                     break;
  183.             }
  184.         }
  185.  
  186.         return $result;
  187.     }
  188.  
  189.     private function curl_send($fields, $url) {
  190.         foreach ($fields as $k => $v) {
  191.             $data .= $k.'='.$v.'&';
  192.         }
  193.         rtrim($data,'&');
  194.  
  195.         $ch = curl_init();
  196.         curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=utf-8'));
  197.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  198.         curl_setopt($ch, CURLOPT_CRLF, true);
  199.         curl_setopt($ch, CURLOPT_POST, true);
  200.         curl_setopt($ch, CURLOPT_SSLVERSION,3);
  201.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  202.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  203.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  204.         curl_setopt($ch, CURLOPT_URL, $url);
  205.         $response = curl_exec($ch);
  206.         curl_close($ch);
  207.  
  208.         return $response;
  209.     }
  210. }
  211. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement