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

