Защита смс
Отправляя рассылку 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' ?>