Защита смс

защита отправки смс через https Отправляя рассылку sms сообщений через наш API вы можете использовать шифрование отправляемой информации при помощи криптографического протокола SSL. SSL (Secure Sockets Layer - уровень защищённых сокетов) - криптографический протокол, обеспечивающий установку безопасного соединения между клиентом и сервером.

Ниже показан пример функции для отправки смс сообщений через стандартный смс API и расширенный смс API с использованием SSL через PHP.

Смс защита для стандартного API


			
			<?php 
						
			function send($host, $port, $login, $password, $phone, $text, $sender = false, $wapurl = false )
				{
					$fp = fsockopen('ssl://'.$host, $port, $errno, $errstr);
					if (!$fp) {
						return "errno: $errno \nerrstr: $errstr\n";
					}
					fwrite($fp, "GET /messages/v2/send/" .
						"?phone=" . rawurlencode($phone) .
						"&text=" . rawurlencode($text) .
						($sender ? "&sender=" . rawurlencode($sender) : "") .
						($wapurl ? "&wapurl=" . rawurlencode($wapurl) : "") .
						" HTTP/1.0\r\n");
					fwrite($fp, "Host: " . $host . "\r\n");
					if ($login != "") {
						fwrite($fp, "Authorization: Basic " . 
							base64_encode($login. ":" . $password) . "\n");
					}
					fwrite($fp, "\n");
					$response = "";
					while(!feof($fp)) {
						$response .= fread($fp, 1);
					}
					fclose($fp);
					list($other, $responseBody) = explode("\r\n\r\n", $response, 2);
					return $responseBody;
				}
				
					/*
					* использование функции передачи сообщения
					*/
					echo send("api.smsfeedback.ru", 443, "api_login", "api_password",
					          "79031234567", "text here protected by ssl", "TEST-SMS");
		  
				  exit();
  
			?>

Защита смс для расширенного API


			
<?php 
class Smsfeedback_JsonGate
{
     
    const ERROR_EMPTY_API_LOGIN = 'Empty api login not allowed'; 
    const ERROR_EMPTY_API_PASSWORD = 'Empty api password not allowed'; 
    const ERROR_EMPTY_RESPONSE = 'errorEmptyResponse';
     
    protected $_apiLogin = null;
     
    protected $_apiPassword = null;
     
    protected $_host = 'api.smsfeedback.ru';
     
    protected $_packetSize = 200;
     
    protected $_results = array();
     
    public function __construct($apiLogin, $apiPassword)
    {
        $this->_setApiLogin($apiLogin);
        $this->_setApiPassword($apiPassword);
    }
     
    private function _setApiLogin($apiLogin)
    {
        if (empty($apiLogin)) {
            throw new Exception(self::ERROR_EMPTY_API_LOGIN);
        }
        $this->_apiLogin = $apiLogin;
    }
     
    private function _setApiPassword($apiPassword)
    {
        if (empty($apiPassword)) {
            throw new Exception(self::ERROR_EMPTY_API_PASSWORD);
        }
        $this->_apiPassword = $apiPassword;
    }
     
    public function setHost($host)
    {
        $this->_host = $host;
    }
     
    public function getHost()
    {
        return $this->_host;
    }
     
    private function _sendRequest($uri, $params = null)
    {
        $url = $this->_getUrl($uri);
        $data = $this->_formPacket($params);
 
        $client = curl_init($url);
        curl_setopt_array($client, array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HEADER => false,
            CURLOPT_POST => true,
			CURLOPT_SSL_VERIFYPEER => false,
			CURLOPT_SSL_VERIFYHOST => 1,
            CURLOPT_HEADER => false,
            CURLOPT_HTTPHEADER => array('Host: ' . $this->getHost()),
            CURLOPT_POSTFIELDS => $data,
        ));
         
        $body = curl_exec($client);
        curl_close($client);
        if (empty($body)) {
            throw new Exception(self::ERROR_EMPTY_RESPONSE);
        }
        $decodedBody = json_decode($body, true);
        if (is_null($decodedBody)) {
            throw new Exception($body);
        }
        return $decodedBody;
    }
     
    private function _getUrl($uri)
    {
        return 'https://' . $this->getHost() . '/' . $uri . '/';
    }
     
    private function _formPacket($params = null)
    {
        $params['login'] = $this->_apiLogin;
        $params['password'] = $this->_apiPassword;
        foreach ($params as $key => $value) {
            if (empty($value)) {
                unset($params[$key]);
            }
        }
        $packet = json_encode($params);
        return $packet;
    }
     
    public function getPacketSize()
    {
        return $this->_packetSize;
    }
     
    public function send($messages, $statusQueueName = null, $scheduleTime = null)
    {
        $params = array(
           'messages' => $messages,
           'statusQueueName' => $statusQueueName,
           'scheduleTime' => $scheduleTime,
        );
        return $this->_sendRequest('messages/v2/send.json', $params);
    }
     
    public function status($messages)
    {
        return $this->_sendRequest('messages/v2/status.json', array('messages' => $messages));
    }
     
    public function statusQueue($name, $limit)
    {
        return $this->_sendRequest('messages/v2/statusQueue.json', array(
            'statusQueueName' => $name,
            'statusQueueLimit' => $limit,
        ));
    }
     
    public function credits()
    {
        return $this->_sendRequest('messages/v2/balance.json');
    }
     
    public function senders()
    {
        return $this->_sendRequest('messages/v2/senders.json');
    }
     
}
 
// Использем class Smsfeedback_JsonGate
 
$gate = new Smsfeedback_JsonGate('nautest', 'nautest');
 
   var_dump($gate->credits()); // узнаем текущий баланс
   var_dump($gate->senders()); // получаем список доступных подписей
    
   $messages = array(
        array(
               "clientId" => "1",
               "phone"=> "79031234567",
               "text"=> "first message",
               "sender"=> "TEST-SMS"
           ),
       );
   var_dump($gate->send($messages, 'testQueue')); // отправляем пакет sms
    
   $messages = array(
    array("clientId"=>"1","smscId"=>11255142),
   );
   var_dump($gate->status($messages)); // получаем статусы для пакета sms
   var_dump($gate->statusQueue('testQueue', 10)); // получаем статусы из очереди 'testQueue'
  
?>